@@ -7712,29 +7712,35 @@ mod hir_opt_tests {
77127712 bb3(v6:BasicObject):
77137713 PatchPoint SingleRactorMode
77147714 v11:HeapBasicObject = GuardType v6, HeapBasicObject
7715- v12:CShape = LoadField v11, :_shape_id@0x1000
7716- v14:CShape[0x1001] = Const CShape(0x1001)
7717- v15:CBool = IsBitEqual v12, v14
7718- IfTrue v15, bb5()
7719- v20:CShape[0x1002] = Const CShape(0x1002)
7720- v21:CBool = IsBitEqual v12, v20
7721- IfTrue v21, bb6()
7722- v25:BasicObject = GetIvar v11, :@foo
7723- Jump bb4(v25)
7715+ v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
7716+ v14:CUInt64[18446744069414584351] = Const CUInt64(18446744069414584351)
7717+ v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7718+ v16 = RefineType v15, CUInt64
7719+ v17:CInt64 = IntAnd v12, v14
7720+ v18:CBool = IsBitEqual v17, v16
7721+ IfTrue v18, bb5()
7722+ v23:CUInt64[18446744069414584351] = Const CUInt64(18446744069414584351)
7723+ v24:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7724+ v25 = RefineType v24, CUInt64
7725+ v26:CInt64 = IntAnd v12, v23
7726+ v27:CBool = IsBitEqual v26, v25
7727+ IfTrue v27, bb6()
7728+ v31:BasicObject = GetIvar v11, :@foo
7729+ Jump bb4(v31)
77247730 bb5():
7725- v17 :CPtr = LoadField v11, :_as_heap@0x1003
7726- v18 :BasicObject = LoadField v17 , :@foo@0x1004
7727- Jump bb4(v18 )
7731+ v20 :CPtr = LoadField v11, :_as_heap@0x1018
7732+ v21 :BasicObject = LoadField v20 , :@foo@0x1019
7733+ Jump bb4(v21 )
77287734 bb6():
7729- v23 :BasicObject = LoadField v11, :@foo@0x1003
7730- Jump bb4(v23 )
7735+ v29 :BasicObject = LoadField v11, :@foo@0x1018
7736+ Jump bb4(v29 )
77317737 bb4(v13:BasicObject):
7732- v28 :Fixnum[1] = Const Value(1)
7733- PatchPoint MethodRedefined(Integer@0x1008 , +@0x1010 , cme:0x1018 )
7734- v39 :Fixnum = GuardType v13, Fixnum
7735- v40 :Fixnum = FixnumAdd v39, v28
7738+ v34 :Fixnum[1] = Const Value(1)
7739+ PatchPoint MethodRedefined(Integer@0x1020 , +@0x1028 , cme:0x1030 )
7740+ v45 :Fixnum = GuardType v13, Fixnum
7741+ v46 :Fixnum = FixnumAdd v45, v34
77367742 CheckInterrupts
7737- Return v40
7743+ Return v46
77387744 " ) ;
77397745 }
77407746
@@ -7782,31 +7788,37 @@ mod hir_opt_tests {
77827788 bb3(v6:BasicObject):
77837789 PatchPoint SingleRactorMode
77847790 v11:HeapBasicObject = GuardType v6, HeapBasicObject
7785- v12:CShape = LoadField v11, :_shape_id@0x1000
7786- v14:CShape[0x1001] = Const CShape(0x1001)
7787- v15:CBool = IsBitEqual v12, v14
7788- IfTrue v15, bb5()
7789- v19:CShape[0x1002] = Const CShape(0x1002)
7790- v20:CBool = IsBitEqual v12, v19
7791- IfTrue v20, bb6()
7792- v38:CShape = LoadField v11, :_shape_id@0x1000
7793- v39:CShape[0x1001] = GuardBitEquals v38, CShape(0x1001)
7794- v40:BasicObject = LoadField v11, :@foo@0x1003
7795- Jump bb4(v40)
7791+ v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
7792+ v14:CUInt64[18446744069414584351] = Const CUInt64(18446744069414584351)
7793+ v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7794+ v16 = RefineType v15, CUInt64
7795+ v17:CInt64 = IntAnd v12, v14
7796+ v18:CBool = IsBitEqual v17, v16
7797+ IfTrue v18, bb5()
7798+ v22:CUInt64[18446744069414584351] = Const CUInt64(18446744069414584351)
7799+ v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7800+ v24 = RefineType v23, CUInt64
7801+ v25:CInt64 = IntAnd v12, v22
7802+ v26:CBool = IsBitEqual v25, v24
7803+ 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
7807+ Jump bb4(v46)
77967808 bb5():
7797- v17 :BasicObject = LoadField v11, :@foo@0x1003
7798- Jump bb4(v17 )
7809+ v20 :BasicObject = LoadField v11, :@foo@0x101a
7810+ Jump bb4(v20 )
77997811 bb6():
7800- v22 :CPtr = LoadField v11, :_as_heap@0x1003
7801- v23 :BasicObject = LoadField v22 , :@foo@0x1004
7802- Jump bb4(v23 )
7812+ v28 :CPtr = LoadField v11, :_as_heap@0x101a
7813+ v29 :BasicObject = LoadField v28 , :@foo@0x101b
7814+ Jump bb4(v29 )
78037815 bb4(v13:BasicObject):
7804- v28 :Fixnum[1] = Const Value(1)
7805- PatchPoint MethodRedefined(Integer@0x1008 , +@0x1010 , cme:0x1018 )
7806- v43 :Fixnum = GuardType v13, Fixnum
7807- v44 :Fixnum = FixnumAdd v43, v28
7816+ v34 :Fixnum[1] = Const Value(1)
7817+ PatchPoint MethodRedefined(Integer@0x1020 , +@0x1028 , cme:0x1030 )
7818+ v49 :Fixnum = GuardType v13, Fixnum
7819+ v50 :Fixnum = FixnumAdd v49, v34
78087820 CheckInterrupts
7809- Return v44
7821+ Return v50
78107822 " ) ;
78117823 }
78127824
@@ -7847,28 +7859,99 @@ mod hir_opt_tests {
78477859 bb3(v6:BasicObject):
78487860 PatchPoint SingleRactorMode
78497861 v11:HeapBasicObject = GuardType v6, HeapBasicObject
7850- v12:CShape = LoadField v11, :_shape_id@0x1000
7851- v14:CShape[0x1001] = Const CShape(0x1001)
7852- v15:CBool = IsBitEqual v12, v14
7853- IfTrue v15, bb5()
7854- v19:CShape[0x1002] = Const CShape(0x1002)
7855- v20:CBool = IsBitEqual v12, v19
7856- IfTrue v20, bb6()
7857- v24:BasicObject = GetIvar v11, :@foo
7858- Jump bb4(v24)
7862+ v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
7863+ v14:CUInt64[18446744069414584351] = Const CUInt64(18446744069414584351)
7864+ v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7865+ v16 = RefineType v15, CUInt64
7866+ v17:CInt64 = IntAnd v12, v14
7867+ v18:CBool = IsBitEqual v17, v16
7868+ IfTrue v18, bb5()
7869+ v22:CUInt64[18446744069414584351] = Const CUInt64(18446744069414584351)
7870+ v23:CPtr[CPtr(0x1008)] = Const CPtr(0x1010)
7871+ v24 = RefineType v23, CUInt64
7872+ v25:CInt64 = IntAnd v12, v22
7873+ v26:CBool = IsBitEqual v25, v24
7874+ IfTrue v26, bb6()
7875+ v30:BasicObject = GetIvar v11, :@foo
7876+ Jump bb4(v30)
78597877 bb5():
7860- v17 :BasicObject = LoadField v11, :@foo@0x1003
7861- Jump bb4(v17 )
7878+ v20 :BasicObject = LoadField v11, :@foo@0x1018
7879+ Jump bb4(v20 )
78627880 bb6():
7863- v22 :BasicObject = LoadField v11, :@foo@0x1003
7864- Jump bb4(v22 )
7881+ v28 :BasicObject = LoadField v11, :@foo@0x1018
7882+ Jump bb4(v28 )
78657883 bb4(v13:BasicObject):
7866- v27 :Fixnum[1] = Const Value(1)
7867- PatchPoint MethodRedefined(Integer@0x1008 , +@0x1010 , cme:0x1018 )
7868- v38 :Fixnum = GuardType v13, Fixnum
7869- v39 :Fixnum = FixnumAdd v38, v27
7884+ v33 :Fixnum[1] = Const Value(1)
7885+ PatchPoint MethodRedefined(Integer@0x1020 , +@0x1028 , cme:0x1030 )
7886+ v44 :Fixnum = GuardType v13, Fixnum
7887+ v45 :Fixnum = FixnumAdd v44, v33
78707888 CheckInterrupts
7871- Return v39
7889+ Return v45
7890+ " ) ;
7891+ }
7892+
7893+ #[ test]
7894+ fn test_getivar_polymorphic_t_class_and_typed_data ( ) {
7895+ set_call_threshold ( 3 ) ;
7896+ eval ( r#"
7897+ module Reader
7898+ def test = @a
7899+ end
7900+
7901+ class A
7902+ extend Reader
7903+ @a = 0
7904+ end
7905+
7906+ ARGF.instance_eval do
7907+ extend Reader
7908+ @a = :a
7909+ end
7910+
7911+ A.test
7912+ ARGF.test
7913+ "# ) ;
7914+ assert_snapshot ! ( assert_compiles( "[A.test, ARGF.test]" ) , @"[0, :a]" ) ;
7915+ assert_snapshot ! ( hir_string_proc( "Reader.instance_method(:test)" ) , @"
7916+ fn test@<compiled>:3:
7917+ bb1():
7918+ EntryPoint interpreter
7919+ v1:BasicObject = LoadSelf
7920+ Jump bb3(v1)
7921+ bb2():
7922+ EntryPoint JIT(0)
7923+ v4:BasicObject = LoadArg :self@0
7924+ Jump bb3(v4)
7925+ bb3(v6:BasicObject):
7926+ PatchPoint SingleRactorMode
7927+ v11:HeapBasicObject = GuardType v6, HeapBasicObject
7928+ v12:CUInt64 = LoadField v11, :_rbasic_flags@0x1000
7929+ v14:CUInt64[0xffffffff0000005f] = Const CUInt64(0xffffffff0000005f)
7930+ v15:CPtr[CPtr(0x1001)] = Const CPtr(0x1001)
7931+ v16 = RefineType v15, CUInt64
7932+ v17:CInt64 = IntAnd v12, v14
7933+ v18:CBool = IsBitEqual v17, v16
7934+ IfTrue v18, bb5()
7935+ v23:CUInt64[0xffffffff0000001f] = Const CUInt64(0xffffffff0000001f)
7936+ v24:CPtr[CPtr(0x1002)] = Const CPtr(0x1002)
7937+ v25 = RefineType v24, CUInt64
7938+ v26:CInt64 = IntAnd v12, v23
7939+ v27:CBool = IsBitEqual v26, v25
7940+ IfTrue v27, bb6()
7941+ v33:BasicObject = GetIvar v11, :@a
7942+ Jump bb4(v33)
7943+ bb5():
7944+ v20:RubyValue = LoadField v11, :_fields_obj@0x1003
7945+ v21:BasicObject = LoadField v20, :@a@0x1003
7946+ Jump bb4(v21)
7947+ bb6():
7948+ PatchPoint RootBoxOnly
7949+ v30:RubyValue = LoadField v11, :_fields_obj@0x1004
7950+ v31:BasicObject = LoadField v30, :@a@0x1003
7951+ Jump bb4(v31)
7952+ bb4(v13:BasicObject):
7953+ CheckInterrupts
7954+ Return v13
78727955 " ) ;
78737956 }
78747957
0 commit comments