Skip to content

Commit 37c811b

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 fe478bd commit 37c811b

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
@@ -7663,29 +7663,29 @@ mod hir_opt_tests {
76637663
v11:HeapBasicObject = GuardType v6, HeapBasicObject
76647664
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
76657665
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7666-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7666+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
76677667
v16 = RefineType v15, CUInt64
76687668
v17:CInt64 = IntAnd v12, v14
76697669
v18:CBool = IsBitEqual v17, v16
76707670
IfTrue v18, bb5()
76717671
v23:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7672-
v24:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7672+
v24:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
76737673
v25 = RefineType v24, CUInt64
76747674
v26:CInt64 = IntAnd v12, v23
76757675
v27:CBool = IsBitEqual v26, v25
76767676
IfTrue v27, bb6()
76777677
v31:BasicObject = GetIvar v11, :@foo
76787678
Jump bb4(v31)
76797679
bb5():
7680-
v20:CPtr = LoadField v11, :_as_heap@0x1018
7681-
v21:BasicObject = LoadField v20, :@foo@0x1019
7680+
v20:CPtr = LoadField v11, :_as_heap@0x1003
7681+
v21:BasicObject = LoadField v20, :@foo@0x1004
76827682
Jump bb4(v21)
76837683
bb6():
7684-
v29:BasicObject = LoadField v11, :@foo@0x1018
7684+
v29:BasicObject = LoadField v11, :@foo@0x1003
76857685
Jump bb4(v29)
76867686
bb4(v13:BasicObject):
76877687
v34:Fixnum[1] = Const Value(1)
7688-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7688+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
76897689
v45:Fixnum = GuardType v13, Fixnum
76907690
v46:Fixnum = FixnumAdd v45, v34
76917691
CheckInterrupts
@@ -7739,31 +7739,31 @@ mod hir_opt_tests {
77397739
v11:HeapBasicObject = GuardType v6, HeapBasicObject
77407740
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
77417741
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7742-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7742+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
77437743
v16 = RefineType v15, CUInt64
77447744
v17:CInt64 = IntAnd v12, v14
77457745
v18:CBool = IsBitEqual v17, v16
77467746
IfTrue v18, bb5()
77477747
v22:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7748-
v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7748+
v23:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
77497749
v24 = RefineType v23, CUInt64
77507750
v25:CInt64 = IntAnd v12, v22
77517751
v26:CBool = IsBitEqual v25, v24
77527752
IfTrue v26, bb6()
7753-
v44:CShape = LoadField v11, :_shape_id@0x1018
7754-
v45:CShape[0x1019] = GuardBitEquals v44, CShape(0x1019)
7755-
v46:BasicObject = LoadField v11, :@foo@0x101a
7753+
v44:CShape = LoadField v11, :_shape_id@0x1003
7754+
v45:CShape[0x1004] = GuardBitEquals v44, CShape(0x1004)
7755+
v46:BasicObject = LoadField v11, :@foo@0x1005
77567756
Jump bb4(v46)
77577757
bb5():
7758-
v20:BasicObject = LoadField v11, :@foo@0x101a
7758+
v20:BasicObject = LoadField v11, :@foo@0x1005
77597759
Jump bb4(v20)
77607760
bb6():
7761-
v28:CPtr = LoadField v11, :_as_heap@0x101a
7762-
v29:BasicObject = LoadField v28, :@foo@0x101b
7761+
v28:CPtr = LoadField v11, :_as_heap@0x1005
7762+
v29:BasicObject = LoadField v28, :@foo@0x1006
77637763
Jump bb4(v29)
77647764
bb4(v13:BasicObject):
77657765
v34:Fixnum[1] = Const Value(1)
7766-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7766+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
77677767
v49:Fixnum = GuardType v13, Fixnum
77687768
v50:Fixnum = FixnumAdd v49, v34
77697769
CheckInterrupts
@@ -7810,28 +7810,28 @@ mod hir_opt_tests {
78107810
v11:HeapBasicObject = GuardType v6, HeapBasicObject
78117811
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
78127812
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7813-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7813+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
78147814
v16 = RefineType v15, CUInt64
78157815
v17:CInt64 = IntAnd v12, v14
78167816
v18:CBool = IsBitEqual v17, v16
78177817
IfTrue v18, bb5()
78187818
v22:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7819-
v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7819+
v23:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
78207820
v24 = RefineType v23, CUInt64
78217821
v25:CInt64 = IntAnd v12, v22
78227822
v26:CBool = IsBitEqual v25, v24
78237823
IfTrue v26, bb6()
78247824
v30:BasicObject = GetIvar v11, :@foo
78257825
Jump bb4(v30)
78267826
bb5():
7827-
v20:BasicObject = LoadField v11, :@foo@0x1018
7827+
v20:BasicObject = LoadField v11, :@foo@0x1003
78287828
Jump bb4(v20)
78297829
bb6():
7830-
v28:BasicObject = LoadField v11, :@foo@0x1018
7830+
v28:BasicObject = LoadField v11, :@foo@0x1003
78317831
Jump bb4(v28)
78327832
bb4(v13:BasicObject):
78337833
v33:Fixnum[1] = Const Value(1)
7834-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7834+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
78357835
v44:Fixnum = GuardType v13, Fixnum
78367836
v45:Fixnum = FixnumAdd v44, v33
78377837
CheckInterrupts
@@ -14208,7 +14208,7 @@ mod hir_opt_tests {
1420814208
v3:BasicObject = LoadField v2, :needle@0x1000
1420914209
v4:BasicObject = LoadField v2, :offset@0x1001
1421014210
v5:CPtr = LoadPC
14211-
v6:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14211+
v6:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
1421214212
v7:CBool = IsBitEqual v5, v6
1421314213
IfTrue v7, bb3(v1, v3, v4)
1421414214
Jump bb5(v1, v3, v4)
@@ -14228,13 +14228,13 @@ mod hir_opt_tests {
1422814228
v18:BasicObject = LoadArg :offset@2
1422914229
Jump bb5(v16, v17, v18)
1423014230
bb5(v28:BasicObject, v29:BasicObject, v30:BasicObject):
14231-
PatchPoint MethodRedefined(String@0x1018, byteindex@0x1020, cme:0x1028)
14231+
PatchPoint MethodRedefined(String@0x1008, byteindex@0x1010, cme:0x1018)
1423214232
v44:CPtr = GetEP 0
14233-
v45:RubyValue = LoadField v44, :_ep_method_entry@0x1050
14234-
v46:CallableMethodEntry[VALUE(0x1058)] = GuardBitEquals v45, Value(VALUE(0x1058))
14235-
v47:RubyValue = LoadField v44, :_ep_specval@0x1060
14233+
v45:RubyValue = LoadField v44, :_ep_method_entry@0x1040
14234+
v46:CallableMethodEntry[VALUE(0x1048)] = GuardBitEquals v45, Value(VALUE(0x1048))
14235+
v47:RubyValue = LoadField v44, :_ep_specval@0x1050
1423614236
v48:FalseClass = GuardBitEquals v47, Value(false)
14237-
v49:BasicObject = CCallVariadic v28, :String#byteindex@0x1068, v29, v30
14237+
v49:BasicObject = CCallVariadic v28, :String#byteindex@0x1058, v29, v30
1423814238
CheckInterrupts
1423914239
Return v49
1424014240
");
@@ -14366,7 +14366,7 @@ mod hir_opt_tests {
1436614366
v2:CPtr = LoadSP
1436714367
v3:BasicObject = LoadField v2, :content@0x1000
1436814368
v4:CPtr = LoadPC
14369-
v5:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14369+
v5:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
1437014370
v6:CBool = IsBitEqual v4, v5
1437114371
IfTrue v6, bb3(v1, v3)
1437214372
Jump bb5(v1, v3)
@@ -14376,7 +14376,7 @@ mod hir_opt_tests {
1437614376
v11:NilClass = Const Value(nil)
1437714377
Jump bb3(v10, v11)
1437814378
bb3(v17:BasicObject, v18:BasicObject):
14379-
v21:StringExact[VALUE(0x1018)] = Const Value(VALUE(0x1018))
14379+
v21:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
1438014380
v22:StringExact = StringCopy v21
1438114381
Jump bb5(v17, v22)
1438214382
bb4():
@@ -14385,7 +14385,7 @@ mod hir_opt_tests {
1438514385
v15:BasicObject = LoadArg :content@1
1438614386
Jump bb5(v14, v15)
1438714387
bb5(v25:BasicObject, v26:BasicObject):
14388-
v32:BasicObject = InvokeSuper v25, 0x1020, v26 # SendFallbackReason: super: complex argument passing to `super` call
14388+
v32:BasicObject = InvokeSuper v25, 0x1010, v26 # SendFallbackReason: super: complex argument passing to `super` call
1438914389
CheckInterrupts
1439014390
Return v32
1439114391
");
@@ -14834,10 +14834,10 @@ mod hir_opt_tests {
1483414834
v5:BasicObject = LoadField v2, :iter_method@0x1002
1483514835
v6:NilClass = Const Value(nil)
1483614836
v7:CPtr = LoadPC
14837-
v8:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14837+
v8:CPtr[CPtr(0x1003)] = Const CPtr(0x1003)
1483814838
v9:CBool = IsBitEqual v7, v8
1483914839
IfTrue v9, bb3(v1, v3, v4, v5, v6)
14840-
v11:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14840+
v11:CPtr[CPtr(0x1004)] = Const CPtr(0x1004)
1484114841
v12:CBool = IsBitEqual v7, v11
1484214842
IfTrue v12, bb5(v1, v3, v4, v5, v6)
1484314843
Jump bb7(v1, v3, v4, v5, v6)
@@ -14862,7 +14862,7 @@ mod hir_opt_tests {
1486214862
v27:NilClass = Const Value(nil)
1486314863
Jump bb5(v23, v24, v25, v26, v27)
1486414864
bb5(v47:BasicObject, v48:BasicObject, v49:BasicObject, v50:BasicObject, v51:NilClass):
14865-
v54:StaticSymbol[:each] = Const Value(VALUE(0x1018))
14865+
v54:StaticSymbol[:each] = Const Value(VALUE(0x1008))
1486614866
SetLocal :iter_method, l0, EP@4, v54
1486714867
Jump bb7(v47, v48, v49, v54, v51)
1486814868
bb6():
@@ -14879,30 +14879,30 @@ mod hir_opt_tests {
1487914879
v69:Truthy = RefineType v60, Truthy
1488014880
IfTrue v68, bb8(v58, v59, v69, v61, v62)
1488114881
v71:Falsy = RefineType v60, Falsy
14882-
PatchPoint MethodRedefined(Object@0x1020, lambda@0x1028, cme:0x1030)
14883-
v118:ObjectSubclass[class_exact*:Object@VALUE(0x1020)] = GuardType v58, ObjectSubclass[class_exact*:Object@VALUE(0x1020)]
14884-
v119:BasicObject = CCallWithFrame v118, :Kernel#lambda@0x1058, block=0x1060
14882+
PatchPoint MethodRedefined(Object@0x1010, lambda@0x1018, cme:0x1020)
14883+
v118:ObjectSubclass[class_exact*:Object@VALUE(0x1010)] = GuardType v58, ObjectSubclass[class_exact*:Object@VALUE(0x1010)]
14884+
v119:BasicObject = CCallWithFrame v118, :Kernel#lambda@0x1048, block=0x1050
1488514885
v75:CPtr = GetEP 0
1488614886
v76:BasicObject = LoadField v75, :list@0x1001
14887-
v78:BasicObject = LoadField v75, :iter_method@0x1068
14888-
v79:BasicObject = LoadField v75, :kwsplat@0x1069
14887+
v78:BasicObject = LoadField v75, :iter_method@0x1058
14888+
v79:BasicObject = LoadField v75, :kwsplat@0x1059
1488914889
SetLocal :sep, l0, EP@5, v119
1489014890
Jump bb8(v58, v76, v119, v78, v79)
1489114891
bb8(v83:BasicObject, v84:BasicObject, v85:BasicObject, v86:BasicObject, v87:BasicObject):
1489214892
PatchPoint SingleRactorMode
14893-
PatchPoint StableConstantNames(0x1070, CONST)
14894-
v115:HashExact[VALUE(0x1078)] = Const Value(VALUE(0x1078))
14893+
PatchPoint StableConstantNames(0x1060, CONST)
14894+
v115:HashExact[VALUE(0x1068)] = Const Value(VALUE(0x1068))
1489514895
SetLocal :kwsplat, l0, EP@3, v115
1489614896
v96:CPtr = GetEP 0
1489714897
v97:BasicObject = LoadField v96, :list@0x1001
1489814898
v99:CPtr = GetEP 0
14899-
v100:BasicObject = LoadField v99, :iter_method@0x1068
14900-
v102:BasicObject = Send v97, 0x1080, :__send__, v100 # SendFallbackReason: Send: unsupported method type Optimized
14899+
v100:BasicObject = LoadField v99, :iter_method@0x1058
14900+
v102:BasicObject = Send v97, 0x1070, :__send__, v100 # SendFallbackReason: Send: unsupported method type Optimized
1490114901
v103:CPtr = GetEP 0
1490214902
v104:BasicObject = LoadField v103, :list@0x1001
1490314903
v105:BasicObject = LoadField v103, :sep@0x1002
14904-
v106:BasicObject = LoadField v103, :iter_method@0x1068
14905-
v107:BasicObject = LoadField v103, :kwsplat@0x1069
14904+
v106:BasicObject = LoadField v103, :iter_method@0x1058
14905+
v107:BasicObject = LoadField v103, :kwsplat@0x1059
1490614906
CheckInterrupts
1490714907
Return v102
1490814908
");

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)