Skip to content

Commit 46525fa

Browse files
committed
ZJIT: Add return_type to inlined InvokeBuiltin
1 parent 3fb96ee commit 46525fa

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

zjit/src/hir.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,8 @@ enum IseqReturn {
13791379
Value(VALUE),
13801380
LocalVariable(u32),
13811381
Receiver,
1382-
InvokeLeafBuiltin(rb_builtin_function),
1382+
// Builtin descriptor and return type (if known)
1383+
InvokeLeafBuiltin(rb_builtin_function, Option<Type>),
13831384
}
13841385

13851386
unsafe extern "C" {
@@ -1441,7 +1442,11 @@ fn iseq_get_return_value(iseq: IseqPtr, captured_opnd: Option<InsnId>, ci_flags:
14411442
let builtin_attrs = unsafe { rb_jit_iseq_builtin_attrs(iseq) };
14421443
let leaf = builtin_attrs & BUILTIN_ATTR_LEAF != 0;
14431444
if !leaf { return None; }
1444-
Some(IseqReturn::InvokeLeafBuiltin(bf))
1445+
// Check if this builtin is annotated
1446+
let return_type = ZJITState::get_method_annotations()
1447+
.get_builtin_properties(&bf)
1448+
.map(|props| props.return_type);
1449+
Some(IseqReturn::InvokeLeafBuiltin(bf, return_type))
14451450
}
14461451
_ => None,
14471452
}
@@ -2468,14 +2473,14 @@ impl Function {
24682473
self.push_insn(block, Insn::IncrCounter(Counter::inline_iseq_optimized_send_count));
24692474
self.make_equal_to(insn_id, recv);
24702475
}
2471-
IseqReturn::InvokeLeafBuiltin(bf) => {
2476+
IseqReturn::InvokeLeafBuiltin(bf, return_type) => {
24722477
self.push_insn(block, Insn::IncrCounter(Counter::inline_iseq_optimized_send_count));
24732478
let replacement = self.push_insn(block, Insn::InvokeBuiltin {
24742479
bf,
24752480
args: vec![recv],
24762481
state,
24772482
leaf: true,
2478-
return_type: None,
2483+
return_type,
24792484
});
24802485
self.make_equal_to(insn_id, replacement);
24812486
}
@@ -11036,7 +11041,7 @@ mod opt_tests {
1103611041
PatchPoint MethodRedefined(Module@0x1010, class@0x1018, cme:0x1020)
1103711042
PatchPoint NoSingletonClass(Module@0x1010)
1103811043
IncrCounter inline_iseq_optimized_send_count
11039-
v26:BasicObject = InvokeBuiltin leaf _bi20, v21
11044+
v26:Class = InvokeBuiltin leaf _bi20, v21
1104011045
CheckInterrupts
1104111046
Return v26
1104211047
");

0 commit comments

Comments
 (0)