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_compile.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'mjit_compile.c') diff --git a/mjit_compile.c b/mjit_compile.c index 6a17d2408c..fe5c2413e4 100644 --- a/mjit_compile.c +++ b/mjit_compile.c @@ -241,8 +241,7 @@ compile_inlined_cancel_handler(FILE *f, const struct rb_iseq_constant_body *body { fprintf(f, "\ncancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_inlining = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_inlining(original_iseq);\n"); // Swap pc/sp set on cancel with original pc/sp. fprintf(f, " const VALUE *current_pc = reg_cfp->pc;\n"); @@ -282,20 +281,17 @@ compile_cancel_handler(FILE *f, const struct rb_iseq_constant_body *body, struct fprintf(f, "\nsend_cancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_send_inline);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_send_cache = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_send(original_iseq);\n"); fprintf(f, " goto cancel;\n"); fprintf(f, "\nivar_cancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_ivar_inline);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_ivar_cache = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_ivar(original_iseq);\n"); fprintf(f, " goto cancel;\n"); fprintf(f, "\nexivar_cancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_exivar_inline);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_exivar_cache = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_exivar(original_iseq);\n"); fprintf(f, " goto cancel;\n"); fprintf(f, "\ncancel:\n"); -- cgit v1.2.3