Skip to content

Commit f78b966

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 9b7f416 commit f78b966

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
@@ -7720,29 +7720,29 @@ mod hir_opt_tests {
77207720
v11:HeapBasicObject = GuardType v6, HeapBasicObject
77217721
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
77227722
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7723-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7723+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
77247724
v16 = RefineType v15, CUInt64
77257725
v17:CInt64 = IntAnd v12, v14
77267726
v18:CBool = IsBitEqual v17, v16
77277727
IfTrue v18, bb5()
77287728
v23:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7729-
v24:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7729+
v24:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
77307730
v25 = RefineType v24, CUInt64
77317731
v26:CInt64 = IntAnd v12, v23
77327732
v27:CBool = IsBitEqual v26, v25
77337733
IfTrue v27, bb6()
77347734
v31:BasicObject = GetIvar v11, :@foo
77357735
Jump bb4(v31)
77367736
bb5():
7737-
v20:CPtr = LoadField v11, :_as_heap@0x1018
7738-
v21:BasicObject = LoadField v20, :@foo@0x1019
7737+
v20:CPtr = LoadField v11, :_as_heap@0x1003
7738+
v21:BasicObject = LoadField v20, :@foo@0x1004
77397739
Jump bb4(v21)
77407740
bb6():
7741-
v29:BasicObject = LoadField v11, :@foo@0x1018
7741+
v29:BasicObject = LoadField v11, :@foo@0x1003
77427742
Jump bb4(v29)
77437743
bb4(v13:BasicObject):
77447744
v34:Fixnum[1] = Const Value(1)
7745-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7745+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
77467746
v45:Fixnum = GuardType v13, Fixnum
77477747
v46:Fixnum = FixnumAdd v45, v34
77487748
CheckInterrupts
@@ -7796,31 +7796,31 @@ mod hir_opt_tests {
77967796
v11:HeapBasicObject = GuardType v6, HeapBasicObject
77977797
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
77987798
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7799-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7799+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
78007800
v16 = RefineType v15, CUInt64
78017801
v17:CInt64 = IntAnd v12, v14
78027802
v18:CBool = IsBitEqual v17, v16
78037803
IfTrue v18, bb5()
78047804
v22:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7805-
v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7805+
v23:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
78067806
v24 = RefineType v23, CUInt64
78077807
v25:CInt64 = IntAnd v12, v22
78087808
v26:CBool = IsBitEqual v25, v24
78097809
IfTrue v26, bb6()
7810-
v44:CShape = LoadField v11, :_shape_id@0x1018
7811-
v45:CShape[0x1019] = GuardBitEquals v44, CShape(0x1019)
7812-
v46:BasicObject = LoadField v11, :@foo@0x101a
7810+
v44:CShape = LoadField v11, :_shape_id@0x1003
7811+
v45:CShape[0x1004] = GuardBitEquals v44, CShape(0x1004)
7812+
v46:BasicObject = LoadField v11, :@foo@0x1005
78137813
Jump bb4(v46)
78147814
bb5():
7815-
v20:BasicObject = LoadField v11, :@foo@0x101a
7815+
v20:BasicObject = LoadField v11, :@foo@0x1005
78167816
Jump bb4(v20)
78177817
bb6():
7818-
v28:CPtr = LoadField v11, :_as_heap@0x101a
7819-
v29:BasicObject = LoadField v28, :@foo@0x101b
7818+
v28:CPtr = LoadField v11, :_as_heap@0x1005
7819+
v29:BasicObject = LoadField v28, :@foo@0x1006
78207820
Jump bb4(v29)
78217821
bb4(v13:BasicObject):
78227822
v34:Fixnum[1] = Const Value(1)
7823-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7823+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
78247824
v49:Fixnum = GuardType v13, Fixnum
78257825
v50:Fixnum = FixnumAdd v49, v34
78267826
CheckInterrupts
@@ -7867,28 +7867,28 @@ mod hir_opt_tests {
78677867
v11:HeapBasicObject = GuardType v6, HeapBasicObject
78687868
v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
78697869
v14:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7870-
v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7870+
v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
78717871
v16 = RefineType v15, CUInt64
78727872
v17:CInt64 = IntAnd v12, v14
78737873
v18:CBool = IsBitEqual v17, v16
78747874
IfTrue v18, bb5()
78757875
v22:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7876-
v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7876+
v23:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
78777877
v24 = RefineType v23, CUInt64
78787878
v25:CInt64 = IntAnd v12, v22
78797879
v26:CBool = IsBitEqual v25, v24
78807880
IfTrue v26, bb6()
78817881
v30:BasicObject = GetIvar v11, :@foo
78827882
Jump bb4(v30)
78837883
bb5():
7884-
v20:BasicObject = LoadField v11, :@foo@0x1018
7884+
v20:BasicObject = LoadField v11, :@foo@0x1003
78857885
Jump bb4(v20)
78867886
bb6():
7887-
v28:BasicObject = LoadField v11, :@foo@0x1018
7887+
v28:BasicObject = LoadField v11, :@foo@0x1003
78887888
Jump bb4(v28)
78897889
bb4(v13:BasicObject):
78907890
v33:Fixnum[1] = Const Value(1)
7891-
PatchPoint MethodRedefined(Integer@0x1020, +@0x1028, cme:0x1030)
7891+
PatchPoint MethodRedefined(Integer@0x1008, +@0x1010, cme:0x1018)
78927892
v44:Fixnum = GuardType v13, Fixnum
78937893
v45:Fixnum = FixnumAdd v44, v33
78947894
CheckInterrupts
@@ -14327,7 +14327,7 @@ mod hir_opt_tests {
1432714327
v3:BasicObject = LoadField v2, :needle@0x1000
1432814328
v4:BasicObject = LoadField v2, :offset@0x1001
1432914329
v5:CPtr = LoadPC
14330-
v6:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14330+
v6:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
1433114331
v7:CBool = IsBitEqual v5, v6
1433214332
IfTrue v7, bb3(v1, v3, v4)
1433314333
Jump bb5(v1, v3, v4)
@@ -14347,13 +14347,13 @@ mod hir_opt_tests {
1434714347
v18:BasicObject = LoadArg :offset@2
1434814348
Jump bb5(v16, v17, v18)
1434914349
bb5(v28:BasicObject, v29:BasicObject, v30:BasicObject):
14350-
PatchPoint MethodRedefined(String@0x1018, byteindex@0x1020, cme:0x1028)
14350+
PatchPoint MethodRedefined(String@0x1008, byteindex@0x1010, cme:0x1018)
1435114351
v44:CPtr = GetEP 0
14352-
v45:RubyValue = LoadField v44, :_ep_method_entry@0x1050
14353-
v46:CallableMethodEntry[VALUE(0x1058)] = GuardBitEquals v45, Value(VALUE(0x1058))
14354-
v47:RubyValue = LoadField v44, :_ep_specval@0x1060
14352+
v45:RubyValue = LoadField v44, :_ep_method_entry@0x1040
14353+
v46:CallableMethodEntry[VALUE(0x1048)] = GuardBitEquals v45, Value(VALUE(0x1048))
14354+
v47:RubyValue = LoadField v44, :_ep_specval@0x1050
1435514355
v48:FalseClass = GuardBitEquals v47, Value(false)
14356-
v49:BasicObject = CCallVariadic v28, :String#byteindex@0x1068, v29, v30
14356+
v49:BasicObject = CCallVariadic v28, :String#byteindex@0x1058, v29, v30
1435714357
CheckInterrupts
1435814358
Return v49
1435914359
");
@@ -14485,7 +14485,7 @@ mod hir_opt_tests {
1448514485
v2:CPtr = LoadSP
1448614486
v3:BasicObject = LoadField v2, :content@0x1000
1448714487
v4:CPtr = LoadPC
14488-
v5:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14488+
v5:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
1448914489
v6:CBool = IsBitEqual v4, v5
1449014490
IfTrue v6, bb3(v1, v3)
1449114491
Jump bb5(v1, v3)
@@ -14495,7 +14495,7 @@ mod hir_opt_tests {
1449514495
v11:NilClass = Const Value(nil)
1449614496
Jump bb3(v10, v11)
1449714497
bb3(v17:BasicObject, v18:BasicObject):
14498-
v21:StringExact[VALUE(0x1018)] = Const Value(VALUE(0x1018))
14498+
v21:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008))
1449914499
v22:StringExact = StringCopy v21
1450014500
Jump bb5(v17, v22)
1450114501
bb4():
@@ -14504,7 +14504,7 @@ mod hir_opt_tests {
1450414504
v15:BasicObject = LoadArg :content@1
1450514505
Jump bb5(v14, v15)
1450614506
bb5(v25:BasicObject, v26:BasicObject):
14507-
v32:BasicObject = InvokeSuper v25, 0x1020, v26 # SendFallbackReason: super: complex argument passing to `super` call
14507+
v32:BasicObject = InvokeSuper v25, 0x1010, v26 # SendFallbackReason: super: complex argument passing to `super` call
1450814508
CheckInterrupts
1450914509
Return v32
1451014510
");
@@ -14953,10 +14953,10 @@ mod hir_opt_tests {
1495314953
v5:BasicObject = LoadField v2, :iter_method@0x1002
1495414954
v6:NilClass = Const Value(nil)
1495514955
v7:CPtr = LoadPC
14956-
v8:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14956+
v8:CPtr[CPtr(0x1003)] = Const CPtr(0x1003)
1495714957
v9:CBool = IsBitEqual v7, v8
1495814958
IfTrue v9, bb3(v1, v3, v4, v5, v6)
14959-
v11:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
14959+
v11:CPtr[CPtr(0x1004)] = Const CPtr(0x1004)
1496014960
v12:CBool = IsBitEqual v7, v11
1496114961
IfTrue v12, bb5(v1, v3, v4, v5, v6)
1496214962
Jump bb7(v1, v3, v4, v5, v6)
@@ -14981,7 +14981,7 @@ mod hir_opt_tests {
1498114981
v27:NilClass = Const Value(nil)
1498214982
Jump bb5(v23, v24, v25, v26, v27)
1498314983
bb5(v47:BasicObject, v48:BasicObject, v49:BasicObject, v50:BasicObject, v51:NilClass):
14984-
v54:StaticSymbol[:each] = Const Value(VALUE(0x1018))
14984+
v54:StaticSymbol[:each] = Const Value(VALUE(0x1008))
1498514985
SetLocal :iter_method, l0, EP@4, v54
1498614986
Jump bb7(v47, v48, v49, v54, v51)
1498714987
bb6():
@@ -14998,30 +14998,30 @@ mod hir_opt_tests {
1499814998
v69:Truthy = RefineType v60, Truthy
1499914999
IfTrue v68, bb8(v58, v59, v69, v61, v62)
1500015000
v71:Falsy = RefineType v60, Falsy
15001-
PatchPoint MethodRedefined(Object@0x1020, lambda@0x1028, cme:0x1030)
15002-
v118:ObjectSubclass[class_exact*:Object@VALUE(0x1020)] = GuardType v58, ObjectSubclass[class_exact*:Object@VALUE(0x1020)]
15003-
v119:BasicObject = CCallWithFrame v118, :Kernel#lambda@0x1058, block=0x1060
15001+
PatchPoint MethodRedefined(Object@0x1010, lambda@0x1018, cme:0x1020)
15002+
v118:ObjectSubclass[class_exact*:Object@VALUE(0x1010)] = GuardType v58, ObjectSubclass[class_exact*:Object@VALUE(0x1010)]
15003+
v119:BasicObject = CCallWithFrame v118, :Kernel#lambda@0x1048, block=0x1050
1500415004
v75:CPtr = GetEP 0
1500515005
v76:BasicObject = LoadField v75, :list@0x1001
15006-
v78:BasicObject = LoadField v75, :iter_method@0x1068
15007-
v79:BasicObject = LoadField v75, :kwsplat@0x1069
15006+
v78:BasicObject = LoadField v75, :iter_method@0x1058
15007+
v79:BasicObject = LoadField v75, :kwsplat@0x1059
1500815008
SetLocal :sep, l0, EP@5, v119
1500915009
Jump bb8(v58, v76, v119, v78, v79)
1501015010
bb8(v83:BasicObject, v84:BasicObject, v85:BasicObject, v86:BasicObject, v87:BasicObject):
1501115011
PatchPoint SingleRactorMode
15012-
PatchPoint StableConstantNames(0x1070, CONST)
15013-
v115:HashExact[VALUE(0x1078)] = Const Value(VALUE(0x1078))
15012+
PatchPoint StableConstantNames(0x1060, CONST)
15013+
v115:HashExact[VALUE(0x1068)] = Const Value(VALUE(0x1068))
1501415014
SetLocal :kwsplat, l0, EP@3, v115
1501515015
v96:CPtr = GetEP 0
1501615016
v97:BasicObject = LoadField v96, :list@0x1001
1501715017
v99:CPtr = GetEP 0
15018-
v100:BasicObject = LoadField v99, :iter_method@0x1068
15019-
v102:BasicObject = Send v97, 0x1080, :__send__, v100 # SendFallbackReason: Send: unsupported method type Optimized
15018+
v100:BasicObject = LoadField v99, :iter_method@0x1058
15019+
v102:BasicObject = Send v97, 0x1070, :__send__, v100 # SendFallbackReason: Send: unsupported method type Optimized
1502015020
v103:CPtr = GetEP 0
1502115021
v104:BasicObject = LoadField v103, :list@0x1001
1502215022
v105:BasicObject = LoadField v103, :sep@0x1002
15023-
v106:BasicObject = LoadField v103, :iter_method@0x1068
15024-
v107:BasicObject = LoadField v103, :kwsplat@0x1069
15023+
v106:BasicObject = LoadField v103, :iter_method@0x1058
15024+
v107:BasicObject = LoadField v103, :kwsplat@0x1059
1502515025
CheckInterrupts
1502615026
Return v102
1502715027
");

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)