Author: Maciej Fijalkowski <fij...@gmail.com> Branch: resume-refactor Changeset: r68728:d31cbab84210 Date: 2014-01-17 17:54 +0100 http://bitbucket.org/pypy/pypy/changeset/d31cbab84210/
Log: (fijal, rguillebert) make backend tests pass again diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -138,7 +138,7 @@ newdescr) if op.is_guard(): newop.failargs = resumebuilder.get_numbering(mapping, op) - newop.getdescr().rd_bytecode_position = len(resumebuilder.newops) + newop.getdescr().rd_bytecode_position = resumebuilder.builder.getpos() self.operations.append(newop) if descr is None: diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py --- a/rpython/jit/backend/test/runner_test.py +++ b/rpython/jit/backend/test/runner_test.py @@ -9,7 +9,8 @@ BoxFloat, ConstFloat) from rpython.jit.metainterp.resoperation import ResOperation, rop from rpython.jit.metainterp.typesystem import deref -from rpython.jit.metainterp.test.test_resume2 import rebuild_locs_from_resumedata +from rpython.jit.resume.test.test_frontend import rebuild_locs_from_resumedata +from rpython.jit.resume.test.test_backend import MockStaticData from rpython.jit.codewriter.effectinfo import EffectInfo from rpython.jit.codewriter.jitcode import JitCode from rpython.jit.tool.oparser import parse @@ -40,6 +41,14 @@ lltype.malloc(STUFF, immortal=True)) +def get_jitcode(num_regs_i=0, num_regs_r=0, num_regs_f=0): + jitcode = JitCode('name') + jitcode.setup(num_regs_i=num_regs_i, num_regs_r=num_regs_r, + num_regs_f=num_regs_f) + jitcode.global_index = 0 + staticdata = MockStaticData([jitcode], []) + return jitcode, staticdata + class Runner(object): add_loop_instructions = ['overload for a specific cpu'] @@ -163,6 +172,7 @@ looptoken = JitCellToken() targettoken = TargetToken() jitcode = JitCode("name") + jitcode.global_index = 0 jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) operations = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), @@ -221,6 +231,7 @@ looptoken = JitCellToken() targettoken = TargetToken() jitcode = JitCode("name") + jitcode.global_index = 0 jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) operations = [ ResOperation(rop.LABEL, [i0], None, descr=targettoken), @@ -245,13 +256,14 @@ ResOperation(rop.JUMP, [i1b], None, descr=targettoken), ] - locs = rebuild_locs_from_resumedata(faildescr1) + staticdata = MockStaticData([jitcode], []) + locs = rebuild_locs_from_resumedata(faildescr1, staticdata) self.cpu.compile_bridge(None, faildescr1, [[i1b]], locs, bridge, looptoken) deadframe = self.cpu.execute_token(looptoken, 2) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 2 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) res = self.cpu.get_int_value(deadframe, 0) assert res == 20 @@ -268,8 +280,7 @@ faildescr2 = BasicFailDescr(2) looptoken = JitCellToken() targettoken = TargetToken() - jitcode = JitCode('name') - jitcode.setup(num_regs_i=3, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(3) operations = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.INT_SUB, [i3, ConstInt(42)], i0), @@ -286,6 +297,7 @@ i1b = BoxInt() i3 = BoxInt() + staticdata = MockStaticData([jitcode], []) bridge = [ ResOperation(rop.INT_LE, [i1b, ConstInt(19)], i3), ResOperation(rop.RESUME_PUT, [i3, ConstInt(0), ConstInt(2)], @@ -294,20 +306,19 @@ ResOperation(rop.JUMP, [i1b], None, descr=targettoken), ] - locs = rebuild_locs_from_resumedata(faildescr1) + locs = rebuild_locs_from_resumedata(faildescr1, staticdata) self.cpu.compile_bridge(None, faildescr1, [[None, i1b, None]], locs, bridge, looptoken) deadframe = self.cpu.execute_token(looptoken, 2) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 2 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) res = self.cpu.get_int_value(deadframe, locs[0][1]) assert res == 20 def test_compile_big_bridge_out_of_small_loop(self): - jitcode = JitCode("name") - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) i0 = BoxInt() faildescr1 = BasicFailDescr(1) looptoken = JitCellToken() @@ -321,7 +332,9 @@ inputargs = [i0] self.cpu.compile_loop(None, inputargs, operations, looptoken) jitcode1 = JitCode("name1") + jitcode1.global_index = 1 jitcode1.setup(num_regs_i=150, num_regs_r=0, num_regs_f=0) + staticdata.alljitcodes.append(jitcode1) i1list = [BoxInt() for i in range(150)] bridge = [ ResOperation(rop.ENTER_FRAME, [ConstInt(13)], None, descr=jitcode1) @@ -337,12 +350,12 @@ bridge.append(ResOperation(rop.FINISH, [], None, descr=BasicFinalDescr(4))) - faillocs = rebuild_locs_from_resumedata(faildescr1) + faillocs = rebuild_locs_from_resumedata(faildescr1, staticdata) self.cpu.compile_bridge(None, faildescr1, [[i0]], faillocs, bridge, looptoken) deadframe = self.cpu.execute_token(looptoken, 1) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert fail.identifier == 3 for i in range(len(i1list)): res = self.cpu.get_int_value(deadframe, locs[1][i]) @@ -422,8 +435,7 @@ z = BoxInt(579) t = BoxInt(455) u = BoxInt(0) # False - jitcode = JitCode('jitcode') - jitcode.setup(num_regs_i=2, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(2) looptoken = JitCellToken() targettoken = TargetToken() operations = [ @@ -442,7 +454,7 @@ cpu.compile_loop(None, [x, y], operations, looptoken) deadframe = self.cpu.execute_token(looptoken, 0, 10) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert self.cpu.get_int_value(deadframe, locs[0][0]) == 0 assert self.cpu.get_int_value(deadframe, locs[0][1]) == 55 @@ -480,8 +492,7 @@ v2 = BoxInt(testcases[0][1]) v_res = BoxInt() # - jitcode = JitCode('jitcode') - jitcode.setup(num_regs_i=1, num_regs_f=0, num_regs_r=0) + jitcode, staticdata = get_jitcode(1) if not reversed: ops = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, @@ -514,7 +525,7 @@ deadframe = self.cpu.execute_token(looptoken, x, y) fail = self.cpu.get_latest_descr(deadframe) if (z == boom) ^ reversed: - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) pos = locs[0][0] assert fail.identifier == 1 else: @@ -1257,9 +1268,7 @@ retvalues.insert(kk, y) # zero = BoxInt() - jitcode = JitCode("name") - jitcode.setup(num_regs_i=intboxes, num_regs_r=0, - num_regs_f=floatboxes) + jitcode, staticdata = get_jitcode(intboxes, 0, floatboxes) operations.extend([ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), @@ -1290,7 +1299,7 @@ # deadframe = self.cpu.execute_token(looptoken, *values) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert fail.identifier == 42 # for k in range(intboxes): @@ -1352,9 +1361,8 @@ looptoken = JitCellToken() targettoken = TargetToken() faildescr = BasicFailDescr(15) - jitcode = JitCode("jitcode") - jitcode.setup(num_regs_i=len(intargs), num_regs_r=len(refargs), - num_regs_f=len(floatargs)) + jitcode, staticdata = get_jitcode(len(intargs), len(refargs), + len(floatargs)) operations = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), @@ -1413,7 +1421,7 @@ # assert dstvalues[index_counter] == 11 dstvalues[index_counter] = 0 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) intvals = [] refvals = [] floatvals = [] @@ -1444,8 +1452,7 @@ faildescr1 = BasicFailDescr(1) faildescr2 = BasicFailDescr(2) faildescr3 = BasicFinalDescr(3) - jitcode = JitCode("jitcode") - jitcode.setup(num_regs_i=0, num_regs_r=0, num_regs_f=12) + jitcode, staticdata = get_jitcode(0, 0, 12) operations = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.LABEL, fboxes, None, descr=targettoken), @@ -1472,7 +1479,7 @@ ] self.cpu.compile_bridge(None, faildescr1, [fboxes2], - rebuild_locs_from_resumedata(faildescr1), + rebuild_locs_from_resumedata(faildescr1, staticdata), bridge, looptoken) args = [] @@ -1482,7 +1489,7 @@ deadframe = self.cpu.execute_token(looptoken, *args) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 2 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) res = self.cpu.get_float_value(deadframe, locs[0][0]) assert longlong.getrealfloat(res) == 8.5 for i in range(1, len(fboxes)): @@ -1495,8 +1502,7 @@ py.test.skip("requires floats") fboxes = [BoxFloat() for i in range(3)] faildescr1 = BasicFailDescr(100) - jitcode = JitCode("jitcode") - jitcode.setup(num_regs_i=0, num_regs_r=0, num_regs_f=3) + jitcode, staticdata = get_jitcode(0, 0, 3) loopops = """ [i0, f1, f2] enter_frame(-1, descr=jitcode) @@ -1519,7 +1525,7 @@ deadframe = self.cpu.execute_token(looptoken, *args) #xxx check fail = self.cpu.get_latest_descr(deadframe) assert loop.operations[-3].getdescr() is fail is faildescr1 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) f1 = self.cpu.get_float_value(deadframe, locs[0][0]) f2 = self.cpu.get_float_value(deadframe, locs[0][1]) f3 = self.cpu.get_float_value(deadframe, locs[0][2]) @@ -1544,7 +1550,7 @@ deadframe = self.cpu.execute_token(looptoken, *args) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 103 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) f1 = self.cpu.get_float_value(deadframe, locs[0][0]) f2 = self.cpu.get_float_value(deadframe, locs[0][1]) f3 = self.cpu.get_float_value(deadframe, locs[0][2]) @@ -2146,8 +2152,7 @@ if i: raise LLException(exc_tp, exc_ptr) - jitcode = JitCode("name") - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1, 0, 0) ops = ''' [i0] enter_frame(-1, descr=jitcode) @@ -2181,7 +2186,7 @@ excvalue = self.cpu.grab_exc_value(deadframe) assert not excvalue deadframe = self.cpu.execute_token(looptoken, 0) - locs = rebuild_locs_from_resumedata(faildescr) + locs = rebuild_locs_from_resumedata(faildescr, staticdata) assert self.cpu.get_int_value(deadframe, locs[0][0]) == 1 excvalue = self.cpu.grab_exc_value(deadframe) assert not excvalue @@ -2221,7 +2226,7 @@ looptoken = JitCellToken() self.cpu.compile_loop(None, loop.inputargs, loop.operations, looptoken) deadframe = self.cpu.execute_token(looptoken, 1) - locs = rebuild_locs_from_resumedata(faildescr) + locs = rebuild_locs_from_resumedata(faildescr, staticdata) assert self.cpu.get_int_value(deadframe, locs[0][0]) == 1 excvalue = self.cpu.grab_exc_value(deadframe) assert excvalue == xptr @@ -2391,8 +2396,7 @@ EffectInfo.MOST_GENERAL) # [i1, i2, i3, i4, i5, i6, f0, f1] - jitcode = JitCode('jitcode') - jitcode.setup(num_regs_i=6, num_regs_r=0, num_regs_f=2) + jitcode, staticdata = get_jitcode(6, 0, 2) faildescr = BasicFailDescr() ops = ''' [i0, i1, i2, i3, i4, i5, i6, f0, f1] @@ -2421,7 +2425,7 @@ f2 = longlong.getfloatstorage(3.4) frame = self.cpu.execute_token(looptoken, 1, 0, 1, 2, 3, 4, 5, f1, f2) assert not called - locs = rebuild_locs_from_resumedata(faildescr) + locs = rebuild_locs_from_resumedata(faildescr, staticdata) for j in range(5): assert self.cpu.get_int_value(frame, locs[0][j]) == j assert longlong.getrealfloat(self.cpu.get_float_value(frame, locs[0][6])) == 1.2 @@ -2439,7 +2443,7 @@ if flag: deadframe = self.cpu.force(token) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) values.append(fail) values.append(self.cpu.get_int_value(deadframe, locs[0][0])) values.append(self.cpu.get_int_value(deadframe, locs[0][1])) @@ -2455,8 +2459,7 @@ i1 = BoxInt() tok = BoxPtr() faildescr = BasicFailDescr(1) - jitcode = JitCode('name') - jitcode.setup(num_regs_i=2, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(2, 0, 0) ops = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.FORCE_TOKEN, [], tok), @@ -2478,7 +2481,7 @@ deadframe = self.cpu.execute_token(looptoken, 10, 1) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 1 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert self.cpu.get_int_value(deadframe, locs[0][0]) == 1 assert self.cpu.get_int_value(deadframe, locs[0][1]) == 10 assert values == [faildescr, 1, 10] @@ -2491,7 +2494,7 @@ if flag: deadframe = self.cpu.force(token) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) values.append(self.cpu.get_int_value(deadframe, locs[0][0])) values.append(self.cpu.get_int_value(deadframe, locs[0][2])) self.cpu.set_savedata_ref(deadframe, random_gcref) @@ -2508,8 +2511,7 @@ i2 = BoxInt() tok = BoxPtr() faildescr = BasicFailDescr(1) - jitcode = JitCode('name') - jitcode.setup(num_regs_i=3, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(3, 0, 0) ops = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.FORCE_TOKEN, [], tok), @@ -2532,7 +2534,7 @@ deadframe = self.cpu.execute_token(looptoken, 10, 1) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 1 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert self.cpu.get_int_value(deadframe, locs[0][0]) == 1 assert self.cpu.get_int_value(deadframe, locs[0][1]) == 42 assert self.cpu.get_int_value(deadframe, locs[0][2]) == 10 @@ -2547,7 +2549,7 @@ if flag: deadframe = self.cpu.force(token) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) values.append(self.cpu.get_int_value(deadframe, locs[0][0])) values.append(self.cpu.get_int_value(deadframe, locs[0][1])) self.cpu.set_savedata_ref(deadframe, random_gcref) @@ -2564,8 +2566,7 @@ f2 = BoxFloat() tok = BoxPtr() faildescr = BasicFailDescr(1) - jitcode = JitCode('name') - jitcode.setup(num_regs_i=2, num_regs_r=0, num_regs_f=1) + jitcode, staticdata = get_jitcode(2, 0, 1) ops = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.FORCE_TOKEN, [], tok), @@ -2589,7 +2590,7 @@ deadframe = self.cpu.execute_token(looptoken, 10, 1) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 1 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert self.cpu.get_int_value(deadframe, locs[0][0]) == 1 x = self.cpu.get_float_value(deadframe, locs[0][2]) assert longlong.getrealfloat(x) == 42.5 @@ -2961,8 +2962,7 @@ i0 = BoxInt() i1 = BoxInt() faildescr = BasicFailDescr(1) - jitcode = JitCode('name') - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) ops = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.RESUME_PUT, [i1, ConstInt(0), ConstInt(0)], None), @@ -2985,7 +2985,7 @@ deadframe = self.cpu.execute_token(looptoken, -42, 9) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert fail is faildescr assert self.cpu.get_int_value(deadframe, locs[0][0]) == 9 print 'step 2 ok' @@ -3888,8 +3888,7 @@ targettoken1 = TargetToken() targettoken2 = TargetToken() faildescr = BasicFailDescr(2) - jitcode = JitCode('name') - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) operations = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.LABEL, [i0], None, descr=targettoken1), @@ -3907,7 +3906,7 @@ self.cpu.compile_loop(None, inputargs, operations, looptoken) deadframe = self.cpu.execute_token(looptoken, 2) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert fail.identifier == 2 res = self.cpu.get_int_value(deadframe, locs[0][0]) assert res == 10 @@ -3921,7 +3920,7 @@ deadframe = self.cpu.execute_token(looptoken, 2) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert fail.identifier == 3 res = self.cpu.get_int_value(deadframe, locs[0][0]) assert res == -10 @@ -3946,8 +3945,7 @@ py.test.skip("pointless test on non-asm") from rpython.jit.backend.tool.viewcode import machine_code_dump import ctypes - jitcode = JitCode('name') - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) targettoken = TargetToken() ops = """ [i2] @@ -3969,7 +3967,7 @@ looptoken = JitCellToken() self.cpu.assembler.set_debug(False) info = self.cpu.compile_loop(None, loop.inputargs, loop.operations, looptoken) - locs = rebuild_locs_from_resumedata(faildescr) + locs = rebuild_locs_from_resumedata(faildescr, staticdata) bridge_info = self.cpu.compile_bridge(None, faildescr, [bridge.inputargs], locs, bridge.operations, looptoken) @@ -4008,8 +4006,7 @@ targettoken1 = TargetToken() faildescr1 = BasicFailDescr(2) inputargs = [i0] - jitcode = JitCode('name') - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) operations = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.INT_LE, [i0, ConstInt(1)], i1), @@ -4071,7 +4068,7 @@ ResOperation(rop.GUARD_TRUE, [i20], None, descr=BasicFailDescr(42)), ResOperation(rop.JUMP, [i19], None, descr=targettoken1), ] - locs = rebuild_locs_from_resumedata(faildescr1) + locs = rebuild_locs_from_resumedata(faildescr1, staticdata) self.cpu.compile_bridge(None, faildescr1, [inputargs], locs, operations2, looptoken1) looptoken2 = JitCellToken() @@ -4299,7 +4296,7 @@ def maybe_force(token, flag): deadframe = self.cpu.force(token) fail = self.cpu.get_latest_descr(deadframe) - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) values.append(self.cpu.get_int_value(deadframe, locs[0][0])) return 42 @@ -4313,8 +4310,7 @@ i2 = BoxInt() tok = BoxPtr() faildescr = BasicFailDescr(23) - jitcode = JitCode('name') - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) ops = [ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode), ResOperation(rop.FORCE_TOKEN, [], tok), @@ -4329,7 +4325,7 @@ deadframe = self.cpu.execute_token(looptoken, 20, 0) fail = self.cpu.get_latest_descr(deadframe) assert fail.identifier == 23 - locs = rebuild_locs_from_resumedata(fail) + locs = rebuild_locs_from_resumedata(fail, staticdata) assert self.cpu.get_int_value(deadframe, locs[0][0]) == 42 # make sure that force reads the registers from a zeroed piece of # memory @@ -4340,6 +4336,8 @@ def func(): jitcode2 = JitCode('name2') jitcode2.setup(num_regs_i=7, num_regs_r=0, num_regs_f=0) + jitcode2.global_index = 1 + staticdata.alljitcodes.append(jitcode2) bridge = parse(""" [i1, i2, px] @@ -4375,7 +4373,7 @@ """, namespace={'finaldescr': finaldescr, 'calldescr2': calldescr2, 'guarddescr': guarddescr, 'func2_ptr': func2_ptr, 'jitcode2': jitcode2}) - locs = rebuild_locs_from_resumedata(faildescr) + locs = rebuild_locs_from_resumedata(faildescr, staticdata) self.cpu.compile_bridge(None, faildescr, [bridge.inputargs], locs, bridge.operations, looptoken) @@ -4402,8 +4400,7 @@ faildescr = BasicFailDescr(0) looptoken = JitCellToken() - jitcode = JitCode('name') - jitcode.setup(num_regs_i=2, num_regs_r=1, num_regs_f=0) + jitcode, staticdata = get_jitcode(2, 1) loop = parse(""" [i0, i1, i2] enter_frame(-1, descr=jitcode) @@ -4426,7 +4423,7 @@ frame = lltype.cast_opaque_ptr(jitframe.JITFRAMEPTR, frame) assert len(frame.jf_frame) == frame.jf_frame_info.jfi_frame_depth - locs = rebuild_locs_from_resumedata(guarddescr) + locs = rebuild_locs_from_resumedata(guarddescr, staticdata) ref = self.cpu.get_ref_value(frame, locs[0][2]) token = lltype.cast_opaque_ptr(jitframe.JITFRAMEPTR, ref) assert token != frame @@ -4475,7 +4472,7 @@ 'faildescr2': BasicFailDescr(1), 'xtp': xtp, 'jitcode2': jitcode2, }) - locs = rebuild_locs_from_resumedata(faildescr) + locs = rebuild_locs_from_resumedata(faildescr, staticdata) self.cpu.compile_bridge(None, faildescr, [bridge.inputargs], locs, bridge.operations, looptoken) raise LLException(xtp, xptr) @@ -4487,10 +4484,11 @@ EffectInfo.MOST_GENERAL) looptoken = JitCellToken() - jitcode = JitCode('name') - jitcode.setup(num_regs_i=2, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(2) jitcode2 = JitCode('name2') jitcode2.setup(num_regs_i=7, num_regs_r=0, num_regs_f=0) + jitcode2.global_index = 1 + staticdata.alljitcodes.append(jitcode2) loop = parse(""" [i0, i1, i2] enter_frame(-1, descr=jitcode) diff --git a/rpython/jit/backend/x86/test/test_runner.py b/rpython/jit/backend/x86/test/test_runner.py --- a/rpython/jit/backend/x86/test/test_runner.py +++ b/rpython/jit/backend/x86/test/test_runner.py @@ -12,8 +12,8 @@ from rpython.jit.codewriter.jitcode import JitCode from rpython.jit.metainterp.resoperation import rop from rpython.jit.metainterp.executor import execute -from rpython.jit.backend.test.runner_test import LLtypeBackendTest -from rpython.jit.metainterp.test.test_resume2 import rebuild_locs_from_resumedata +from rpython.jit.backend.test.runner_test import LLtypeBackendTest, get_jitcode +from rpython.jit.resume.test.test_frontend import rebuild_locs_from_resumedata from rpython.jit.tool.oparser import parse import ctypes @@ -268,8 +268,7 @@ p = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(lltype.GcStruct('x'))) nullptr = lltype.nullptr(llmemory.GCREF.TO) - jitcode = JitCode('name') - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) f = BoxInt() for op in allops: for guard in guards: @@ -301,7 +300,7 @@ if isinstance(descr, BasicFinalDescr): pos = 0 else: - locs = rebuild_locs_from_resumedata(descr) + locs = rebuild_locs_from_resumedata(descr, staticdata) pos = locs[0][0] result = self.cpu.get_int_value(deadframe, pos) if guard == rop.GUARD_FALSE: @@ -331,8 +330,7 @@ guards = [rop.GUARD_FALSE, rop.GUARD_TRUE] all = [rop.INT_EQ, rop.INT_NE, rop.INT_LE, rop.INT_LT, rop.INT_GT, rop.INT_GE, rop.UINT_GT, rop.UINT_LT, rop.UINT_LE, rop.UINT_GE] - jitcode = JitCode('name') - jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0) + jitcode, staticdata = get_jitcode(1) for a, b in boxes: for guard in guards: for op in all: @@ -360,7 +358,7 @@ if isinstance(descr, BasicFinalDescr): pos = 0 else: - locs = rebuild_locs_from_resumedata(descr) + locs = rebuild_locs_from_resumedata(descr, staticdata) pos = locs[0][0] result = self.cpu.get_int_value(deadframe, pos) expected = execute(self.cpu, None, op, None, a, b).value diff --git a/rpython/jit/resume/backend.py b/rpython/jit/resume/backend.py --- a/rpython/jit/resume/backend.py +++ b/rpython/jit/resume/backend.py @@ -135,8 +135,13 @@ elif op.getopnum() == rop.RESUME_PUT: frame_pos = op.getarg(1).getint() pos_in_frame = op.getarg(2).getint() - pos = self.get_box_pos(op.getarg(0)) - self.builder.resume_put(pos, frame_pos, pos_in_frame) + try: + pos = self.get_box_pos(op.getarg(0)) + except KeyError: + pos = TAGBOX + self.current_attachment[op.getarg(0)] = -1 + else: + self.builder.resume_put(pos, frame_pos, pos_in_frame) if pos & TAGBOX: self.frontend_pos[op.getarg(0)] = (frame_pos, pos_in_frame) elif op.getopnum() == rop.LEAVE_FRAME: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit