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

Reply via email to