Skip to content

Commit bf2617b

Browse files
committed
RJIT: Fix has_rest exit conditions
1 parent ee52255 commit bf2617b

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

lib/ruby_vm/rjit/insn_compiler.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4130,8 +4130,8 @@ def jit_call_iseq(jit, ctx, asm, cme, calling, iseq, frame_type: nil, prev_ep: n
41304130
return CantCompile
41314131
end
41324132

4133-
if iseq_has_rest && iseq.body.param.flags.has_kw
4134-
asm.incr_counter(:send_iseq_has_rest_and_kw)
4133+
if iseq_has_rest && iseq.body.param.flags.has_kw && supplying_kws
4134+
asm.incr_counter(:send_iseq_has_rest_and_kw_supplied)
41354135
return CantCompile
41364136
end
41374137

@@ -4286,6 +4286,11 @@ def jit_call_iseq(jit, ctx, asm, cme, calling, iseq, frame_type: nil, prev_ep: n
42864286
jit_call_opt_send_shift_stack(ctx, asm, argc, send_shift:)
42874287
end
42884288

4289+
if iseq_has_rest
4290+
asm.incr_counter(:send_iseq_has_rest)
4291+
return CantCompile
4292+
end
4293+
42894294
if doing_kw_call
42904295
asm.incr_counter(:send_iseq_kw_call)
42914296
return CantCompile
@@ -4301,11 +4306,6 @@ def jit_call_iseq(jit, ctx, asm, cme, calling, iseq, frame_type: nil, prev_ep: n
43014306
return CantCompile
43024307
end
43034308

4304-
if iseq_has_rest
4305-
asm.incr_counter(:send_iseq_has_rest)
4306-
return CantCompile
4307-
end
4308-
43094309
# Setup the new frame
43104310
frame_type ||= C::VM_FRAME_MAGIC_METHOD | C::VM_ENV_FLAG_LOCAL
43114311
jit_push_frame(

rjit_c.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ RJIT_RUNTIME_COUNTERS(
6060
send_iseq_has_kwrest,
6161
send_iseq_ruby2_keywords,
6262
send_iseq_has_rest_and_captured,
63-
send_iseq_has_rest_and_kw,
63+
send_iseq_has_rest_and_kw_supplied,
6464
send_iseq_has_no_kw,
6565
send_iseq_zsuper,
6666
send_iseq_materialized_block,

rjit_c.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1334,7 +1334,7 @@ def C.rb_rjit_runtime_counters
13341334
send_iseq_has_kwrest: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_kwrest)")],
13351335
send_iseq_ruby2_keywords: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_ruby2_keywords)")],
13361336
send_iseq_has_rest_and_captured: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest_and_captured)")],
1337-
send_iseq_has_rest_and_kw: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest_and_kw)")],
1337+
send_iseq_has_rest_and_kw_supplied: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest_and_kw_supplied)")],
13381338
send_iseq_has_no_kw: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_no_kw)")],
13391339
send_iseq_zsuper: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_zsuper)")],
13401340
send_iseq_materialized_block: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_materialized_block)")],

0 commit comments

Comments
 (0)