mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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
This commit is contained in:
parent
dd883de5ba
commit
fba8627dc1
Notes:
git
2019-09-30 10:27:03 +09:00
3 changed files with 1 additions and 7 deletions
|
@ -911,7 +911,7 @@ invokeblock
|
|||
// attr rb_snum_t sp_inc = sp_inc_of_invokeblock(ci);
|
||||
{
|
||||
static struct rb_call_cache cc = {
|
||||
0, 0, NULL, NULL, vm_invokeblock_i,
|
||||
0, 0, NULL, vm_invokeblock_i,
|
||||
};
|
||||
|
||||
VALUE bh = VM_BLOCK_HANDLER_NONE;
|
||||
|
|
|
@ -2330,7 +2330,6 @@ enum method_missing_reason {
|
|||
MISSING_NONE = 0x40
|
||||
};
|
||||
struct rb_callable_method_entry_struct;
|
||||
struct rb_method_definition_struct;
|
||||
struct rb_execution_context_struct;
|
||||
struct rb_control_frame_struct;
|
||||
struct rb_calling_info;
|
||||
|
@ -2342,7 +2341,6 @@ struct rb_call_cache {
|
|||
|
||||
/* inline cache: values */
|
||||
const struct rb_callable_method_entry_struct *me;
|
||||
const struct rb_method_definition_struct *def;
|
||||
|
||||
VALUE (*call)(struct rb_execution_context_struct *ec,
|
||||
struct rb_control_frame_struct *cfp,
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Add table
Reference in a new issue