[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