From bb4a2351cb86ae7e2603e1280e1eb756c89c7029 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Wed, 24 Jun 2020 22:58:22 -0700 Subject: [PATCH] Do not JIT inline builtin methods It's probably not worth it because there's nothing we can optimize in such builtin methods. It's worth JIT only when inlined. --- mjit.h | 1 + test/ruby/test_jit.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/mjit.h b/mjit.h index 177967a236..06eb300f6c 100644 --- a/mjit.h +++ b/mjit.h @@ -108,6 +108,7 @@ static inline int mjit_target_iseq_p(struct rb_iseq_constant_body *body) { return (body->type == ISEQ_TYPE_METHOD || body->type == ISEQ_TYPE_BLOCK) + && !body->builtin_inline_p && body->iseq_size < JIT_ISEQ_SIZE_THRESHOLD; } diff --git a/test/ruby/test_jit.rb b/test/ruby/test_jit.rb index 90d498c46f..c70a6b2650 100644 --- a/test/ruby/test_jit.rb +++ b/test/ruby/test_jit.rb @@ -1007,6 +1007,10 @@ class TestJIT < Test::Unit::TestCase end; end + def test_builtin_frame_omitted_inlining + assert_eval_with_jit('0.zero?; 0.zero?; 3.times { p 0.zero? }', stdout: "true\ntrue\ntrue\n", success_count: 1, min_calls: 2) + end + def test_program_counter_with_regexpmatch assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: "aa", success_count: 1) begin;