diff options
| -rw-r--r-- | zjit/src/hir.rs | 830 |
1 files changed, 553 insertions, 277 deletions
diff --git a/zjit/src/hir.rs b/zjit/src/hir.rs index f68d85a42d..1fdca5a688 100644 --- a/zjit/src/hir.rs +++ b/zjit/src/hir.rs @@ -3942,6 +3942,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject): v2:Fixnum[123] = Const Value(123) + CheckInterrupts Return v2 "#]]); } @@ -3953,6 +3954,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject): v3:ArrayExact = NewArray + CheckInterrupts Return v3 "#]]); } @@ -3964,6 +3966,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject, v1:BasicObject): v4:ArrayExact = NewArray v1 + CheckInterrupts Return v4 "#]]); } @@ -3975,6 +3978,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:ArrayExact = NewArray v1, v2 + CheckInterrupts Return v5 "#]]); } @@ -3987,6 +3991,7 @@ mod tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[10] = Const Value(10) v5:RangeExact = NewRange v1 NewRangeInclusive v3 + CheckInterrupts Return v5 "#]]); } @@ -3998,6 +4003,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:RangeExact = NewRange v1 NewRangeInclusive v2 + CheckInterrupts Return v5 "#]]); } @@ -4010,6 +4016,7 @@ mod tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[10] = Const Value(10) v5:RangeExact = NewRange v1 NewRangeExclusive v3 + CheckInterrupts Return v5 "#]]); } @@ -4021,6 +4028,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:RangeExact = NewRange v1 NewRangeExclusive v2 + CheckInterrupts Return v5 "#]]); } @@ -4033,6 +4041,7 @@ mod tests { bb0(v0:BasicObject): v2:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:ArrayExact = ArrayDup v2 + CheckInterrupts Return v4 "#]]); } @@ -4045,6 +4054,7 @@ mod tests { bb0(v0:BasicObject): v2:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:HashExact = HashDup v2 + CheckInterrupts Return v4 "#]]); } @@ -4056,6 +4066,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject): v3:HashExact = NewHash + CheckInterrupts Return v3 "#]]); } @@ -4069,6 +4080,7 @@ mod tests { v4:StaticSymbol[:a] = Const Value(VALUE(0x1000)) v5:StaticSymbol[:b] = Const Value(VALUE(0x1008)) v7:HashExact = NewHash v4: v1, v5: v2 + CheckInterrupts Return v7 "#]]); } @@ -4081,6 +4093,7 @@ mod tests { bb0(v0:BasicObject): v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:StringExact = StringCopy v2 + CheckInterrupts Return v4 "#]]); } @@ -4092,6 +4105,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject): v2:Bignum[VALUE(0x1000)] = Const Value(VALUE(0x1000)) + CheckInterrupts Return v2 "#]]); } @@ -4103,6 +4117,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject): v2:Flonum[VALUE(0x1000)] = Const Value(VALUE(0x1000)) + CheckInterrupts Return v2 "#]]); } @@ -4114,6 +4129,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject): v2:HeapFloat[VALUE(0x1000)] = Const Value(VALUE(0x1000)) + CheckInterrupts Return v2 "#]]); } @@ -4125,6 +4141,7 @@ mod tests { fn test@<compiled>:1: bb0(v0:BasicObject): v2:StaticSymbol[:foo] = Const Value(VALUE(0x1000)) + CheckInterrupts Return v2 "#]]); } @@ -4138,6 +4155,7 @@ mod tests { v2:Fixnum[1] = Const Value(1) v3:Fixnum[2] = Const Value(2) v5:BasicObject = SendWithoutBlock v2, :+, v3 + CheckInterrupts Return v5 "#]]); } @@ -4152,6 +4170,7 @@ mod tests { bb0(v0:BasicObject): v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:BasicObject = SendWithoutBlock v3, :freeze + CheckInterrupts Return v4 "#]]); } @@ -4166,6 +4185,7 @@ mod tests { bb0(v0:BasicObject): v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:BasicObject = SendWithoutBlock v3, :freeze + CheckInterrupts Return v4 "#]]); } @@ -4180,6 +4200,7 @@ mod tests { bb0(v0:BasicObject): v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:BasicObject = SendWithoutBlock v3, :freeze + CheckInterrupts Return v4 "#]]); } @@ -4194,6 +4215,7 @@ mod tests { bb0(v0:BasicObject): v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:BasicObject = SendWithoutBlock v3, :-@ + CheckInterrupts Return v4 "#]]); } @@ -4211,6 +4233,7 @@ mod tests { bb0(v0:BasicObject): v1:NilClass = Const Value(nil) v3:Fixnum[1] = Const Value(1) + CheckInterrupts Return v3 "#]]); } @@ -4250,6 +4273,7 @@ mod tests { v10:BasicObject = GetLocal l3, EP@5 v12:BasicObject = SendWithoutBlock v9, :+, v10 SetLocal l3, EP@5, v12 + CheckInterrupts Return v12 "#]] ); @@ -4264,6 +4288,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject): v3:BasicObject = DefinedIvar v0, :@foo + CheckInterrupts Return v3 "#]]); } @@ -4282,6 +4307,7 @@ mod tests { v7:NilClass = Const Value(nil) v9:StringExact|NilClass = Defined global-variable, v7 v11:ArrayExact = NewArray v4, v6, v9 + CheckInterrupts Return v11 "#]]); } @@ -4300,13 +4326,16 @@ mod tests { assert_method_hir_with_opcode("test", YARVINSN_leave, expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject): - v3:CBool = Test v1 - IfFalse v3, bb1(v0, v1) - v5:Fixnum[3] = Const Value(3) - Return v5 - bb1(v7:BasicObject, v8:BasicObject): - v10:Fixnum[4] = Const Value(4) - Return v10 + CheckInterrupts + v5:CBool = Test v1 + IfFalse v5, bb1(v0, v1) + v7:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v7 + bb1(v11:BasicObject, v12:BasicObject): + v14:Fixnum[4] = Const Value(4) + CheckInterrupts + Return v14 "#]]); } @@ -4326,15 +4355,18 @@ mod tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject): v2:NilClass = Const Value(nil) - v4:CBool = Test v1 - IfFalse v4, bb1(v0, v1, v2) - v6:Fixnum[3] = Const Value(3) - Jump bb2(v0, v1, v6) - bb1(v8:BasicObject, v9:BasicObject, v10:NilClass): - v12:Fixnum[4] = Const Value(4) - Jump bb2(v8, v9, v12) - bb2(v14:BasicObject, v15:BasicObject, v16:Fixnum): - Return v16 + CheckInterrupts + v6:CBool = Test v1 + IfFalse v6, bb1(v0, v1, v2) + v8:Fixnum[3] = Const Value(3) + CheckInterrupts + Jump bb2(v0, v1, v8) + bb1(v12:BasicObject, v13:BasicObject, v14:NilClass): + v16:Fixnum[4] = Const Value(4) + Jump bb2(v12, v13, v16) + bb2(v18:BasicObject, v19:BasicObject, v20:Fixnum): + CheckInterrupts + Return v20 "#]]); } @@ -4348,6 +4380,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :+, v2 + CheckInterrupts Return v5 "#]]); } @@ -4362,6 +4395,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :-, v2 + CheckInterrupts Return v5 "#]]); } @@ -4376,6 +4410,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :*, v2 + CheckInterrupts Return v5 "#]]); } @@ -4390,6 +4425,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :/, v2 + CheckInterrupts Return v5 "#]]); } @@ -4404,6 +4440,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :%, v2 + CheckInterrupts Return v5 "#]]); } @@ -4418,6 +4455,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :==, v2 + CheckInterrupts Return v5 "#]]); } @@ -4432,6 +4470,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :!=, v2 + CheckInterrupts Return v5 "#]]); } @@ -4446,6 +4485,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :<, v2 + CheckInterrupts Return v5 "#]]); } @@ -4460,6 +4500,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :<=, v2 + CheckInterrupts Return v5 "#]]); } @@ -4474,6 +4515,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :>, v2 + CheckInterrupts Return v5 "#]]); } @@ -4499,20 +4541,23 @@ mod tests { v2:NilClass = Const Value(nil) v4:Fixnum[0] = Const Value(0) v5:Fixnum[10] = Const Value(10) + CheckInterrupts Jump bb2(v0, v4, v5) - bb2(v7:BasicObject, v8:BasicObject, v9:BasicObject): - v11:Fixnum[0] = Const Value(0) - v13:BasicObject = SendWithoutBlock v9, :>, v11 - v14:CBool = Test v13 - IfTrue v14, bb1(v7, v8, v9) - v16:NilClass = Const Value(nil) - Return v8 - bb1(v18:BasicObject, v19:BasicObject, v20:BasicObject): - v22:Fixnum[1] = Const Value(1) - v24:BasicObject = SendWithoutBlock v19, :+, v22 - v25:Fixnum[1] = Const Value(1) - v27:BasicObject = SendWithoutBlock v20, :-, v25 - Jump bb2(v18, v24, v27) + bb2(v9:BasicObject, v10:BasicObject, v11:BasicObject): + v13:Fixnum[0] = Const Value(0) + v15:BasicObject = SendWithoutBlock v11, :>, v13 + CheckInterrupts + v18:CBool = Test v15 + IfTrue v18, bb1(v9, v10, v11) + v20:NilClass = Const Value(nil) + CheckInterrupts + Return v10 + bb1(v24:BasicObject, v25:BasicObject, v26:BasicObject): + v28:Fixnum[1] = Const Value(1) + v30:BasicObject = SendWithoutBlock v25, :+, v28 + v31:Fixnum[1] = Const Value(1) + v33:BasicObject = SendWithoutBlock v26, :-, v31 + Jump bb2(v24, v30, v33) "#]]); } @@ -4526,6 +4571,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :>=, v2 + CheckInterrupts Return v5 "#]]); } @@ -4547,13 +4593,16 @@ mod tests { bb0(v0:BasicObject): v1:NilClass = Const Value(nil) v3:TrueClass = Const Value(true) - v4:CBool[true] = Test v3 - IfFalse v4, bb1(v0, v3) - v6:Fixnum[3] = Const Value(3) - Return v6 - bb1(v8, v9): - v11 = Const Value(4) - Return v11 + CheckInterrupts + v6:CBool[true] = Test v3 + IfFalse v6, bb1(v0, v3) + v8:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v8 + bb1(v12, v13): + v15 = Const Value(4) + CheckInterrupts + Return v15 "#]]); } @@ -4573,6 +4622,7 @@ mod tests { v2:Fixnum[2] = Const Value(2) v3:Fixnum[3] = Const Value(3) v5:BasicObject = SendWithoutBlock v0, :bar, v2, v3 + CheckInterrupts Return v5 "#]]); } @@ -4591,6 +4641,7 @@ mod tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject): v4:BasicObject = Send v1, 0x1000, :each + CheckInterrupts Return v4 "#]]); } @@ -4611,6 +4662,7 @@ mod tests { v7:String = AnyToString v3, str: v5 v9:StringExact = StringConcat v2, v7 v11:Symbol = StringIntern v9 + CheckInterrupts Return v11 "#]]); } @@ -4632,6 +4684,7 @@ mod tests { v11:StringExact[VALUE(0x1010)] = Const Value(VALUE(0x1010)) v13:StringExact = StringCopy v11 v15:BasicObject = SendWithoutBlock v0, :unknown_method, v4, v7, v10, v13 + CheckInterrupts Return v15 "#]]); } @@ -4781,12 +4834,14 @@ mod tests { bb0(v0:BasicObject): v3:BasicObject = GetConstantPath 0x1000 v4:NilClass = Const Value(nil) + CheckInterrupts Jump bb1(v0, v4, v3) - bb1(v6:BasicObject, v7:NilClass, v8:BasicObject): - v11:BasicObject = SendWithoutBlock v8, :new - Jump bb2(v6, v11, v7) - bb2(v13:BasicObject, v14:BasicObject, v15:NilClass): - Return v14 + bb1(v8:BasicObject, v9:NilClass, v10:BasicObject): + v13:BasicObject = SendWithoutBlock v10, :new + Jump bb2(v8, v13, v9) + bb2(v15:BasicObject, v16:BasicObject, v17:NilClass): + CheckInterrupts + Return v16 "#]]); } @@ -4801,6 +4856,7 @@ mod tests { bb0(v0:BasicObject): PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_MAX) v4:BasicObject = ArrayMax + CheckInterrupts Return v4 "#]]); } @@ -4815,6 +4871,7 @@ mod tests { bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_MAX) v6:BasicObject = ArrayMax v1, v2 + CheckInterrupts Return v6 "#]]); } @@ -4913,6 +4970,7 @@ mod tests { bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:ArrayExact = NewArray v1, v2 v7:BasicObject = SendWithoutBlock v5, :length + CheckInterrupts Return v7 "#]]); } @@ -4927,6 +4985,7 @@ mod tests { bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:ArrayExact = NewArray v1, v2 v7:BasicObject = SendWithoutBlock v5, :size + CheckInterrupts Return v7 "#]]); } @@ -4941,6 +5000,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject): v3:BasicObject = GetIvar v0, :@foo + CheckInterrupts Return v3 "#]]); } @@ -4956,6 +5016,7 @@ mod tests { bb0(v0:BasicObject): v2:Fixnum[1] = Const Value(1) SetIvar v0, :@foo, v2 + CheckInterrupts Return v2 "#]]); } @@ -4971,6 +5032,7 @@ mod tests { bb0(v0:BasicObject): v2:Fixnum[1] = Const Value(1) SetGlobal :$foo, v2 + CheckInterrupts Return v2 "#]]); } @@ -4985,6 +5047,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject): v3:BasicObject = GetGlobal :$foo + CheckInterrupts Return v3 "#]]); } @@ -4998,6 +5061,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): v4:ArrayExact = ToNewArray v1 + CheckInterrupts Return v4 "#]]); } @@ -5014,6 +5078,7 @@ mod tests { v5:ArrayExact = NewArray v3 v7:ArrayExact = ToArray v1 ArrayExtend v5, v7 + CheckInterrupts Return v5 "#]]); } @@ -5029,6 +5094,7 @@ mod tests { v4:ArrayExact = ToNewArray v1 v5:Fixnum[1] = Const Value(1) ArrayPush v4, v5 + CheckInterrupts Return v4 "#]]); } @@ -5048,6 +5114,7 @@ mod tests { ArrayPush v4, v5 ArrayPush v4, v6 ArrayPush v4, v7 + CheckInterrupts Return v4 "#]]); } @@ -5063,6 +5130,7 @@ mod tests { v4:NilClass = Const Value(nil) v5:Fixnum[1] = Const Value(1) v7:BasicObject = SendWithoutBlock v1, :[]=, v2, v5 + CheckInterrupts Return v5 "#]]); } @@ -5076,6 +5144,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :[], v2 + CheckInterrupts Return v5 "#]]); } @@ -5090,6 +5159,7 @@ mod tests { bb0(v0:BasicObject, v1:BasicObject): v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v5:BasicObject = SendWithoutBlock v1, :[], v3 + CheckInterrupts Return v5 "#]]); } @@ -5103,6 +5173,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): v4:BasicObject = SendWithoutBlock v1, :empty? + CheckInterrupts Return v4 "#]]); } @@ -5116,6 +5187,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): v4:BasicObject = SendWithoutBlock v1, :succ + CheckInterrupts Return v4 "#]]); } @@ -5129,6 +5201,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :&, v2 + CheckInterrupts Return v5 "#]]); } @@ -5142,6 +5215,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :|, v2 + CheckInterrupts Return v5 "#]]); } @@ -5155,6 +5229,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): v4:BasicObject = SendWithoutBlock v1, :! + CheckInterrupts Return v4 "#]]); } @@ -5168,6 +5243,7 @@ mod tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :=~, v2 + CheckInterrupts Return v5 "#]]); } @@ -5189,6 +5265,7 @@ mod tests { v4:StaticSymbol[:aliased] = Const Value(VALUE(0x1008)) v5:StaticSymbol[:__callee__] = Const Value(VALUE(0x1010)) v7:BasicObject = SendWithoutBlock v2, :core#set_method_alias, v3, v4, v5 + CheckInterrupts Return v7 "#]]); } @@ -5216,6 +5293,7 @@ mod tests { v8:BasicObject = GetIvar v0, :@b v10:BasicObject = GetIvar v0, :@c v12:ArrayExact = NewArray v6, v8, v10 + CheckInterrupts Return v12 "#]]); assert_method_hir_with_opcode("reverse_even", YARVINSN_opt_reverse, expect![[r#" @@ -5230,6 +5308,7 @@ mod tests { v11:BasicObject = GetIvar v0, :@c v13:BasicObject = GetIvar v0, :@d v15:ArrayExact = NewArray v7, v9, v11, v13 + CheckInterrupts Return v15 "#]]); } @@ -5242,12 +5321,14 @@ mod tests { assert_method_hir_with_opcode("test", YARVINSN_branchnil, expect![[r#" fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): - v3:CBool = IsNil v1 - IfTrue v3, bb1(v0, v1, v1) - v6:BasicObject = SendWithoutBlock v1, :itself - Jump bb1(v0, v1, v6) - bb1(v8:BasicObject, v9:BasicObject, v10:BasicObject): - Return v10 + CheckInterrupts + v5:CBool = IsNil v1 + IfTrue v5, bb1(v0, v1, v1) + v8:BasicObject = SendWithoutBlock v1, :itself + Jump bb1(v0, v1, v8) + bb1(v10:BasicObject, v11:BasicObject, v12:BasicObject): + CheckInterrupts + Return v12 "#]]); } @@ -5259,6 +5340,7 @@ mod tests { v6:Float = InvokeBuiltin rb_f_float, v0, v1, v2 Jump bb1(v0, v1, v2, v3, v6) bb1(v8:BasicObject, v9:BasicObject, v10:BasicObject, v11:BasicObject, v12:Float): + CheckInterrupts Return v12 "#]]); } @@ -5271,6 +5353,7 @@ mod tests { v3:Class = InvokeBuiltin _bi20, v0 Jump bb1(v0, v3) bb1(v5:BasicObject, v6:Class): + CheckInterrupts Return v6 "#]]); } @@ -5301,6 +5384,7 @@ mod tests { v3:BasicObject = InvokeBuiltin gc_enable, v0 Jump bb1(v0, v3) bb1(v5:BasicObject, v6:BasicObject): + CheckInterrupts Return v6 "#]]); } @@ -5315,6 +5399,7 @@ mod tests { bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject, v4:BasicObject): v6:FalseClass = Const Value(false) v8:BasicObject = InvokeBuiltin gc_start_internal, v0, v1, v2, v3, v6 + CheckInterrupts Return v8 "#]]); } @@ -5331,13 +5416,16 @@ mod tests { v4:Fixnum[0] = Const Value(0) v5:Fixnum[1] = Const Value(1) v7:BasicObject = SendWithoutBlock v1, :[], v4, v5 - v8:CBool = Test v7 - IfTrue v8, bb1(v0, v1, v3, v1, v4, v5, v7) - v10:Fixnum[2] = Const Value(2) - v12:BasicObject = SendWithoutBlock v1, :[]=, v4, v5, v10 - Return v10 - bb1(v14:BasicObject, v15:BasicObject, v16:NilClass, v17:BasicObject, v18:Fixnum[0], v19:Fixnum[1], v20:BasicObject): - Return v20 + CheckInterrupts + v10:CBool = Test v7 + IfTrue v10, bb1(v0, v1, v3, v1, v4, v5, v7) + v12:Fixnum[2] = Const Value(2) + v14:BasicObject = SendWithoutBlock v1, :[]=, v4, v5, v12 + CheckInterrupts + Return v12 + bb1(v18:BasicObject, v19:BasicObject, v20:NilClass, v21:BasicObject, v22:Fixnum[0], v23:Fixnum[1], v24:BasicObject): + CheckInterrupts + Return v24 "#]]); } @@ -5354,6 +5442,7 @@ mod tests { v5:BasicObject = ObjToString v3 v7:String = AnyToString v3, str: v5 v9:StringExact = StringConcat v2, v7 + CheckInterrupts Return v9 "#]]); } @@ -5376,6 +5465,7 @@ mod tests { v14:BasicObject = ObjToString v12 v16:String = AnyToString v12, str: v14 v18:StringExact = StringConcat v6, v11, v16 + CheckInterrupts Return v18 "#]]); } @@ -5393,6 +5483,7 @@ mod tests { v5:BasicObject = ObjToString v3 v7:String = AnyToString v3, str: v5 v9:StringExact = StringConcat v2, v7 + CheckInterrupts Return v9 "#]]); } @@ -5415,6 +5506,7 @@ mod tests { v14:BasicObject = ObjToString v12 v16:String = AnyToString v12, str: v14 v18:RegexpExact = ToRegexp v6, v11, v16 + CheckInterrupts Return v18 "#]]); } @@ -5434,6 +5526,7 @@ mod tests { v9:BasicObject = ObjToString v7 v11:String = AnyToString v7, str: v9 v13:RegexpExact = ToRegexp v6, v11, MULTILINE|IGNORECASE|EXTENDED|NOENCODING + CheckInterrupts Return v13 "#]]); } @@ -5488,11 +5581,12 @@ mod graphviz_tests { mode=hier; overlap=false; splines=true; bb0 [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject) </TD></TR> - <TR><TD ALIGN="left" PORT="v7">PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 29) </TD></TR> - <TR><TD ALIGN="left" PORT="v8">v8:Fixnum = GuardType v1, Fixnum </TD></TR> - <TR><TD ALIGN="left" PORT="v9">v9:Fixnum = GuardType v2, Fixnum </TD></TR> - <TR><TD ALIGN="left" PORT="v10">v10:Fixnum = FixnumOr v8, v9 </TD></TR> - <TR><TD ALIGN="left" PORT="v6">Return v10 </TD></TR> + <TR><TD ALIGN="left" PORT="v9">PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 29) </TD></TR> + <TR><TD ALIGN="left" PORT="v10">v10:Fixnum = GuardType v1, Fixnum </TD></TR> + <TR><TD ALIGN="left" PORT="v11">v11:Fixnum = GuardType v2, Fixnum </TD></TR> + <TR><TD ALIGN="left" PORT="v12">v12:Fixnum = FixnumOr v10, v11 </TD></TR> + <TR><TD ALIGN="left" PORT="v7">CheckInterrupts </TD></TR> + <TR><TD ALIGN="left" PORT="v8">Return v12 </TD></TR> </TABLE>>]; } "#]]); @@ -5518,16 +5612,19 @@ mod graphviz_tests { mode=hier; overlap=false; splines=true; bb0 [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb0(v0:BasicObject, v1:BasicObject) </TD></TR> - <TR><TD ALIGN="left" PORT="v3">v3:CBool = Test v1 </TD></TR> - <TR><TD ALIGN="left" PORT="v4">IfFalse v3, bb1(v0, v1) </TD></TR> - <TR><TD ALIGN="left" PORT="v5">v5:Fixnum[3] = Const Value(3) </TD></TR> - <TR><TD ALIGN="left" PORT="v6">Return v5 </TD></TR> + <TR><TD ALIGN="left" PORT="v4">CheckInterrupts </TD></TR> + <TR><TD ALIGN="left" PORT="v5">v5:CBool = Test v1 </TD></TR> + <TR><TD ALIGN="left" PORT="v6">IfFalse v5, bb1(v0, v1) </TD></TR> + <TR><TD ALIGN="left" PORT="v7">v7:Fixnum[3] = Const Value(3) </TD></TR> + <TR><TD ALIGN="left" PORT="v9">CheckInterrupts </TD></TR> + <TR><TD ALIGN="left" PORT="v10">Return v7 </TD></TR> </TABLE>>]; - bb0:v4 -> bb1:params; + bb0:v6 -> bb1:params; bb1 [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> - <TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb1(v7:BasicObject, v8:BasicObject) </TD></TR> - <TR><TD ALIGN="left" PORT="v10">v10:Fixnum[4] = Const Value(4) </TD></TR> - <TR><TD ALIGN="left" PORT="v11">Return v10 </TD></TR> + <TR><TD ALIGN="LEFT" PORT="params" BGCOLOR="gray">bb1(v11:BasicObject, v12:BasicObject) </TD></TR> + <TR><TD ALIGN="left" PORT="v14">v14:Fixnum[4] = Const Value(4) </TD></TR> + <TR><TD ALIGN="left" PORT="v16">CheckInterrupts </TD></TR> + <TR><TD ALIGN="left" PORT="v17">Return v14 </TD></TR> </TABLE>>]; } "#]]); @@ -5565,8 +5662,11 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): - v6:Fixnum[3] = Const Value(3) - Return v6 + v3:TrueClass = Const Value(true) + CheckInterrupts + v8:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v8 "#]]); } @@ -5585,8 +5685,11 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): - v11:Fixnum[4] = Const Value(4) - Return v11 + v3:FalseClass = Const Value(false) + CheckInterrupts + v15:Fixnum[4] = Const Value(4) + CheckInterrupts + Return v15 "#]]); } @@ -5603,11 +5706,12 @@ mod opt_tests { v2:Fixnum[1] = Const Value(1) v3:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v14:Fixnum[3] = Const Value(3) + v16:Fixnum[3] = Const Value(3) v6:Fixnum[3] = Const Value(3) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v15:Fixnum[6] = Const Value(6) - Return v15 + v17:Fixnum[6] = Const Value(6) + CheckInterrupts + Return v17 "#]]); } @@ -5624,11 +5728,12 @@ mod opt_tests { v2:Fixnum[5] = Const Value(5) v3:Fixnum[3] = Const Value(3) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS) - v14:Fixnum[2] = Const Value(2) + v16:Fixnum[2] = Const Value(2) v6:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS) - v15:Fixnum[1] = Const Value(1) - Return v15 + v17:Fixnum[1] = Const Value(1) + CheckInterrupts + Return v17 "#]]); } @@ -5645,8 +5750,9 @@ mod opt_tests { v2:Fixnum[0] = Const Value(0) v3:Fixnum[1073741825] = Const Value(1073741825) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS) - v9:Fixnum[-1073741825] = Const Value(-1073741825) - Return v9 + v11:Fixnum[-1073741825] = Const Value(-1073741825) + CheckInterrupts + Return v11 "#]]); } @@ -5663,8 +5769,9 @@ mod opt_tests { v2:Fixnum[6] = Const Value(6) v3:Fixnum[7] = Const Value(7) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT) - v9:Fixnum[42] = Const Value(42) - Return v9 + v11:Fixnum[42] = Const Value(42) + CheckInterrupts + Return v11 "#]]); } @@ -5681,15 +5788,16 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[0] = Const Value(0) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT) - v13:Fixnum = GuardType v1, Fixnum - v20:Fixnum[0] = Const Value(0) + v15:Fixnum = GuardType v1, Fixnum + v22:Fixnum[0] = Const Value(0) v6:Fixnum[0] = Const Value(0) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT) - v16:Fixnum = GuardType v1, Fixnum - v21:Fixnum[0] = Const Value(0) + v18:Fixnum = GuardType v1, Fixnum + v23:Fixnum[0] = Const Value(0) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v22:Fixnum[0] = Const Value(0) - Return v22 + v24:Fixnum[0] = Const Value(0) + CheckInterrupts + Return v24 "#]]); } @@ -5710,8 +5818,11 @@ mod opt_tests { v2:Fixnum[1] = Const Value(1) v3:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT) - v8:Fixnum[3] = Const Value(3) - Return v8 + v22:TrueClass = Const Value(true) + CheckInterrupts + v10:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v10 "#]]); } @@ -5732,11 +5843,16 @@ mod opt_tests { v2:Fixnum[1] = Const Value(1) v3:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LE) - v8:Fixnum[2] = Const Value(2) - v9:Fixnum[2] = Const Value(2) + v32:TrueClass = Const Value(true) + CheckInterrupts + v10:Fixnum[2] = Const Value(2) + v11:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LE) - v14:Fixnum[3] = Const Value(3) - Return v14 + v34:TrueClass = Const Value(true) + CheckInterrupts + v18:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v18 "#]]); } @@ -5757,8 +5873,11 @@ mod opt_tests { v2:Fixnum[2] = Const Value(2) v3:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GT) - v8:Fixnum[3] = Const Value(3) - Return v8 + v22:TrueClass = Const Value(true) + CheckInterrupts + v10:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v10 "#]]); } @@ -5779,11 +5898,16 @@ mod opt_tests { v2:Fixnum[2] = Const Value(2) v3:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GE) - v8:Fixnum[2] = Const Value(2) - v9:Fixnum[2] = Const Value(2) + v32:TrueClass = Const Value(true) + CheckInterrupts + v10:Fixnum[2] = Const Value(2) + v11:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GE) - v14:Fixnum[3] = Const Value(3) - Return v14 + v34:TrueClass = Const Value(true) + CheckInterrupts + v18:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v18 "#]]); } @@ -5804,8 +5928,11 @@ mod opt_tests { v2:Fixnum[1] = Const Value(1) v3:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ) - v12:Fixnum[4] = Const Value(4) - Return v12 + v22:FalseClass = Const Value(false) + CheckInterrupts + v16:Fixnum[4] = Const Value(4) + CheckInterrupts + Return v16 "#]]); } @@ -5826,8 +5953,11 @@ mod opt_tests { v2:Fixnum[2] = Const Value(2) v3:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ) - v8:Fixnum[3] = Const Value(3) - Return v8 + v22:TrueClass = Const Value(true) + CheckInterrupts + v10:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v10 "#]]); } @@ -5849,8 +5979,11 @@ mod opt_tests { v3:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_NEQ) - v8:Fixnum[3] = Const Value(3) - Return v8 + v23:TrueClass = Const Value(true) + CheckInterrupts + v10:Fixnum[3] = Const Value(3) + CheckInterrupts + Return v10 "#]]); } @@ -5872,8 +6005,11 @@ mod opt_tests { v3:Fixnum[2] = Const Value(2) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_NEQ) - v12:Fixnum[4] = Const Value(4) - Return v12 + v23:FalseClass = Const Value(false) + CheckInterrupts + v16:Fixnum[4] = Const Value(4) + CheckInterrupts + Return v16 "#]]); } @@ -5890,9 +6026,10 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v8:Fixnum = GuardType v1, Fixnum - v9:Fixnum = FixnumAdd v8, v3 - Return v9 + v10:Fixnum = GuardType v1, Fixnum + v11:Fixnum = FixnumAdd v10, v3 + CheckInterrupts + Return v11 "#]]); } @@ -5909,28 +6046,33 @@ mod opt_tests { assert_optimized_method_hir("rest", expect![[r#" fn rest@<compiled>:2: bb0(v0:BasicObject, v1:ArrayExact): + CheckInterrupts Return v1 "#]]); // extra hidden param for the set of specified keywords assert_optimized_method_hir("kw", expect![[r#" fn kw@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): + CheckInterrupts Return v1 "#]]); assert_optimized_method_hir("kw_rest", expect![[r#" fn kw_rest@<compiled>:4: bb0(v0:BasicObject, v1:BasicObject): + CheckInterrupts Return v1 "#]]); assert_optimized_method_hir("block", expect![[r#" fn block@<compiled>:6: bb0(v0:BasicObject, v1:BasicObject): v3:NilClass = Const Value(nil) + CheckInterrupts Return v3 "#]]); assert_optimized_method_hir("post", expect![[r#" fn post@<compiled>:5: bb0(v0:BasicObject, v1:ArrayExact, v2:BasicObject): + CheckInterrupts Return v2 "#]]); } @@ -5949,9 +6091,10 @@ mod opt_tests { fn test@<compiled>:5: bb0(v0:BasicObject): PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010) - v6:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] - v7:BasicObject = SendWithoutBlockDirect v6, :foo (0x1038) - Return v7 + v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] + v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038) + CheckInterrupts + Return v9 "#]]); } @@ -5970,6 +6113,7 @@ mod opt_tests { fn test@<compiled>:5: bb0(v0:BasicObject): v3:BasicObject = SendWithoutBlock v0, :foo + CheckInterrupts Return v3 "#]]); } @@ -5989,9 +6133,10 @@ mod opt_tests { fn test@<compiled>:6: bb0(v0:BasicObject): PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010) - v6:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] - v7:BasicObject = SendWithoutBlockDirect v6, :foo (0x1038) - Return v7 + v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] + v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038) + CheckInterrupts + Return v9 "#]]); } @@ -6008,9 +6153,10 @@ mod opt_tests { bb0(v0:BasicObject): v2:Fixnum[3] = Const Value(3) PatchPoint MethodRedefined(Object@0x1000, Integer@0x1008, cme:0x1010) - v7:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] - v8:BasicObject = SendWithoutBlockDirect v7, :Integer (0x1038), v2 - Return v8 + v9:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] + v10:BasicObject = SendWithoutBlockDirect v9, :Integer (0x1038), v2 + CheckInterrupts + Return v10 "#]]); } @@ -6030,9 +6176,10 @@ mod opt_tests { v2:Fixnum[1] = Const Value(1) v3:Fixnum[2] = Const Value(2) PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010) - v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] - v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038), v2, v3 - Return v9 + v10:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] + v11:BasicObject = SendWithoutBlockDirect v10, :foo (0x1038), v2, v3 + CheckInterrupts + Return v11 "#]]); } @@ -6053,12 +6200,13 @@ mod opt_tests { fn test@<compiled>:7: bb0(v0:BasicObject): PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010) - v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] - v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038) + v10:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] + v11:BasicObject = SendWithoutBlockDirect v10, :foo (0x1038) PatchPoint MethodRedefined(Object@0x1000, bar@0x1040, cme:0x1048) - v11:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] - v12:BasicObject = SendWithoutBlockDirect v11, :bar (0x1038) - Return v12 + v13:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] + v14:BasicObject = SendWithoutBlockDirect v13, :bar (0x1038) + CheckInterrupts + Return v14 "#]]); } @@ -6077,6 +6225,7 @@ mod opt_tests { fn test@<compiled>:7: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:BasicObject = SendWithoutBlock v1, :+, v2 + CheckInterrupts Return v5 "#]]); } @@ -6091,10 +6240,11 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v8:Fixnum = GuardType v1, Fixnum - v9:Fixnum = GuardType v2, Fixnum - v10:Fixnum = FixnumAdd v8, v9 - Return v10 + v10:Fixnum = GuardType v1, Fixnum + v11:Fixnum = GuardType v2, Fixnum + v12:Fixnum = FixnumAdd v10, v11 + CheckInterrupts + Return v12 "#]]); } @@ -6109,9 +6259,10 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v8:Fixnum = GuardType v1, Fixnum - v9:Fixnum = FixnumAdd v8, v3 - Return v9 + v10:Fixnum = GuardType v1, Fixnum + v11:Fixnum = FixnumAdd v10, v3 + CheckInterrupts + Return v11 "#]]); } @@ -6126,9 +6277,10 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v8:Fixnum = GuardType v1, Fixnum - v9:Fixnum = FixnumAdd v3, v8 - Return v9 + v10:Fixnum = GuardType v1, Fixnum + v11:Fixnum = FixnumAdd v3, v10 + CheckInterrupts + Return v11 "#]]); } @@ -6142,10 +6294,11 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT) - v8:Fixnum = GuardType v1, Fixnum - v9:Fixnum = GuardType v2, Fixnum - v10:BoolExact = FixnumLt v8, v9 - Return v10 + v10:Fixnum = GuardType v1, Fixnum + v11:Fixnum = GuardType v2, Fixnum + v12:BoolExact = FixnumLt v10, v11 + CheckInterrupts + Return v12 "#]]); } @@ -6160,9 +6313,10 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT) - v8:Fixnum = GuardType v1, Fixnum - v9:BoolExact = FixnumLt v8, v3 - Return v9 + v10:Fixnum = GuardType v1, Fixnum + v11:BoolExact = FixnumLt v10, v3 + CheckInterrupts + Return v11 "#]]); } @@ -6177,9 +6331,10 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT) - v8:Fixnum = GuardType v1, Fixnum - v9:BoolExact = FixnumLt v3, v8 - Return v9 + v10:Fixnum = GuardType v1, Fixnum + v11:BoolExact = FixnumLt v3, v10 + CheckInterrupts + Return v11 "#]]); } @@ -6195,7 +6350,10 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): + v1:NilClass = Const Value(nil) + v4:ArrayExact = NewArray v5:Fixnum[5] = Const Value(5) + CheckInterrupts Return v5 "#]]); } @@ -6212,7 +6370,9 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): + v3:RangeExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:Fixnum[5] = Const Value(5) + CheckInterrupts Return v4 "#]]); } @@ -6236,6 +6396,7 @@ mod opt_tests { v8:StringExact = StringCopy v6 v10:RangeExact = NewRange v4 NewRangeInclusive v8 v11:Fixnum[0] = Const Value(0) + CheckInterrupts Return v11 "#]]); } @@ -6252,7 +6413,10 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject): + v2:NilClass = Const Value(nil) + v5:ArrayExact = NewArray v1 v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6268,7 +6432,10 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): + v1:NilClass = Const Value(nil) + v4:HashExact = NewHash v5:Fixnum[5] = Const Value(5) + CheckInterrupts Return v5 "#]]); } @@ -6289,6 +6456,7 @@ mod opt_tests { v6:StaticSymbol[:b] = Const Value(VALUE(0x1008)) v8:HashExact = NewHash v5: v1, v6: v2 v9:Fixnum[5] = Const Value(5) + CheckInterrupts Return v9 "#]]); } @@ -6305,7 +6473,11 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): + v1:NilClass = Const Value(nil) + v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) + v5:ArrayExact = ArrayDup v3 v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6321,7 +6493,11 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): + v1:NilClass = Const Value(nil) + v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) + v5:HashExact = HashDup v3 v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6339,6 +6515,7 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject): v3:Fixnum[5] = Const Value(5) + CheckInterrupts Return v3 "#]]); } @@ -6355,7 +6532,11 @@ mod opt_tests { assert_optimized_method_hir("test", expect![[r#" fn test@<compiled>:3: bb0(v0:BasicObject): + v1:NilClass = Const Value(nil) + v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) + v5:StringExact = StringCopy v3 v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6373,9 +6554,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6393,9 +6575,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MINUS) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6413,9 +6596,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MULT) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6433,10 +6617,11 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_DIV) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum - v11:Fixnum = FixnumDiv v9, v10 + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum + v13:Fixnum = FixnumDiv v11, v12 v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6454,10 +6639,11 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_MOD) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum - v11:Fixnum = FixnumMod v9, v10 + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum + v13:Fixnum = FixnumMod v11, v12 v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6475,9 +6661,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LT) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6495,9 +6682,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_LE) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6515,9 +6703,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GT) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6535,9 +6724,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_GE) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6555,9 +6745,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ) - v9:Fixnum = GuardType v1, Fixnum - v10:Fixnum = GuardType v2, Fixnum + v11:Fixnum = GuardType v1, Fixnum + v12:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6576,9 +6767,10 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_EQ) PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_NEQ) - v10:Fixnum = GuardType v1, Fixnum - v11:Fixnum = GuardType v2, Fixnum + v12:Fixnum = GuardType v1, Fixnum + v13:Fixnum = GuardType v2, Fixnum v6:Fixnum[5] = Const Value(5) + CheckInterrupts Return v6 "#]]); } @@ -6596,6 +6788,7 @@ mod opt_tests { bb0(v0:BasicObject): v3:BasicObject = GetConstantPath 0x1000 v4:Fixnum[5] = Const Value(5) + CheckInterrupts Return v4 "#]]); } @@ -6611,9 +6804,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(Integer@0x1000, itself@0x1008, cme:0x1010) - v7:Fixnum = GuardType v1, Fixnum - v8:BasicObject = CCall itself@0x1038, v7 - Return v8 + v9:Fixnum = GuardType v1, Fixnum + v10:BasicObject = CCall itself@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -6627,8 +6821,9 @@ mod opt_tests { bb0(v0:BasicObject): v3:ArrayExact = NewArray PatchPoint MethodRedefined(Array@0x1000, itself@0x1008, cme:0x1010) - v8:BasicObject = CCall itself@0x1038, v3 - Return v8 + v10:BasicObject = CCall itself@0x1038, v3 + CheckInterrupts + Return v10 "#]]); } @@ -6646,7 +6841,9 @@ mod opt_tests { v1:NilClass = Const Value(nil) v4:ArrayExact = NewArray PatchPoint MethodRedefined(Array@0x1000, itself@0x1008, cme:0x1010) + v12:BasicObject = CCall itself@0x1038, v4 v7:Fixnum[1] = Const Value(1) + CheckInterrupts Return v7 "#]]); } @@ -6667,9 +6864,11 @@ mod opt_tests { v1:NilClass = Const Value(nil) PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, M) - v11:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v13:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(Module@0x1010, name@0x1018, cme:0x1020) + v15:StringExact|NilClass = CCall name@0x1048, v13 v7:Fixnum[1] = Const Value(1) + CheckInterrupts Return v7 "#]]); } @@ -6688,7 +6887,9 @@ mod opt_tests { v1:NilClass = Const Value(nil) v4:ArrayExact = NewArray PatchPoint MethodRedefined(Array@0x1000, length@0x1008, cme:0x1010) + v12:Fixnum = CCall length@0x1038, v4 v7:Fixnum[5] = Const Value(5) + CheckInterrupts Return v7 "#]]); } @@ -6705,8 +6906,9 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, C) - v7:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) - Return v7 + v9:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + CheckInterrupts + Return v9 "#]]); } @@ -6721,17 +6923,18 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, String) - v15:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v17:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1010, Class) - v18:Class[VALUE(0x1018)] = Const Value(VALUE(0x1018)) + v20:Class[VALUE(0x1018)] = Const Value(VALUE(0x1018)) PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1020, Module) - v21:Class[VALUE(0x1028)] = Const Value(VALUE(0x1028)) + v23:Class[VALUE(0x1028)] = Const Value(VALUE(0x1028)) PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1030, BasicObject) - v24:Class[VALUE(0x1038)] = Const Value(VALUE(0x1038)) - v11:ArrayExact = NewArray v15, v18, v21, v24 + v26:Class[VALUE(0x1038)] = Const Value(VALUE(0x1038)) + v11:ArrayExact = NewArray v17, v20, v23, v26 + CheckInterrupts Return v11 "#]]); } @@ -6747,11 +6950,12 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, Enumerable) - v11:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v13:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1010, Kernel) - v14:ModuleExact[VALUE(0x1018)] = Const Value(VALUE(0x1018)) - v7:ArrayExact = NewArray v11, v14 + v16:ModuleExact[VALUE(0x1018)] = Const Value(VALUE(0x1018)) + v7:ArrayExact = NewArray v13, v16 + CheckInterrupts Return v7 "#]]); } @@ -6769,8 +6973,9 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, MY_MODULE) - v7:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) - Return v7 + v9:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + CheckInterrupts + Return v9 "#]]); } @@ -6788,7 +6993,9 @@ mod opt_tests { v1:NilClass = Const Value(nil) v4:ArrayExact = NewArray PatchPoint MethodRedefined(Array@0x1000, size@0x1008, cme:0x1010) + v12:Fixnum = CCall size@0x1038, v4 v7:Fixnum[5] = Const Value(5) + CheckInterrupts Return v7 "#]]); } @@ -6807,6 +7014,7 @@ mod opt_tests { v2:Fixnum[1] = Const Value(1) v3:Fixnum[0] = Const Value(0) v5:BasicObject = SendWithoutBlock v2, :itself, v3 + CheckInterrupts Return v5 "#]]); } @@ -6821,8 +7029,9 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject): v3:Fixnum[1] = Const Value(1) PatchPoint MethodRedefined(Integer@0x1000, zero?@0x1008, cme:0x1010) - v8:BasicObject = SendWithoutBlockDirect v3, :zero? (0x1038) - Return v8 + v10:BasicObject = SendWithoutBlockDirect v3, :zero? (0x1038) + CheckInterrupts + Return v10 "#]]); } @@ -6841,8 +7050,9 @@ mod opt_tests { v4:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v6:ArrayExact = ArrayDup v4 PatchPoint MethodRedefined(Array@0x1008, first@0x1010, cme:0x1018) - v11:BasicObject = SendWithoutBlockDirect v6, :first (0x1040) - Return v11 + v13:BasicObject = SendWithoutBlockDirect v6, :first (0x1040) + CheckInterrupts + Return v13 "#]]); } @@ -6859,10 +7069,11 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, M) - v9:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v11:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(Module@0x1010, class@0x1018, cme:0x1020) - v11:BasicObject = SendWithoutBlockDirect v9, :class (0x1048) - Return v11 + v13:BasicObject = SendWithoutBlockDirect v11, :class (0x1048) + CheckInterrupts + Return v13 "#]]); } @@ -6885,9 +7096,10 @@ mod opt_tests { fn test@<compiled>:8: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010) - v7:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C] - v8:BasicObject = SendWithoutBlockDirect v7, :foo (0x1038) - Return v8 + v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C] + v10:BasicObject = SendWithoutBlockDirect v9, :foo (0x1038) + CheckInterrupts + Return v10 "#]]); } @@ -6904,6 +7116,7 @@ mod opt_tests { bb0(v0:BasicObject): v2:Fixnum[1] = Const Value(1) v4:BasicObject = SendWithoutBlock v0, :foo, v2 + CheckInterrupts Return v4 "#]]); } @@ -6920,6 +7133,7 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject): v3:BasicObject = Send v0, 0x1000, :foo + CheckInterrupts Return v3 "#]]); } @@ -6937,6 +7151,7 @@ mod opt_tests { bb0(v0:BasicObject): v2:Fixnum[1] = Const Value(1) v4:BasicObject = SendWithoutBlock v0, :foo, v2 + CheckInterrupts Return v4 "#]]); } @@ -6986,8 +7201,9 @@ mod opt_tests { v2:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:StringExact = StringCopy v2 PatchPoint MethodRedefined(String@0x1008, bytesize@0x1010, cme:0x1018) - v9:Fixnum = CCall bytesize@0x1040, v4 - Return v9 + v11:Fixnum = CCall bytesize@0x1040, v4 + CheckInterrupts + Return v11 "#]]); } @@ -7000,6 +7216,7 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject): v3:BasicObject = GetConstantPath 0x1000 + CheckInterrupts Return v3 "#]]); } @@ -7015,6 +7232,7 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject): v3:BasicObject = GetConstantPath 0x1000 + CheckInterrupts Return v3 "#]]); } @@ -7030,8 +7248,9 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, Kernel) - v7:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) - Return v7 + v9:ModuleExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + CheckInterrupts + Return v9 "#]]); } @@ -7052,8 +7271,9 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, Foo::Bar::C) - v7:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) - Return v7 + v9:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + CheckInterrupts + Return v9 "#]]); } @@ -7069,10 +7289,12 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, C) - v20:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v24:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) v4:NilClass = Const Value(nil) - v11:BasicObject = SendWithoutBlock v20, :new - Return v11 + CheckInterrupts + v13:BasicObject = SendWithoutBlock v24, :new + CheckInterrupts + Return v13 "#]]); } @@ -7092,11 +7314,13 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, C) - v22:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v26:Class[VALUE(0x1008)] = Const Value(VALUE(0x1008)) v4:NilClass = Const Value(nil) v5:Fixnum[1] = Const Value(1) - v13:BasicObject = SendWithoutBlock v22, :new, v5 - Return v13 + CheckInterrupts + v15:BasicObject = SendWithoutBlock v26, :new, v5 + CheckInterrupts + Return v15 "#]]); } @@ -7110,8 +7334,9 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:ArrayExact = NewArray v1, v2 PatchPoint MethodRedefined(Array@0x1000, length@0x1008, cme:0x1010) - v10:Fixnum = CCall length@0x1038, v5 - Return v10 + v12:Fixnum = CCall length@0x1038, v5 + CheckInterrupts + Return v12 "#]]); } @@ -7125,8 +7350,9 @@ mod opt_tests { bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): v5:ArrayExact = NewArray v1, v2 PatchPoint MethodRedefined(Array@0x1000, size@0x1008, cme:0x1010) - v10:Fixnum = CCall size@0x1038, v5 - Return v10 + v12:Fixnum = CCall size@0x1038, v5 + CheckInterrupts + Return v12 "#]]); } @@ -7139,6 +7365,7 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject): v3:BasicObject = GetIvar v0, :@foo + CheckInterrupts Return v3 "#]]); } @@ -7153,6 +7380,7 @@ mod opt_tests { bb0(v0:BasicObject): v2:Fixnum[1] = Const Value(1) SetIvar v0, :@foo, v2 + CheckInterrupts Return v2 "#]]); } @@ -7167,6 +7395,7 @@ mod opt_tests { bb0(v0:BasicObject): v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(HASH_REDEFINED_OP_FLAG, BOP_FREEZE) + CheckInterrupts Return v3 "#]]); } @@ -7184,6 +7413,7 @@ mod opt_tests { bb0(v0:BasicObject): v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:BasicObject = SendWithoutBlock v3, :freeze + CheckInterrupts Return v4 "#]]); } @@ -7199,6 +7429,7 @@ mod opt_tests { v3:HashExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(HASH_REDEFINED_OP_FLAG, BOP_FREEZE) PatchPoint BOPRedefined(HASH_REDEFINED_OP_FLAG, BOP_FREEZE) + CheckInterrupts Return v3 "#]]); } @@ -7214,6 +7445,7 @@ mod opt_tests { v3:HashExact = NewHash v5:BasicObject = SendWithoutBlock v3, :dup v7:BasicObject = SendWithoutBlock v5, :freeze + CheckInterrupts Return v7 "#]]); } @@ -7229,6 +7461,7 @@ mod opt_tests { v3:HashExact = NewHash v4:NilClass = Const Value(nil) v6:BasicObject = SendWithoutBlock v3, :freeze, v4 + CheckInterrupts Return v6 "#]]); } @@ -7243,6 +7476,7 @@ mod opt_tests { bb0(v0:BasicObject): v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) + CheckInterrupts Return v3 "#]]); } @@ -7258,6 +7492,7 @@ mod opt_tests { v3:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) + CheckInterrupts Return v3 "#]]); } @@ -7273,6 +7508,7 @@ mod opt_tests { v3:ArrayExact = NewArray v5:BasicObject = SendWithoutBlock v3, :dup v7:BasicObject = SendWithoutBlock v5, :freeze + CheckInterrupts Return v7 "#]]); } @@ -7288,6 +7524,7 @@ mod opt_tests { v3:ArrayExact = NewArray v4:NilClass = Const Value(nil) v6:BasicObject = SendWithoutBlock v3, :freeze, v4 + CheckInterrupts Return v6 "#]]); } @@ -7302,6 +7539,7 @@ mod opt_tests { bb0(v0:BasicObject): v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE) + CheckInterrupts Return v3 "#]]); } @@ -7317,6 +7555,7 @@ mod opt_tests { v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE) PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE) + CheckInterrupts Return v3 "#]]); } @@ -7333,6 +7572,7 @@ mod opt_tests { v4:StringExact = StringCopy v2 v6:BasicObject = SendWithoutBlock v4, :dup v8:BasicObject = SendWithoutBlock v6, :freeze + CheckInterrupts Return v8 "#]]); } @@ -7349,6 +7589,7 @@ mod opt_tests { v4:StringExact = StringCopy v2 v5:NilClass = Const Value(nil) v7:BasicObject = SendWithoutBlock v4, :freeze, v5 + CheckInterrupts Return v7 "#]]); } @@ -7363,6 +7604,7 @@ mod opt_tests { bb0(v0:BasicObject): v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_UMINUS) + CheckInterrupts Return v3 "#]]); } @@ -7378,6 +7620,7 @@ mod opt_tests { v3:StringExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_FREEZE) PatchPoint BOPRedefined(STRING_REDEFINED_OP_FLAG, BOP_UMINUS) + CheckInterrupts Return v3 "#]]); } @@ -7394,6 +7637,7 @@ mod opt_tests { v4:StringExact = StringCopy v2 v6:BasicObject = SendWithoutBlock v4, :dup v8:BasicObject = SendWithoutBlock v6, :-@ + CheckInterrupts Return v8 "#]]); } @@ -7410,6 +7654,7 @@ mod opt_tests { v3:StringExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) v5:StringExact = StringCopy v3 v11:StringExact = StringConcat v2, v5 + CheckInterrupts Return v11 "#]]); } @@ -7427,6 +7672,7 @@ mod opt_tests { v5:BasicObject = ObjToString v3 v7:String = AnyToString v3, str: v5 v9:StringExact = StringConcat v2, v7 + CheckInterrupts Return v9 "#]]); } @@ -7444,6 +7690,8 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject): v3:NilClass = Const Value(nil) + CheckInterrupts + CheckInterrupts Return v3 "#]]); } @@ -7461,9 +7709,11 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject): v3:Fixnum[1] = Const Value(1) + CheckInterrupts PatchPoint MethodRedefined(Integer@0x1000, itself@0x1008, cme:0x1010) - v15:BasicObject = CCall itself@0x1038, v3 - Return v15 + v19:BasicObject = CCall itself@0x1038, v3 + CheckInterrupts + Return v19 "#]]); } @@ -7479,8 +7729,9 @@ mod opt_tests { PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) v5:Fixnum[1] = Const Value(1) PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF) - v11:Fixnum[5] = Const Value(5) - Return v11 + v13:Fixnum[5] = Const Value(5) + CheckInterrupts + Return v13 "#]]); } @@ -7496,8 +7747,9 @@ mod opt_tests { PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) v5:Fixnum[-3] = Const Value(-3) PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF) - v11:Fixnum[4] = Const Value(4) - Return v11 + v13:Fixnum[4] = Const Value(4) + CheckInterrupts + Return v13 "#]]); } @@ -7513,8 +7765,9 @@ mod opt_tests { PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) v5:Fixnum[-10] = Const Value(-10) PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF) - v11:NilClass = Const Value(nil) - Return v11 + v13:NilClass = Const Value(nil) + CheckInterrupts + Return v13 "#]]); } @@ -7530,8 +7783,9 @@ mod opt_tests { PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) v5:Fixnum[10] = Const Value(10) PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_AREF) - v11:NilClass = Const Value(nil) - Return v11 + v13:NilClass = Const Value(nil) + CheckInterrupts + Return v13 "#]]); } @@ -7550,6 +7804,7 @@ mod opt_tests { PatchPoint BOPRedefined(ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) v5:Fixnum[10] = Const Value(10) v7:BasicObject = SendWithoutBlock v3, :[], v5 + CheckInterrupts Return v7 "#]]); } @@ -7568,8 +7823,9 @@ mod opt_tests { v2:ArrayExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) v4:ArrayExact = ArrayDup v2 PatchPoint MethodRedefined(Array@0x1008, max@0x1010, cme:0x1018) - v9:BasicObject = SendWithoutBlockDirect v4, :max (0x1040) - Return v9 + v11:BasicObject = SendWithoutBlockDirect v4, :max (0x1040) + CheckInterrupts + Return v11 "#]]); } @@ -7588,8 +7844,9 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, MY_SET) - v7:SetExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) - Return v7 + v9:SetExact[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + CheckInterrupts + Return v9 "#]]); } @@ -7602,6 +7859,7 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject): v2:RegexpExact[VALUE(0x1000)] = Const Value(VALUE(0x1000)) + CheckInterrupts Return v2 "#]]); } @@ -7616,8 +7874,9 @@ mod opt_tests { bb0(v0:BasicObject): v2:NilClass = Const Value(nil) PatchPoint MethodRedefined(NilClass@0x1000, nil?@0x1008, cme:0x1010) - v7:TrueClass = CCall nil?@0x1038, v2 - Return v7 + v9:TrueClass = CCall nil?@0x1038, v2 + CheckInterrupts + Return v9 "#]]); } @@ -7635,6 +7894,7 @@ mod opt_tests { v2:NilClass = Const Value(nil) PatchPoint MethodRedefined(NilClass@0x1000, nil?@0x1008, cme:0x1010) v5:Fixnum[1] = Const Value(1) + CheckInterrupts Return v5 "#]]); } @@ -7649,8 +7909,9 @@ mod opt_tests { bb0(v0:BasicObject): v2:Fixnum[1] = Const Value(1) PatchPoint MethodRedefined(Integer@0x1000, nil?@0x1008, cme:0x1010) - v7:FalseClass = CCall nil?@0x1038, v2 - Return v7 + v9:FalseClass = CCall nil?@0x1038, v2 + CheckInterrupts + Return v9 "#]]); } @@ -7668,6 +7929,7 @@ mod opt_tests { v2:Fixnum[1] = Const Value(1) PatchPoint MethodRedefined(Integer@0x1000, nil?@0x1008, cme:0x1010) v5:Fixnum[2] = Const Value(2) + CheckInterrupts Return v5 "#]]); } @@ -7683,9 +7945,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(NilClass@0x1000, nil?@0x1008, cme:0x1010) - v7:NilClass = GuardType v1, NilClass - v8:TrueClass = CCall nil?@0x1038, v7 - Return v8 + v9:NilClass = GuardType v1, NilClass + v10:TrueClass = CCall nil?@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -7700,9 +7963,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(FalseClass@0x1000, nil?@0x1008, cme:0x1010) - v7:FalseClass = GuardType v1, FalseClass - v8:FalseClass = CCall nil?@0x1038, v7 - Return v8 + v9:FalseClass = GuardType v1, FalseClass + v10:FalseClass = CCall nil?@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -7717,9 +7981,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(TrueClass@0x1000, nil?@0x1008, cme:0x1010) - v7:TrueClass = GuardType v1, TrueClass - v8:FalseClass = CCall nil?@0x1038, v7 - Return v8 + v9:TrueClass = GuardType v1, TrueClass + v10:FalseClass = CCall nil?@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -7734,9 +7999,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(Symbol@0x1000, nil?@0x1008, cme:0x1010) - v7:StaticSymbol = GuardType v1, StaticSymbol - v8:FalseClass = CCall nil?@0x1038, v7 - Return v8 + v9:StaticSymbol = GuardType v1, StaticSymbol + v10:FalseClass = CCall nil?@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -7751,9 +8017,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(Integer@0x1000, nil?@0x1008, cme:0x1010) - v7:Fixnum = GuardType v1, Fixnum - v8:FalseClass = CCall nil?@0x1038, v7 - Return v8 + v9:Fixnum = GuardType v1, Fixnum + v10:FalseClass = CCall nil?@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -7768,9 +8035,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(Float@0x1000, nil?@0x1008, cme:0x1010) - v7:Flonum = GuardType v1, Flonum - v8:FalseClass = CCall nil?@0x1038, v7 - Return v8 + v9:Flonum = GuardType v1, Flonum + v10:FalseClass = CCall nil?@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -7785,9 +8053,10 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(String@0x1000, nil?@0x1008, cme:0x1010) - v7:StringExact = GuardType v1, StringExact - v8:FalseClass = CCall nil?@0x1038, v7 - Return v8 + v9:StringExact = GuardType v1, StringExact + v10:FalseClass = CCall nil?@0x1038, v9 + CheckInterrupts + Return v10 "#]]); } @@ -7802,10 +8071,11 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 28) - v8:Fixnum = GuardType v1, Fixnum - v9:Fixnum = GuardType v2, Fixnum - v10:Fixnum = FixnumAnd v8, v9 - Return v10 + v10:Fixnum = GuardType v1, Fixnum + v11:Fixnum = GuardType v2, Fixnum + v12:Fixnum = FixnumAnd v10, v11 + CheckInterrupts + Return v12 "#]]); } @@ -7820,10 +8090,11 @@ mod opt_tests { fn test@<compiled>:2: bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject): PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, 29) - v8:Fixnum = GuardType v1, Fixnum - v9:Fixnum = GuardType v2, Fixnum - v10:Fixnum = FixnumOr v8, v9 - Return v10 + v10:Fixnum = GuardType v1, Fixnum + v11:Fixnum = GuardType v2, Fixnum + v12:Fixnum = FixnumOr v10, v11 + CheckInterrupts + Return v12 "#]]); } @@ -7840,9 +8111,10 @@ mod opt_tests { fn test@<compiled>:3: bb0(v0:BasicObject): PatchPoint MethodRedefined(Object@0x1000, foo@0x1008, cme:0x1010) - v6:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] - v7:BasicObject = SendWithoutBlockDirect v6, :foo (0x1038) - Return v7 + v8:HeapObject[class_exact*:Object@VALUE(0x1000)] = GuardType v0, HeapObject[class_exact*:Object@VALUE(0x1000)] + v9:BasicObject = SendWithoutBlockDirect v8, :foo (0x1038) + CheckInterrupts + Return v9 "#]]); } @@ -7863,10 +8135,11 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, O) - v9:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v11:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(C@0x1010, foo@0x1018, cme:0x1020) - v11:BasicObject = GetIvar v9, :@foo - Return v11 + v13:BasicObject = GetIvar v11, :@foo + CheckInterrupts + Return v13 "#]]); } @@ -7887,10 +8160,11 @@ mod opt_tests { bb0(v0:BasicObject): PatchPoint SingleRactorMode PatchPoint StableConstantNames(0x1000, O) - v9:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) + v11:BasicObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(C@0x1010, foo@0x1018, cme:0x1020) - v11:BasicObject = GetIvar v9, :@foo - Return v11 + v13:BasicObject = GetIvar v11, :@foo + CheckInterrupts + Return v13 "#]]); } @@ -7909,9 +8183,10 @@ mod opt_tests { fn test@<compiled>:6: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010) - v7:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C] - v8:BasicObject = GetIvar v7, :@foo - Return v8 + v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C] + v10:BasicObject = GetIvar v9, :@foo + CheckInterrupts + Return v10 "#]]); } @@ -7930,9 +8205,10 @@ mod opt_tests { fn test@<compiled>:6: bb0(v0:BasicObject, v1:BasicObject): PatchPoint MethodRedefined(C@0x1000, foo@0x1008, cme:0x1010) - v7:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C] - v8:BasicObject = GetIvar v7, :@foo - Return v8 + v9:HeapObject[class_exact:C] = GuardType v1, HeapObject[class_exact:C] + v10:BasicObject = GetIvar v9, :@foo + CheckInterrupts + Return v10 "#]]); } } |
