From fba8627dc1c5b191713edeb5fc21cbe0ddde9e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= Date: Thu, 26 Sep 2019 13:44:51 +0900 Subject: delete unnecessary branch At last, not only myself but also your compiler are fully confident that the method entries pointed from call caches are immutable. We don't have to worry about silent updates. Just delete the branch that is now always false. Calculating ------------------------------------- ours trunk vm2_poly_same_method 2.142M 2.070M i/s - 6.000M times in 2.801148s 2.898994s Comparison: vm2_poly_same_method ours: 2141979.2 i/s trunk: 2069683.8 i/s - 1.03x slower --- vm_insnhelper.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'vm_insnhelper.c') diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 197e100607..545fba2dfe 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1386,9 +1386,6 @@ calccall(const struct rb_call_info *ci, const struct rb_call_cache *cc, const rb else if (LIKELY(cc->me != me)) { return vm_call_general; /* normal cases */ } - else if (UNLIKELY(cc->def != me->def)) { - return vm_call_general; /* cc->me was refined elsewhere */ - } /* "Calling a formerly-public method, which is now privatised, with an * explicit receiver" is the only situation we have to check here. A * formerly-private method now publicised is an absolutely safe thing. @@ -1411,7 +1408,6 @@ rb_vm_search_method_slowpath(const struct rb_call_info *ci, struct rb_call_cache GET_GLOBAL_METHOD_STATE(), RCLASS_SERIAL(klass), me, - me ? me->def : NULL, calccall(ci, cc, me), }; VM_ASSERT(callable_method_entry_p(cc->me)); -- cgit v1.2.3