diff options
| author | Max Bernstein <rubybugs@bernsteinbear.com> | 2025-10-16 11:34:07 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-16 11:34:07 -0400 |
| commit | f925f1ae7b18c6314fe59d19cd56107de91c3b26 (patch) | |
| tree | b598d127b5cf52208f99e487b35c944fe2a02234 | |
| parent | 68f45a6da7bcea9126e04653a5ab47ddcb3b3126 (diff) | |
ZJIT: Inline BasicObject#initialize (#14856)
It just returns nil.
| -rw-r--r-- | zjit/src/cruby_methods.rs | 8 | ||||
| -rw-r--r-- | zjit/src/hir.rs | 6 |
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 |
