diff options
-rw-r--r-- | debug_counter.h | 1 | ||||
-rw-r--r-- | vm_insnhelper.c | 6 |
2 files changed, 6 insertions, 1 deletions
diff --git a/debug_counter.h b/debug_counter.h index 8b23f17102..597307c833 100644 --- a/debug_counter.h +++ b/debug_counter.h @@ -21,6 +21,7 @@ RB_DEBUG_COUNTER(mc_inline_miss_invalidated) // IMC miss by invalidated ME RB_DEBUG_COUNTER(mc_inline_miss_empty) // IMC miss because prev is empty slot RB_DEBUG_COUNTER(mc_inline_miss_same_cc) // IMC miss, but same CC RB_DEBUG_COUNTER(mc_inline_miss_same_cme) // IMC miss, but same CME +RB_DEBUG_COUNTER(mc_inline_miss_same_def) // IMC miss, but same definition RB_DEBUG_COUNTER(mc_inline_miss_diff) // IMC miss, different methods RB_DEBUG_COUNTER(mc_cme_complement) // number of acquiring complement CME diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 9cade36fad..ac0f999b81 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1694,12 +1694,16 @@ rb_vm_search_method_slowpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klas // empty RB_DEBUG_COUNTER_INC(mc_inline_miss_empty); } - else if (old_cc == cd->cc) { + else if (old_cc == cc) { RB_DEBUG_COUNTER_INC(mc_inline_miss_same_cc); } else if (vm_cc_cme(old_cc) == vm_cc_cme(cc)) { RB_DEBUG_COUNTER_INC(mc_inline_miss_same_cme); } + else if (vm_cc_cme(old_cc) && vm_cc_cme(cc) && + vm_cc_cme(old_cc)->def == vm_cc_cme(cc)->def) { + RB_DEBUG_COUNTER_INC(mc_inline_miss_same_def); + } else { RB_DEBUG_COUNTER_INC(mc_inline_miss_diff); } |