Skip to content

Commit 82f2da0

Browse files
committed
Add test
1 parent f116705 commit 82f2da0

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

‎zjit/src/hir/tests.rs‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6808,6 +6808,74 @@ pub(crate) mod hir_build_tests {
68086808
Return v39
68096809
");
68106810
}
6811+
6812+
#[test]
6813+
fn test_global_load_elimination() {
6814+
set_call_threshold(3);
6815+
eval(r#"
6816+
class TestObj
6817+
def initialize(value)
6818+
@value = value
6819+
end
6820+
6821+
def read(val)
6822+
even = val.even?
6823+
a = @value
6824+
even ? a : @value + 1
6825+
end
6826+
end
6827+
6828+
obj = TestObj.new(5)
6829+
obj.read(1)
6830+
obj.read(2)
6831+
"#);
6832+
6833+
assert_snapshot!(
6834+
hir_string_proc("TestObj.instance_method(:read)"),
6835+
@"
6836+
fn read@<compiled>:8:
6837+
bb1():
6838+
EntryPoint interpreter
6839+
v1:BasicObject = LoadSelf
6840+
v2:CPtr = LoadSP
6841+
v3:BasicObject = LoadField v2, :val@0x1000
6842+
v4:NilClass = Const Value(nil)
6843+
v5:NilClass = Const Value(nil)
6844+
Jump bb3(v1, v3, v4, v5)
6845+
bb2():
6846+
EntryPoint JIT(0)
6847+
v8:BasicObject = LoadArg :self@0
6848+
v9:BasicObject = LoadArg :val@1
6849+
v10:NilClass = Const Value(nil)
6850+
v11:NilClass = Const Value(nil)
6851+
Jump bb3(v8, v9, v10, v11)
6852+
bb3(v13:BasicObject, v14:BasicObject, v15:NilClass, v16:NilClass):
6853+
v21:BasicObject = Send v14, :even? # SendFallbackReason: Uncategorized(opt_send_without_block)
6854+
PatchPoint NoEPEscape(read)
6855+
v27:HeapBasicObject = GuardType v13, HeapBasicObject
6856+
v28:CShape = LoadField v27, :shape_id@0x1001
6857+
v29:CShape[0x1002] = GuardBitEquals v28, CShape(0x1002) recompile
6858+
v30:BasicObject = LoadField v27, :@value@0x1003
6859+
PatchPoint NoEPEscape(read)
6860+
v37:CBool = Test v21
6861+
v38:Falsy = RefineType v21, Falsy
6862+
CondBranch v37, bb5(), bb4(v13, v14, v38, v30)
6863+
bb5():
6864+
v40:Truthy = RefineType v21, Truthy
6865+
CheckInterrupts
6866+
Return v30
6867+
bb4(v46:BasicObject, v47:BasicObject, v48:Falsy, v49:BasicObject):
6868+
v52:HeapBasicObject = GuardType v46, HeapBasicObject
6869+
v53:CShape = LoadField v52, :shape_id@0x1001
6870+
v54:CShape[0x1002] = GuardBitEquals v53, CShape(0x1002) recompile
6871+
v55:BasicObject = LoadField v52, :@value@0x1003
6872+
v57:Fixnum[1] = Const Value(1)
6873+
v60:BasicObject = Send v55, :+, v57 # SendFallbackReason: Uncategorized(opt_plus)
6874+
CheckInterrupts
6875+
Return v60
6876+
"
6877+
);
6878+
}
68116879
}
68126880

68136881
/// Test successor and predecessor set computations.

0 commit comments

Comments
 (0)