Skip to content

Commit 0ca542e

Browse files
committed
ZJIT: Print the Cptr, not a pointer to the pointer
Previously, we had none-sensical lines such as: ``` v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010) ``` Which was a contradiction as the pointer in the type specialization should match the pointer on the right hand side.
1 parent 970e993 commit 0ca542e

File tree

3 files changed

+49
-52
lines changed

3 files changed

+49
-52
lines changed

zjit/src/hir.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,8 @@ impl<'a> std::fmt::Display for ConstPrinter<'a> {
393393
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
394394
match self.inner {
395395
Const::Value(val) => write!(f, "Value({})", val.print(self.ptr_map)),
396-
// TODO: Break out CPtr as a special case. For some reason,
397-
// when we do that now, {:p} prints a completely different
398-
// number than {:?} does and we don't know why.
399-
// We'll have to resolve that first.
400-
Const::CPtr(val) => write!(f, "CPtr({:?})", self.ptr_map.map_ptr(val)),
396+
// Since `&` coerces to a raw pointer, be careful to get `val` and not `&val` here.
397+
&Const::CPtr(val) => write!(f, "CPtr({:p})", self.ptr_map.map_ptr(val)),
401398
&Const::CShape(shape_id) => write!(f, "CShape({:p})", self.ptr_map.map_shape(shape_id)),
402399
&Const::CUInt64(int) => {
403400
// Print in hex if signed bit is set

zjit/src/hir/opt_tests.rs

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7714,29 +7714,29 @@ mod hir_opt_tests {
77147714
v11:HeapBasicObject = GuardType v6, HeapBasicObject
77157715
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
77167716
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7717-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7717+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
77187718
v16 = RefineType v15, CUInt64
77197719
v17:CInt64 = IntAnd v12, v14
77207720
v18:CBool = IsBitEqual v17, v16
77217721
IfTrue v18, bb5()
77227722
v23:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7723-
v24:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7723+
v24:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
77247724
v25 = RefineType v24, CUInt64
77257725
v26:CInt64 = IntAnd v12, v23
77267726
v27:CBool = IsBitEqual v26, v25
77277727
IfTrue v27, bb6()
77287728
v31:BasicObject = GetIvar v11, :@foo
77297729
Jump bb4(v31)
77307730
bb5():
7731-
v20:CPtr = LoadField v11, :_as_heap@0x1018
7732-
v21:BasicObject = LoadField v20, :@foo@0x1019
7731+
v20:CPtr = LoadField v11, :_as_heap@0x1003
7732+
v21:BasicObject = LoadField v20, :@foo@0x1004
77337733
Jump bb4(v21)
77347734
bb6():
7735-
v29:BasicObject = LoadField v11, :@foo@0x1018
7735+
v29:BasicObject = LoadField v11, :@foo@0x1003
77367736
Jump bb4(v29)
77377737
bb4(v13:BasicObject):
77387738
v34:Fixnum[1] = Const Value(1)
7739-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7739+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
77407740
v45:Fixnum = GuardType v13, Fixnum
77417741
v46:Fixnum = FixnumAdd v45, v34
77427742
CheckInterrupts
@@ -7790,31 +7790,31 @@ mod hir_opt_tests {
77907790
v11:HeapBasicObject = GuardType v6, HeapBasicObject
77917791
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
77927792
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7793-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7793+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
77947794
v16 = RefineType v15, CUInt64
77957795
v17:CInt64 = IntAnd v12, v14
77967796
v18:CBool = IsBitEqual v17, v16
77977797
IfTrue v18, bb5()
77987798
v22:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7799-
v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7799+
v23:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
78007800
v24 = RefineType v23, CUInt64
78017801
v25:CInt64 = IntAnd v12, v22
78027802
v26:CBool = IsBitEqual v25, v24
78037803
IfTrue v26, bb6()
7804-
v44:CShape = LoadField v11, :_shape_id@0x1018
7805-
v45:CShape[0x1019] = GuardBitEquals v44, CShape(0x1019)
7806-
v46:BasicObject = LoadField v11, :@foo@0x101a
7804+
v44:CShape = LoadField v11, :_shape_id@0x1003
7805+
v45:CShape[0x1004] = GuardBitEquals v44, CShape(0x1004)
7806+
v46:BasicObject = LoadField v11, :@foo@0x1005
78077807
Jump bb4(v46)
78087808
bb5():
7809-
v20:BasicObject = LoadField v11, :@foo@0x101a
7809+
v20:BasicObject = LoadField v11, :@foo@0x1005
78107810
Jump bb4(v20)
78117811
bb6():
7812-
v28:CPtr = LoadField v11, :_as_heap@0x101a
7813-
v29:BasicObject = LoadField v28, :@foo@0x101b
7812+
v28:CPtr = LoadField v11, :_as_heap@0x1005
7813+
v29:BasicObject = LoadField v28, :@foo@0x1006
78147814
Jump bb4(v29)
78157815
bb4(v13:BasicObject):
78167816
v34:Fixnum[1] = Const Value(1)
7817-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7817+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
78187818
v49:Fixnum = GuardType v13, Fixnum
78197819
v50:Fixnum = FixnumAdd v49, v34
78207820
CheckInterrupts
@@ -7861,28 +7861,28 @@ mod hir_opt_tests {
78617861
v11:HeapBasicObject = GuardType v6, HeapBasicObject
78627862
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
78637863
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7864-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7864+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
78657865
v16 = RefineType v15, CUInt64
78667866
v17:CInt64 = IntAnd v12, v14
78677867
v18:CBool = IsBitEqual v17, v16
78687868
IfTrue v18, bb5()
78697869
v22:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7870-
v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7870+
v23:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
78717871
v24 = RefineType v23, CUInt64
78727872
v25:CInt64 = IntAnd v12, v22
78737873
v26:CBool = IsBitEqual v25, v24
78747874
IfTrue v26, bb6()
78757875
v30:BasicObject = GetIvar v11, :@foo
78767876
Jump bb4(v30)
78777877
bb5():
7878-
v20:BasicObject = LoadField v11, :@foo@0x1018
7878+
v20:BasicObject = LoadField v11, :@foo@0x1003
78797879
Jump bb4(v20)
78807880
bb6():
7881-
v28:BasicObject = LoadField v11, :@foo@0x1018
7881+
v28:BasicObject = LoadField v11, :@foo@0x1003
78827882
Jump bb4(v28)
78837883
bb4(v13:BasicObject):
78847884
v33:Fixnum[1] = Const Value(1)
7885-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7885+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
78867886
v44:Fixnum = GuardType v13, Fixnum
78877887
v45:Fixnum = FixnumAdd v44, v33
78887888
CheckInterrupts
@@ -14321,7 +14321,7 @@ mod hir_opt_tests {
1432114321
v3:BasicObject = LoadField v2, :needle@0x1000
1432214322
v4:BasicObject = LoadField v2, :offset@0x1001
1432314323
v5:CPtr = LoadPC
14324-
v6:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14324+
v6:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
1432514325
v7:CBool = IsBitEqual v5, v6
1432614326
IfTrue v7, bb3(v1, v3, v4)
1432714327
Jump bb5(v1, v3, v4)
@@ -14341,13 +14341,13 @@ mod hir_opt_tests {
1434114341
v18:BasicObject = LoadArg :offset@2
1434214342
Jump bb5(v16, v17, v18)
1434314343
bb5(v28:BasicObject, v29:BasicObject, v30:BasicObject):
14344-
PatchPoint MethodRedefined(String@0x1018, byteindex@0x1020, cme:0x1028)
14344+
PatchPoint MethodRedefined(String@0x1008, byteindex@0x1010, cme:0x1018)
1434514345
v44:CPtr = GetEP 0
14346-
v45:RubyValue = LoadField v44, :_ep_method_entry@0x1050
14347-
v46:CallableMethodEntry[VALUE(0x1058)] = GuardBitEquals v45, Value(VALUE(0x1058))
14348-
v47:RubyValue = LoadField v44, :_ep_specval@0x1060
14346+
v45:RubyValue = LoadField v44, :_ep_method_entry@0x1040
14347+
v46:CallableMethodEntry[VALUE(0x1048)] = GuardBitEquals v45, Value(VALUE(0x1048))
14348+
v47:RubyValue = LoadField v44, :_ep_specval@0x1050
1434914349
v48:FalseClass = GuardBitEquals v47, Value(false)
14350-
v49:BasicObject = CCallVariadic v28, :String#byteindex@0x1068, v29, v30
14350+
v49:BasicObject = CCallVariadic v28, :String#byteindex@0x1058, v29, v30
1435114351
CheckInterrupts
1435214352
Return v49
1435314353
");
@@ -14479,7 +14479,7 @@ mod hir_opt_tests {
1447914479
v2:CPtr = LoadSP
1448014480
v3:BasicObject = LoadField v2, :content@0x1000
1448114481
v4:CPtr = LoadPC
14482-
v5:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14482+
v5:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
1448314483
v6:CBool = IsBitEqual v4, v5
1448414484
IfTrue v6, bb3(v1, v3)
1448514485
Jump bb5(v1, v3)
@@ -14489,7 +14489,7 @@ mod hir_opt_tests {
1448914489
v11:NilClass = Const Value(nil)
1449014490
Jump bb3(v10, v11)
1449114491
bb3(v17:BasicObject, v18:BasicObject):
14492-
v21:StringExact[VALUE(0x1018)] = Const Value(VALUE(0x1018))
14492+
v21:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
1449314493
v22:StringExact = StringCopy v21
1449414494
Jump bb5(v17, v22)
1449514495
bb4():
@@ -14498,7 +14498,7 @@ mod hir_opt_tests {
1449814498
v15:BasicObject = LoadArg :content@1
1449914499
Jump bb5(v14, v15)
1450014500
bb5(v25:BasicObject, v26:BasicObject):
14501-
v32:BasicObject = InvokeSuper v25, 0x1020, v26 # SendFallbackReason: super: complex argument passing to `super` call
14501+
v32:BasicObject = InvokeSuper v25, 0x1010, v26 # SendFallbackReason: super: complex argument passing to `super` call
1450214502
CheckInterrupts
1450314503
Return v32
1450414504
");
@@ -14947,10 +14947,10 @@ mod hir_opt_tests {
1494714947
v5:BasicObject = LoadField v2, :iter_method@0x1002
1494814948
v6:NilClass = Const Value(nil)
1494914949
v7:CPtr = LoadPC
14950-
v8:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14950+
v8:CPtr[CPtr(0x1003)] = Const CPtr(0x1003)
1495114951
v9:CBool = IsBitEqual v7, v8
1495214952
IfTrue v9, bb3(v1, v3, v4, v5, v6)
14953-
v11:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14953+
v11:CPtr[CPtr(0x1004)] = Const CPtr(0x1004)
1495414954
v12:CBool = IsBitEqual v7, v11
1495514955
IfTrue v12, bb5(v1, v3, v4, v5, v6)
1495614956
Jump bb7(v1, v3, v4, v5, v6)
@@ -14975,7 +14975,7 @@ mod hir_opt_tests {
1497514975
v27:NilClass = Const Value(nil)
1497614976
Jump bb5(v23, v24, v25, v26, v27)
1497714977
bb5(v47:BasicObject, v48:BasicObject, v49:BasicObject, v50:BasicObject, v51:NilClass):
14978-
v54:StaticSymbol[:each] = Const Value(VALUE(0x1018))
14978+
v54:StaticSymbol[:each] = Const Value(VALUE(0x1008))
1497914979
SetLocal :iter_method, l0, EP@4, v54
1498014980
Jump bb7(v47, v48, v49, v54, v51)
1498114981
bb6():
@@ -14992,30 +14992,30 @@ mod hir_opt_tests {
1499214992
v69:Truthy = RefineType v60, Truthy
1499314993
IfTrue v68, bb8(v58, v59, v69, v61, v62)
1499414994
v71:Falsy = RefineType v60, Falsy
14995-
PatchPoint MethodRedefined(Object@0x1020, lambda@0x1028, cme:0x1030)
14996-
v118:ObjectSubclass[class_exact*:Object@VALUE(0x1020)] = GuardType v58, ObjectSubclass[class_exact*:Object@VALUE(0x1020)]
14997-
v119:BasicObject = CCallWithFrame v118, :Kernel#lambda@0x1058, block=0x1060
14995+
PatchPoint MethodRedefined(Object@0x1010, lambda@0x1018, cme:0x1020)
14996+
v118:ObjectSubclass[class_exact*:Object@VALUE(0x1010)] = GuardType v58, ObjectSubclass[class_exact*:Object@VALUE(0x1010)]
14997+
v119:BasicObject = CCallWithFrame v118, :Kernel#lambda@0x1048, block=0x1050
1499814998
v75:CPtr = GetEP 0
1499914999
v76:BasicObject = LoadField v75, :list@0x1001
15000-
v78:BasicObject = LoadField v75, :iter_method@0x1068
15001-
v79:BasicObject = LoadField v75, :kwsplat@0x1069
15000+
v78:BasicObject = LoadField v75, :iter_method@0x1058
15001+
v79:BasicObject = LoadField v75, :kwsplat@0x1059
1500215002
SetLocal :sep, l0, EP@5, v119
1500315003
Jump bb8(v58, v76, v119, v78, v79)
1500415004
bb8(v83:BasicObject, v84:BasicObject, v85:BasicObject, v86:BasicObject, v87:BasicObject):
1500515005
PatchPoint SingleRactorMode
15006-
PatchPoint StableConstantNames(0x1070, CONST)
15007-
v115:HashExact[VALUE(0x1078)] = Const Value(VALUE(0x1078))
15006+
PatchPoint StableConstantNames(0x1060, CONST)
15007+
v115:HashExact[VALUE(0x1068)] = Const Value(VALUE(0x1068))
1500815008
SetLocal :kwsplat, l0, EP@3, v115
1500915009
v96:CPtr = GetEP 0
1501015010
v97:BasicObject = LoadField v96, :list@0x1001
1501115011
v99:CPtr = GetEP 0
15012-
v100:BasicObject = LoadField v99, :iter_method@0x1068
15013-
v102:BasicObject = Send v97, 0x1080, :__send__, v100 # SendFallbackReason: Send: unsupported method type Optimized
15012+
v100:BasicObject = LoadField v99, :iter_method@0x1058
15013+
v102:BasicObject = Send v97, 0x1070, :__send__, v100 # SendFallbackReason: Send: unsupported method type Optimized
1501415014
v103:CPtr = GetEP 0
1501515015
v104:BasicObject = LoadField v103, :list@0x1001
1501615016
v105:BasicObject = LoadField v103, :sep@0x1002
15017-
v106:BasicObject = LoadField v103, :iter_method@0x1068
15018-
v107:BasicObject = LoadField v103, :kwsplat@0x1069
15017+
v106:BasicObject = LoadField v103, :iter_method@0x1058
15018+
v107:BasicObject = LoadField v103, :kwsplat@0x1059
1501915019
CheckInterrupts
1502015020
Return v102
1502115021
");

zjit/src/hir/tests.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ pub(crate) mod hir_build_tests {
294294
v2:CPtr = LoadSP
295295
v3:BasicObject = LoadField v2, :x@0x1000
296296
v4:CPtr = LoadPC
297-
v5:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
297+
v5:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
298298
v6:CBool = IsBitEqual v4, v5
299299
IfTrue v6, bb3(v1, v3)
300300
Jump bb5(v1, v3)
@@ -1159,7 +1159,7 @@ pub(crate) mod hir_build_tests {
11591159
v3:BasicObject = LoadField v2, :a@0x1000
11601160
v4:NilClass = Const Value(nil)
11611161
v5:CPtr = LoadPC
1162-
v6:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
1162+
v6:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
11631163
v7:CBool = IsBitEqual v5, v6
11641164
IfTrue v7, bb3(v1, v3, v4)
11651165
Jump bb5(v1, v3, v4)
@@ -1201,7 +1201,7 @@ pub(crate) mod hir_build_tests {
12011201
v3:BasicObject = LoadField v2, :a@0x1000
12021202
v4:NilClass = Const Value(nil)
12031203
v5:CPtr = LoadPC
1204-
v6:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
1204+
v6:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
12051205
v7:CBool = IsBitEqual v5, v6
12061206
IfTrue v7, bb3(v1, v3, v4)
12071207
Jump bb5(v1, v3, v4)
@@ -1239,7 +1239,7 @@ pub(crate) mod hir_build_tests {
12391239
v2:CPtr = LoadSP
12401240
v3:BasicObject = LoadField v2, :a@0x1000
12411241
v4:CPtr = LoadPC
1242-
v5:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
1242+
v5:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
12431243
v6:CBool = IsBitEqual v4, v5
12441244
IfTrue v6, bb3(v1, v3)
12451245
Jump bb5(v1, v3)

0 commit comments

Comments
 (0)