aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authork0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-07 14:41:03 +0000
committerk0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-07 14:41:03 +0000
commit8bec3e1fe257fa75403be737ca86fba0e5606bf8 (patch)
tree4be4254be800de689a6c53f6856ca5c29b2d016b
parentc2df63d08a4821213ff12d999260ab36845ef4f5 (diff)
downloadruby-8bec3e1fe257fa75403be737ca86fba0e5606bf8.tar.gz
insns.def: stop pushing unnecessary keys for MJIT
[Bug #14892] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63875 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--insns.def4
-rw-r--r--test/ruby/test_jit.rb20
2 files changed, 22 insertions, 2 deletions
diff --git a/insns.def b/insns.def
index f6084429f1..eb3b3410f6 100644
--- a/insns.def
+++ b/insns.def
@@ -1260,7 +1260,9 @@ opt_aset_with
}
else {
PUSH(recv);
+#ifndef MJIT_HEADER
PUSH(rb_str_resurrect(key));
+#endif
PUSH(val);
#ifndef MJIT_HEADER
ADD_PC(-WIDTH_OF_opt_send_without_block);
@@ -1280,8 +1282,8 @@ opt_aref_with
if (val == Qundef) {
PUSH(recv);
- PUSH(rb_str_resurrect(key));
#ifndef MJIT_HEADER
+ PUSH(rb_str_resurrect(key));
ADD_PC(-WIDTH_OF_opt_send_without_block);
#endif
DISPATCH_ORIGINAL_INSN(opt_send_without_block);
diff --git a/test/ruby/test_jit.rb b/test/ruby/test_jit.rb
index 625af12f77..359afe48b4 100644
--- a/test/ruby/test_jit.rb
+++ b/test/ruby/test_jit.rb
@@ -685,7 +685,7 @@ class TestJIT < Test::Unit::TestCase
end;
end
- def test_stack_pointer_with_regexpmatch
+ def test_program_pointer_with_regexpmatch
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: "aa", success_count: 1)
begin;
2.times do
@@ -695,6 +695,24 @@ class TestJIT < Test::Unit::TestCase
end;
end
+ def test_pushed_values_with_opt_aset_with
+ assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: "{}{}", success_count: 1)
+ begin;
+ 2.times do
+ print(Thread.current["a"] = {})
+ end
+ end;
+ end
+
+ def test_pushed_values_with_opt_aref_with
+ assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: "nil\nnil\n", success_count: 1)
+ begin;
+ 2.times do
+ p(Thread.current["a"])
+ end
+ end;
+ end
+
private
# The shortest way to test one proc