Author: Maciej Fijalkowski <fij...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit