summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/ruby/test_yjit.rb10
-rw-r--r--yjit_codegen.c7
2 files changed, 17 insertions, 0 deletions
diff --git a/test/ruby/test_yjit.rb b/test/ruby/test_yjit.rb
index e485e5f64f..95e768ee0c 100644
--- a/test/ruby/test_yjit.rb
+++ b/test/ruby/test_yjit.rb
@@ -110,6 +110,16 @@ class TestYJIT < Test::Unit::TestCase
RUBY
end
+ def test_opt_regexpmatch2
+ assert_compiles(<<~RUBY, insns: %i[opt_regexpmatch2], result: 0)
+ def foo(str)
+ str =~ /foo/
+ end
+
+ foo("foobar")
+ RUBY
+ end
+
def test_compile_opt_getinlinecache
assert_compiles(<<~RUBY, insns: %i[opt_getinlinecache], result: 123, min_calls: 2)
def get_foo
diff --git a/yjit_codegen.c b/yjit_codegen.c
index b4733ef1ee..40feda345f 100644
--- a/yjit_codegen.c
+++ b/yjit_codegen.c
@@ -2240,6 +2240,12 @@ gen_opt_length(jitstate_t *jit, ctx_t *ctx)
return gen_opt_send_without_block(jit, ctx);
}
+static codegen_status_t
+gen_opt_regexpmatch2(jitstate_t *jit, ctx_t *ctx)
+{
+ return gen_opt_send_without_block(jit, ctx);
+}
+
void
gen_branchif_branch(codeblock_t* cb, uint8_t* target0, uint8_t* target1, uint8_t shape)
{
@@ -3718,6 +3724,7 @@ yjit_init_codegen(void)
yjit_reg_op(BIN(opt_not), gen_opt_not);
yjit_reg_op(BIN(opt_size), gen_opt_size);
yjit_reg_op(BIN(opt_length), gen_opt_length);
+ yjit_reg_op(BIN(opt_regexpmatch2), gen_opt_regexpmatch2);
yjit_reg_op(BIN(opt_getinlinecache), gen_opt_getinlinecache);
yjit_reg_op(BIN(opt_invokebuiltin_delegate), gen_opt_invokebuiltin_delegate);
yjit_reg_op(BIN(opt_invokebuiltin_delegate_leave), gen_opt_invokebuiltin_delegate);