From 61b14bb32b7e62760225cb2207df5fe87e5339ab Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Tue, 26 May 2020 22:49:55 -0700 Subject: Eliminate a call instruction on JIT cancel path by calling combined functions specialized for each cancel type. I'm hoping to improve locality of hot code, but this patch's impact should be insignificant. --- mjit.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'mjit.c') diff --git a/mjit.c b/mjit.c index 4b2e7c5fb8..f2443e027c 100644 --- a/mjit.c +++ b/mjit.c @@ -455,8 +455,8 @@ rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body) return &body->jit_unit->compile_info; } -void -rb_mjit_recompile_iseq(const rb_iseq_t *iseq) +static void +mjit_recompile(const rb_iseq_t *iseq) { if ((uintptr_t)iseq->body->jit_func <= (uintptr_t)LAST_JIT_ISEQ_FUNC) return; @@ -476,6 +476,38 @@ rb_mjit_recompile_iseq(const rb_iseq_t *iseq) } } +// Recompile iseq, disabling send optimization +void +rb_mjit_recompile_send(const rb_iseq_t *iseq) +{ + rb_mjit_iseq_compile_info(iseq->body)->disable_send_cache = true; + mjit_recompile(iseq); +} + +// Recompile iseq, disabling ivar optimization +void +rb_mjit_recompile_ivar(const rb_iseq_t *iseq) +{ + rb_mjit_iseq_compile_info(iseq->body)->disable_ivar_cache = true; + mjit_recompile(iseq); +} + +// Recompile iseq, disabling exivar optimization +void +rb_mjit_recompile_exivar(const rb_iseq_t *iseq) +{ + rb_mjit_iseq_compile_info(iseq->body)->disable_exivar_cache = true; + mjit_recompile(iseq); +} + +// Recompile iseq, disabling method inlining +void +rb_mjit_recompile_inlining(const rb_iseq_t *iseq) +{ + rb_mjit_iseq_compile_info(iseq->body)->disable_inlining = true; + mjit_recompile(iseq); +} + extern VALUE ruby_archlibdir_path, ruby_prefix_path; // Initialize header_file, pch_file, libruby_pathflag. Return true on success. -- cgit v1.2.3