summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2020-06-24 22:58:22 -0700
committerTakashi Kokubun <[email protected]>2020-06-24 22:59:34 -0700
commitbb4a2351cb86ae7e2603e1280e1eb756c89c7029 (patch)
tree0bd7fa2ec56ef630497608ef4e93297f9ae786b6
parentab62aa7037f30dbab04a9455a328496287c968da (diff)
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.
-rw-r--r--mjit.h1
-rw-r--r--test/ruby/test_jit.rb4
2 files changed, 5 insertions, 0 deletions
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;