From da4b97a0e3914f0dbb9983229b266bb4761a28d3 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Wed, 11 Mar 2020 00:54:18 -0700 Subject: Pin and inline cme in JIT-ed method calls ``` $ benchmark-driver benchmark.yml -v --rbenv 'before --jit;after --jit' --repeat-count=12 --output=all before --jit: ruby 2.8.0dev (2020-03-11T07:43:12Z master e89ebdcb87) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-03-11T07:54:18Z master 143776a0da) +JIT [x86_64-linux] Calculating ------------------------------------- before --jit after --jit Optcarrot Lan_Master.nes 73.86976729561439 77.20184819316513 fps 74.46997176460742 78.43493030231805 77.59686308754307 78.55714131655935 78.53693921126656 79.08984255596820 80.10158944910573 79.17751731838183 80.12254974411167 79.60853122429181 80.28678655204945 79.74674066871896 80.38690681095379 79.90624544440300 80.79223498756919 80.57881084206193 80.82857188422419 80.70677614429169 81.06447745878245 81.03868541295149 81.21620802278490 82.16354660940607 ``` --- vm_callinfo.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'vm_callinfo.h') diff --git a/vm_callinfo.h b/vm_callinfo.h index 0f90d109b8..30c4f703ba 100644 --- a/vm_callinfo.h +++ b/vm_callinfo.h @@ -316,11 +316,12 @@ vm_cc_markable(const struct rb_callcache *cc) return FL_TEST_RAW(cc, VM_CALLCACHE_UNMARKABLE) == 0; } +// For MJIT. cc_cme is supposed to have inlined `vm_cc_cme(cc)`. static inline bool -vm_cc_valid_p(const struct rb_callcache *cc, VALUE klass) +vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass) { VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache)); - if (cc->klass == klass && !METHOD_ENTRY_INVALIDATED(vm_cc_cme(cc))) { + if (cc->klass == klass && !METHOD_ENTRY_INVALIDATED(cc_cme)) { return 1; } else { -- cgit v1.2.1