[pypy-commit] pypy jitframe-on-heap: another stress test
fijal
noreply at buildbot.pypy.org
Wed Jan 23 20:12:09 CET 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: jitframe-on-heap
Changeset: r60386:8d265133ef42
Date: 2013-01-23 21:11 +0200
http://bitbucket.org/pypy/pypy/changeset/8d265133ef42/
Log: another stress test
diff --git a/rpython/jit/backend/x86/test/test_regalloc2.py b/rpython/jit/backend/x86/test/test_regalloc2.py
--- a/rpython/jit/backend/x86/test/test_regalloc2.py
+++ b/rpython/jit/backend/x86/test/test_regalloc2.py
@@ -306,7 +306,7 @@
EffectInfo.MOST_GENERAL)
return rffi.cast(lltype.Signed, fptr), calldescr
-def getexception(cpu, ARGS):
+def getexception(cpu, count):
xtp = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
xtp.subclassrange_min = 1
xtp.subclassrange_max = 3
@@ -318,10 +318,16 @@
def f(*args):
raise LLException(vtableptr, xptr)
- fptr, funcdescr = getllhelper(cpu, f, ARGS, lltype.Void)
+ fptr, funcdescr = getllhelper(cpu, f, [lltype.Signed] * count, lltype.Void)
return heaptracker.adr2int(llmemory.cast_ptr_to_adr(vtableptr)), fptr, funcdescr
+def getnoexception(cpu, count):
+ def f(*args):
+ return sum(args)
+
+ return getllhelper(cpu, f, [lltype.Signed] * count, lltype.Signed)
+
def getvtable(cpu, S=None):
cls1 = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
cls1.subclassrange_min = 1
@@ -333,3 +339,282 @@
cpu.tracker._all_size_descrs_with_vtable.append(descr)
descr._corresponding_vtable = cls1
return llmemory.cast_adr_to_int(llmemory.cast_ptr_to_adr(cls1), "symbolic")
+
+def test_bug_2():
+ cpu = CPU(None, None)
+ cpu.setup_once()
+
+ for i in range(1000):
+ S4 = lltype.Struct('Sx', ("f0", lltype.Char), ("f1", lltype.Signed), ("f2", lltype.Signed), ("f3", lltype.Signed))
+ S5 = lltype.GcArray(S4)
+ v1 = BoxInt()
+ v2 = BoxInt()
+ v3 = BoxInt()
+ v4 = BoxInt()
+ v5 = BoxInt()
+ v6 = BoxInt()
+ v7 = BoxInt()
+ v8 = BoxInt()
+ v9 = BoxInt()
+ v10 = BoxInt()
+ tmp11 = BoxInt()
+ tmp12 = BoxPtr()
+ faildescr0 = BasicFailDescr()
+ tmp13 = BoxPtr()
+ faildescr1 = BasicFailDescr()
+ finishdescr2 = BasicFinalDescr()
+ const_ptr14 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.STR, 1)))
+ const_ptr15 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.UNICODE, 489)))
+ const_ptr16 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.UNICODE, 16)))
+ const_ptr17 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S5, 299)))
+ inputargs = [v1, v2, v3, v4, v5, v6, v7, v8, v9, v10]
+
+ xtp, func, funcdescr = getexception(cpu, 3)
+ xtp2, func2, func2descr = getexception(cpu, 2)
+
+ operations = [
+ ResOperation(rop.STRGETITEM, [const_ptr14, ConstInt(0)], tmp11),
+ ResOperation(rop.LABEL, [v1, v2, tmp11, v3, v4, v5, v6, v7, v8, v9, v10], None, TargetToken()),
+ ResOperation(rop.UNICODESETITEM, [const_ptr15, v4, ConstInt(22)], None),
+ ResOperation(rop.CALL, [ConstInt(func), v2, v1, v9], None, descr=funcdescr),
+ ResOperation(rop.GUARD_EXCEPTION, [ConstInt(xtp)], tmp12, descr=faildescr0),
+ ResOperation(rop.UNICODESETITEM, [const_ptr16, ConstInt(13), ConstInt(9)], None),
+ ResOperation(rop.SETINTERIORFIELD_GC, [const_ptr17, v3, v7], None, cpu.interiorfielddescrof(S5, 'f3')),
+ ResOperation(rop.CALL, [ConstInt(func2), v7, v10], None, descr=func2descr),
+ ResOperation(rop.GUARD_NO_EXCEPTION, [], tmp13, descr=faildescr1),
+ ResOperation(rop.FINISH, [], None, descr=finishdescr2),
+ ]
+ operations[4].setfailargs([v4, v8, v10, v2, v9, v7, v6, v1])
+ operations[8].setfailargs([v3, v9, v2, v6, v4])
+ looptoken = JitCellToken()
+ cpu.compile_loop(inputargs, operations, looptoken)
+ loop_args = [1, -39, 46, 21, 16, 6, -4611686018427387905, 12, 14, 2]
+ frame = cpu.execute_token(looptoken, *loop_args)
+ assert cpu.get_int_value(frame, 0) == 46
+ assert cpu.get_int_value(frame, 1) == 14
+ assert cpu.get_int_value(frame, 2) == -39
+ assert cpu.get_int_value(frame, 3) == 6
+ assert cpu.get_int_value(frame, 4) == 21
+ S4 = lltype.GcStruct('Sx', ("parent", rclass.OBJECT), ("f0", lltype.Signed))
+ S5 = lltype.GcStruct('Sx', ("f0", lltype.Signed))
+ S6 = lltype.GcArray(lltype.Signed)
+ S7 = lltype.GcStruct('Sx', ("parent", rclass.OBJECT), ("f0", lltype.Char))
+ S8 = lltype.Struct('Sx', ("f0", lltype.Char), ("f1", lltype.Signed), ("f2", lltype.Signed), ("f3", lltype.Signed))
+ S9 = lltype.GcArray(S8)
+ v1 = BoxInt()
+ v2 = BoxInt()
+ v3 = BoxInt()
+ v4 = BoxInt()
+ v5 = BoxInt()
+ v6 = BoxInt()
+ v7 = BoxInt()
+ v8 = BoxInt()
+ v9 = BoxInt()
+ v10 = BoxInt()
+ v11 = BoxInt()
+ v12 = BoxInt()
+ v13 = BoxInt()
+ v14 = BoxInt()
+ v15 = BoxInt()
+ v16 = BoxInt()
+ v17 = BoxInt()
+ v18 = BoxInt()
+ v19 = BoxInt()
+ p20 = BoxPtr()
+ tmp21 = BoxPtr()
+ faildescr3 = BasicFailDescr()
+ tmp22 = BoxPtr()
+ faildescr4 = BasicFailDescr()
+ tmp23 = BoxInt()
+ tmp24 = BoxInt()
+ tmp25 = BoxInt()
+ tmp26 = BoxInt()
+ tmp27 = BoxInt()
+ tmp28 = BoxInt()
+ tmp29 = BoxInt()
+ faildescr5 = BasicFailDescr()
+ tmp30 = BoxPtr()
+ faildescr6 = BasicFailDescr()
+ finishdescr7 = BasicFinalDescr()
+ const_ptr31 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S4)))
+ const_ptr32 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.STR, 46)))
+ const_ptr33 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S5)))
+ const_ptr34 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.UNICODE, 26)))
+ const_ptr35 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.UNICODE, 15)))
+ const_ptr36 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S7)))
+ const_ptr37 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.STR, 484)))
+ const_ptr38 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S9, 299)))
+ inputargs = [v1, v2, v3, v4, v5]
+
+ func3, func3descr = getnoexception(cpu, 5)
+ xtp3, func4, func4descr = getexception(cpu, 10)
+
+ operations = [
+ ResOperation(rop.GUARD_EXCEPTION, [ConstInt(xtp2)], tmp21, descr=faildescr3),
+ ResOperation(rop.INT_IS_ZERO, [v4], v6),
+ ResOperation(rop.INT_NE, [v6, ConstInt(13)], v7),
+ ResOperation(rop.GETFIELD_GC, [const_ptr31], v8, cpu.fielddescrof(S4, 'f0')),
+ ResOperation(rop.STRSETITEM, [const_ptr32, v6, ConstInt(0)], None),
+ ResOperation(rop.NEWSTR, [ConstInt(5)], tmp22),
+ ResOperation(rop.STRSETITEM, [tmp22, ConstInt(0), ConstInt(42)], None),
+ ResOperation(rop.STRSETITEM, [tmp22, ConstInt(1), ConstInt(42)], None),
+ ResOperation(rop.STRSETITEM, [tmp22, ConstInt(2), ConstInt(20)], None),
+ ResOperation(rop.STRSETITEM, [tmp22, ConstInt(3), ConstInt(48)], None),
+ ResOperation(rop.STRSETITEM, [tmp22, ConstInt(4), ConstInt(6)], None),
+ ResOperation(rop.GETFIELD_GC, [const_ptr33], v9, cpu.fielddescrof(S5, 'f0')),
+ ResOperation(rop.UNICODESETITEM, [const_ptr34, ConstInt(24), ConstInt(65533)], None),
+ ResOperation(rop.GETFIELD_GC, [const_ptr31], v10, cpu.fielddescrof(S4, 'f0')),
+ ResOperation(rop.INT_NE, [v10, ConstInt(25)], v11),
+ ResOperation(rop.CALL, [ConstInt(func3), v5, v1, v8, v3, v2], v12, descr=func3descr),
+ ResOperation(rop.GUARD_NO_EXCEPTION, [], None, descr=faildescr4),
+ ResOperation(rop.UNICODELEN, [const_ptr35], tmp23),
+ ResOperation(rop.NEW_ARRAY, [v2], p20, cpu.arraydescrof(S6)),
+ ResOperation(rop.GETFIELD_GC, [const_ptr36], v13, cpu.fielddescrof(S7, 'f0')),
+ ResOperation(rop.INT_OR, [v8, ConstInt(2)], tmp24),
+ ResOperation(rop.INT_FLOORDIV, [ConstInt(8), tmp24], v14),
+ ResOperation(rop.GETARRAYITEM_GC, [p20, ConstInt(3)], v15, cpu.arraydescrof(S6)),
+ ResOperation(rop.COPYSTRCONTENT, [tmp22, const_ptr37, ConstInt(1), ConstInt(163), ConstInt(0)], None),
+ ResOperation(rop.COPYUNICODECONTENT, [const_ptr35, const_ptr34, ConstInt(13), ConstInt(0), v6], None),
+ ResOperation(rop.STRGETITEM, [tmp22, v6], tmp25),
+ ResOperation(rop.STRGETITEM, [tmp22, ConstInt(0)], tmp26),
+ ResOperation(rop.GETINTERIORFIELD_GC, [const_ptr38, v13], v16, cpu.interiorfielddescrof(S9, 'f0')),
+ ResOperation(rop.INT_GE, [v4, v5], v17),
+ ResOperation(rop.INT_OR, [v13, ConstInt(2)], tmp27),
+ ResOperation(rop.INT_FLOORDIV, [ConstInt(12), tmp27], v18),
+ ResOperation(rop.INT_AND, [v1, ConstInt(-4)], tmp28),
+ ResOperation(rop.INT_OR, [tmp28, ConstInt(2)], tmp29),
+ ResOperation(rop.INT_FLOORDIV, [v15, tmp29], v19),
+ ResOperation(rop.GUARD_FALSE, [v17], None, descr=faildescr5),
+ ResOperation(rop.UNICODESETITEM, [const_ptr34, ConstInt(20), ConstInt(65522)], None),
+ ResOperation(rop.CALL, [ConstInt(func4), v3, v9, v10, v8, v11, v5, v13, v14, v15, v6], None, descr=func4descr),
+ ResOperation(rop.GUARD_NO_EXCEPTION, [], tmp30, descr=faildescr6),
+ ResOperation(rop.FINISH, [], None, descr=finishdescr7),
+ ]
+ operations[0].setfailargs([])
+ operations[16].setfailargs([v5, v9])
+ operations[34].setfailargs([])
+ operations[37].setfailargs([v12, v19, v10, v7, v4, v8, v18, v15, v9])
+ cpu.compile_bridge(faildescr1, inputargs, operations, looptoken)
+ frame = cpu.execute_token(looptoken, *loop_args)
+ #assert cpu.get_int_value(frame, 0) == -9223372036854775766
+ assert cpu.get_int_value(frame, 1) == 0
+ #assert cpu.get_int_value(frame, 2) == -9223372036854775808
+ assert cpu.get_int_value(frame, 3) == 1
+ assert cpu.get_int_value(frame, 4) == 6
+ #assert cpu.get_int_value(frame, 5) == -9223372036854775808
+ assert cpu.get_int_value(frame, 6) == 0
+ assert cpu.get_int_value(frame, 7) == 0
+ #assert cpu.get_int_value(frame, 8) == 26
+ S4 = lltype.GcStruct('Sx', ("parent", rclass.OBJECT), ("f0", lltype.Signed), ("f1", lltype.Signed))
+ S5 = lltype.GcStruct('Sx', ("parent", rclass.OBJECT), ("f0", lltype.Signed))
+ S6 = lltype.GcStruct('Sx', ("f0", lltype.Signed), ("f1", rffi.UCHAR))
+ v1 = BoxInt()
+ v2 = BoxInt()
+ v3 = BoxInt()
+ v4 = BoxInt()
+ v5 = BoxInt()
+ v6 = BoxInt()
+ v7 = BoxInt()
+ v8 = BoxInt()
+ v9 = BoxInt()
+ v10 = BoxInt()
+ v11 = BoxInt()
+ v12 = BoxInt()
+ v13 = BoxInt()
+ v14 = BoxInt()
+ v15 = BoxInt()
+ v16 = BoxInt()
+ v17 = BoxInt()
+ v18 = BoxInt()
+ tmp19 = BoxPtr()
+ faildescr8 = BasicFailDescr()
+ tmp20 = BoxInt()
+ tmp21 = BoxInt()
+ tmp22 = BoxInt()
+ tmp23 = BoxInt()
+ faildescr9 = BasicFailDescr()
+ tmp24 = BoxInt()
+ tmp25 = BoxInt()
+ tmp26 = BoxInt()
+ tmp27 = BoxPtr()
+ tmp28 = BoxPtr()
+ faildescr10 = BasicFailDescr()
+ finishdescr11 = BasicFinalDescr()
+ const_ptr29 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S4)))
+ const_ptr30 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.UNICODE, 26)))
+ const_ptr31 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.UNICODE, 1)))
+ const_ptr32 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S5)))
+ const_ptr33 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S6)))
+ const_ptr34 = ConstPtr(lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(rstr.STR, 26)))
+ inputargs = [v1, v2, v3, v4, v5, v6, v7, v8, v9]
+ operations = [
+ ResOperation(rop.GUARD_EXCEPTION, [ConstInt(xtp3)], tmp19, descr=faildescr8),
+ ResOperation(rop.SETFIELD_GC, [const_ptr29, v7], None, cpu.fielddescrof(S4, 'f0')),
+ ResOperation(rop.UNICODEGETITEM, [const_ptr30, ConstInt(21)], tmp20),
+ ResOperation(rop.UNICODEGETITEM, [const_ptr30, ConstInt(10)], tmp21),
+ ResOperation(rop.UINT_RSHIFT, [v9, ConstInt(40)], v10),
+ ResOperation(rop.UNICODEGETITEM, [const_ptr30, ConstInt(25)], tmp22),
+ ResOperation(rop.INT_NE, [ConstInt(-8), v9], v11),
+ ResOperation(rop.INT_MUL_OVF, [v3, ConstInt(-4)], tmp23),
+ ResOperation(rop.GUARD_OVERFLOW, [], None, descr=faildescr9),
+ ResOperation(rop.UNICODESETITEM, [const_ptr31, ConstInt(0), ConstInt(50175)], None),
+ ResOperation(rop.UINT_GT, [v8, ConstInt(-6)], v12),
+ ResOperation(rop.GETFIELD_GC, [const_ptr32], v13, cpu.fielddescrof(S5, 'f0')),
+ ResOperation(rop.INT_AND, [ConstInt(8), v8], v14),
+ ResOperation(rop.INT_INVERT, [v1], v15),
+ ResOperation(rop.SETFIELD_GC, [const_ptr33, ConstInt(3)], None, cpu.fielddescrof(S6, 'f1')),
+ ResOperation(rop.INT_GE, [v14, v6], v16),
+ ResOperation(rop.INT_AND, [v5, ConstInt(-4)], tmp24),
+ ResOperation(rop.INT_OR, [tmp24, ConstInt(2)], tmp25),
+ ResOperation(rop.INT_FLOORDIV, [v9, tmp25], v17),
+ ResOperation(rop.STRLEN, [const_ptr34], tmp26),
+ ResOperation(rop.NEWSTR, [ConstInt(7)], tmp27),
+ ResOperation(rop.STRSETITEM, [tmp27, ConstInt(0), ConstInt(21)], None),
+ ResOperation(rop.STRSETITEM, [tmp27, ConstInt(1), ConstInt(79)], None),
+ ResOperation(rop.STRSETITEM, [tmp27, ConstInt(2), ConstInt(7)], None),
+ ResOperation(rop.STRSETITEM, [tmp27, ConstInt(3), ConstInt(2)], None),
+ ResOperation(rop.STRSETITEM, [tmp27, ConstInt(4), ConstInt(229)], None),
+ ResOperation(rop.STRSETITEM, [tmp27, ConstInt(5), ConstInt(233)], None),
+ ResOperation(rop.STRSETITEM, [tmp27, ConstInt(6), ConstInt(208)], None),
+ ResOperation(rop.INT_LT, [ConstInt(-31), v10], v18),
+ ResOperation(rop.SAME_AS, [ConstPtr(lltype.nullptr(llmemory.GCREF.TO))], tmp28),
+ ResOperation(rop.GUARD_NONNULL_CLASS, [tmp28, ConstInt(xtp2)], None, descr=faildescr10),
+ ResOperation(rop.FINISH, [v4], None, descr=finishdescr11),
+ ]
+ operations[0].setfailargs([])
+ operations[8].setfailargs([tmp23, v5, v3, v11, v6])
+ operations[30].setfailargs([v6])
+ cpu.compile_bridge(faildescr6, inputargs, operations, looptoken)
+ frame = cpu.execute_token(looptoken, *loop_args)
+ #assert cpu.get_int_value(frame, 0) == -9223372036854775808
+ v1 = BoxInt()
+ v2 = BoxInt()
+ p3 = BoxPtr()
+ tmp4 = BoxInt()
+ tmp5 = BoxPtr()
+ faildescr12 = BasicFailDescr()
+ finishdescr13 = BasicFinalDescr()
+ inputargs = [v1]
+
+ _, func5, func5descr = getexception(cpu, 0)
+ vt = getvtable(cpu, S4)
+
+ operations = [
+ ResOperation(rop.INT_AND, [v1, ConstInt(63)], tmp4),
+ ResOperation(rop.INT_LSHIFT, [ConstInt(10), tmp4], v2),
+ ResOperation(rop.NEW_WITH_VTABLE, [ConstInt(vt)], p3),
+ ResOperation(rop.CALL, [ConstInt(func5)], None, descr=func5descr),
+ ResOperation(rop.GUARD_EXCEPTION, [ConstInt(xtp2)], tmp5, descr=faildescr12),
+ ResOperation(rop.FINISH, [], None, descr=finishdescr13),
+ ]
+ operations[4].setfailargs([v2])
+ cpu.compile_bridge(faildescr10, inputargs, operations, looptoken)
+ frame = cpu.execute_token(looptoken, *loop_args)
+ #assert cpu.get_int_value(frame, 0) == 10
+ print
+ print
+ print
+ print "Passed %d/1000" % (i + 1)
+ print
+ print
+ print
More information about the pypy-commit
mailing list