summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Bernstein <rubybugs@bernsteinbear.com>2025-10-16 11:34:07 -0400
committerGitHub <noreply@github.com>2025-10-16 11:34:07 -0400
commitf925f1ae7b18c6314fe59d19cd56107de91c3b26 (patch)
treeb598d127b5cf52208f99e487b35c944fe2a02234
parent68f45a6da7bcea9126e04653a5ab47ddcb3b3126 (diff)
ZJIT: Inline BasicObject#initialize (#14856)
It just returns nil.
-rw-r--r--zjit/src/cruby_methods.rs8
-rw-r--r--zjit/src/hir.rs6
2 files changed, 10 insertions, 4 deletions
diff --git a/zjit/src/cruby_methods.rs b/zjit/src/cruby_methods.rs
index 11496f7b98..ea9f1beffc 100644
--- a/zjit/src/cruby_methods.rs
+++ b/zjit/src/cruby_methods.rs
@@ -205,7 +205,7 @@ pub fn init() -> Annotations {
annotate!(rb_mKernel, "nil?", types::FalseClass, no_gc, leaf, elidable);
annotate!(rb_cBasicObject, "==", types::BoolExact, no_gc, leaf, elidable);
annotate!(rb_cBasicObject, "!", types::BoolExact, no_gc, leaf, elidable);
- annotate!(rb_cBasicObject, "initialize", types::NilClass, no_gc, leaf, elidable);
+ annotate!(rb_cBasicObject, "initialize", inline_basic_object_initialize);
annotate!(rb_cInteger, "succ", inline_integer_succ);
annotate!(rb_cString, "to_s", inline_string_to_s);
let thread_singleton = unsafe { rb_singleton_class(rb_cThread) };
@@ -282,3 +282,9 @@ fn inline_integer_succ(fun: &mut hir::Function, block: hir::BlockId, recv: hir::
}
None
}
+
+fn inline_basic_object_initialize(fun: &mut hir::Function, block: hir::BlockId, _recv: hir::InsnId, args: &[hir::InsnId], _state: hir::InsnId) -> Option<hir::InsnId> {
+ if !args.is_empty() { return None; }
+ let result = fun.push_insn(block, hir::Insn::Const { val: hir::Const::Value(Qnil) });
+ Some(result)
+}
diff --git a/zjit/src/hir.rs b/zjit/src/hir.rs
index a87a416e9e..633e4d64f7 100644
--- a/zjit/src/hir.rs
+++ b/zjit/src/hir.rs
@@ -10626,7 +10626,7 @@ mod opt_tests {
v43:HeapObject[class_exact:C] = ObjectAllocClass C:VALUE(0x1008)
PatchPoint MethodRedefined(C@0x1008, initialize@0x1040, cme:0x1048)
PatchPoint NoSingletonClass(C@0x1008)
- v47:NilClass = CCall initialize@0x1070, v43
+ v47:NilClass = Const Value(nil)
CheckInterrupts
CheckInterrupts
Return v43
@@ -10694,7 +10694,7 @@ mod opt_tests {
v43:ObjectExact = ObjectAllocClass Object:VALUE(0x1008)
PatchPoint MethodRedefined(Object@0x1008, initialize@0x1040, cme:0x1048)
PatchPoint NoSingletonClass(Object@0x1008)
- v47:NilClass = CCall initialize@0x1070, v43
+ v47:NilClass = Const Value(nil)
CheckInterrupts
CheckInterrupts
Return v43
@@ -10725,7 +10725,7 @@ mod opt_tests {
v43:BasicObjectExact = ObjectAllocClass BasicObject:VALUE(0x1008)
PatchPoint MethodRedefined(BasicObject@0x1008, initialize@0x1040, cme:0x1048)
PatchPoint NoSingletonClass(BasicObject@0x1008)
- v47:NilClass = CCall initialize@0x1070, v43
+ v47:NilClass = Const Value(nil)
CheckInterrupts
CheckInterrupts
Return v43