aboutsummaryrefslogtreecommitdiffstats
path: root/mjit.c
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-05-26 22:49:55 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2020-05-26 23:01:52 -0700
commit61b14bb32b7e62760225cb2207df5fe87e5339ab (patch)
treebda683372013ccde012809504f02fe90bc42ff5f /mjit.c
parent4cabd77e337d2f439e4a437f41da9856903adb7e (diff)
downloadruby-61b14bb32b7e62760225cb2207df5fe87e5339ab.tar.gz
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.
Diffstat (limited to 'mjit.c')
-rw-r--r--mjit.c36
1 files changed, 34 insertions, 2 deletions
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.