[pypy-commit] pypy resume-refactor: (fijal, rguillebert) finish resume2.py refactoring for now

fijal noreply at buildbot.pypy.org
Sun Jan 12 12:01:37 CET 2014


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68602:6cc1ba9ae765
Date: 2014-01-12 11:44 +0100
http://bitbucket.org/pypy/pypy/changeset/6cc1ba9ae765/

Log:	(fijal, rguillebert) finish resume2.py refactoring for now

diff --git a/rpython/jit/metainterp/resume2.py b/rpython/jit/metainterp/resume2.py
--- a/rpython/jit/metainterp/resume2.py
+++ b/rpython/jit/metainterp/resume2.py
@@ -34,7 +34,7 @@
             elif op.getopnum() == rop.LEAVE_FRAME:
                 self.leave_frame()
             elif op.getopnum() == rop.RESUME_PUT:
-                self.resume_put(op.getarg(0), op.getarg(1).getint(),
+                self.resume_put(op.getarg(0).getint(), op.getarg(1).getint(),
                          op.getarg(2).getint())
             elif op.getopnum() == rop.RESUME_NEW:
                 self.resume_new(op.result, op.getdescr())
@@ -48,27 +48,30 @@
                 xxx
             pos += 1
 
-    def resume_put(self, box, depth, frontend_position):
+    def resume_put(self, jitframe_pos, depth, frontend_position):
         jitcode = self.metainterp.framestack[-1].jitcode
-        frame = self.metainterp.framestack[- depth - 1]
+        frame = self.metainterp.framestack[depth]
         if frontend_position < jitcode.num_regs_i():
-            self.put_box_int(frame, frontend_position, box)
+            self.put_box_int(frame, frontend_position, jitframe_pos)
         elif frontend_position < (jitcode.num_regs_r() + jitcode.num_regs_i()):
             self.put_box_ref(frame, frontend_position - jitcode.num_regs_i(),
-                             box)
+                             jitframe_pos)
         else:
             assert frontend_position < jitcode.num_regs()
             self.put_box_float(frame, frontend_position - jitcode.num_regs_r()
-                               - jitcode.num_regs_i(), box)
+                               - jitcode.num_regs_i(), jitframe_pos)
+
+    def read_int(self, jitframe_pos):
+        return self.metainterp.cpu.get_int_value(self.deadframe, jitframe_pos)
 
 class DirectResumeReader(AbstractResumeReader):
-    pass
+    def __init__(self, *args):
+        xxx
 
 class BoxResumeReader(AbstractResumeReader):
     def __init__(self, metainterp, deadframe):
         self.metainterp = metainterp
         self.deadframe = deadframe
-        self.backend_values = {}
 
     def enter_frame(self, pc, jitcode):
         if pc != -1:
@@ -78,24 +81,19 @@
     def leave_frame(self):
         self.metainterp.popframe()
 
-    def put_box_int(self, frame, position, box):
-        frame.registers_i[position] = box
+    def put_box_int(self, frame, position, jitframe_pos):
+        frame.registers_i[position] = BoxInt(self.read_int(jitframe_pos))
 
-    def put_box_ref(self, frame, position, box):
-        frame.registers_r[position] = box
+    def put_box_ref(self, frame, position, jitframe_pos):
+        xxx
+        frame.registers_r[position] = self.read_ref(jitframe_pos)
 
-    def put_box_float(self, frame, position, box):
-        frame.registers_f[position] = box
+    def put_box_float(self, frame, position, jitframe_pos):
+        xxx
+        frame.registers_f[position] = self.read_float(jitframe_pos)
 
     def finish(self):
-        cpu = self.metainterp.cpu
-        for box, position in self.backend_values.iteritems():
-            if box.type == 'i':
-                intval = cpu.get_int_value(self.deadframe, position)
-                assert isinstance(box, BoxInt)
-                box.value = intval
-            else:
-                xxx
+        pass
 
 def rebuild_from_resumedata(metainterp, deadframe, faildescr):
     BoxResumeReader(metainterp, deadframe).rebuild(faildescr)
diff --git a/rpython/jit/metainterp/test/test_resume2.py b/rpython/jit/metainterp/test/test_resume2.py
--- a/rpython/jit/metainterp/test/test_resume2.py
+++ b/rpython/jit/metainterp/test/test_resume2.py
@@ -62,15 +62,14 @@
         jitcode = JitCode("jitcode")
         jitcode.setup(num_regs_i=13)
         resume_loop = parse("""
-        [i0]
+        []
         enter_frame(-1, descr=jitcode1)
-        resume_put(i0, 0, 1)
-        backend_attach(i0, 10)
+        resume_put(10, 0, 1)
         leave_frame()
         """, namespace={'jitcode1': jitcode})
         descr = Descr()
         descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
-        descr.rd_bytecode_position = 3
+        descr.rd_bytecode_position = 2
         metainterp = MockMetaInterp()
         metainterp.cpu = MockCPU()
         rebuild_from_resumedata(metainterp, "myframe", descr)
@@ -84,25 +83,21 @@
         jitcode2 = JitCode("jitcode2")
         jitcode2.setup(num_regs_i=9)
         resume_loop = parse("""
-        [i0, i1, i2, i3]
+        []
         enter_frame(-1, descr=jitcode1)
-        resume_put(i0, 0, 2)
-        backend_attach(i0, 11)
+        resume_put(11, 0, 2)
         enter_frame(12, descr=jitcode2)
-        resume_put(i1, 0, 3)
-        resume_put(i2, 1, 4)
-        backend_attach(i1, 12)
-        backend_attach(i2, 8)
+        resume_put(12, 1, 3)
+        resume_put(8, 0, 4)
         leave_frame()
-        backend_attach(i3, 10)
-        resume_put(i3, 0, 1)
+        resume_put(10, 0, 1)
         leave_frame()
         """, namespace={'jitcode1': jitcode1, 'jitcode2': jitcode2})
         metainterp = MockMetaInterp()
         metainterp.cpu = MockCPU()
         descr = Descr()
         descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
-        descr.rd_bytecode_position = 8
+        descr.rd_bytecode_position = 5
         rebuild_from_resumedata(metainterp, "myframe", descr)
         assert len(metainterp.framestack) == 2
         f = metainterp.framestack[-1]
@@ -113,7 +108,7 @@
         assert f2.registers_i[4].getint() == 8 + 3
         assert f2.registers_i[2].getint() == 11 + 3
 
-        descr.rd_bytecode_position = 11
+        descr.rd_bytecode_position = 7
         metainterp.framestack = []
         rebuild_from_resumedata(metainterp, "myframe", descr)
         assert len(metainterp.framestack) == 1
@@ -127,24 +122,22 @@
         jitcode1 = JitCode("jitcode")
         jitcode1.setup(num_regs_i=13)
         base = parse("""
-        [i0, i1]
+        []
         enter_frame(-1, descr=jitcode1)
-        resume_put(i0, 0, 0)
-        backend_attach(i0, 42)
+        resume_put(42, 0, 0)
         # here is the split caused by a guard
-        resume_put(i1, 0, 1)
-        backend_attach(i1, 1)
+        resume_put(1, 0, 1)
+        leave_frame()
         """, namespace={'jitcode1': jitcode1})
         bridge = parse("""
-        [i2]
-        resume_put(i2, 0, 1)
-        backend_attach(i2, 2)
+        []
+        resume_put(2, 0, 1)
         """)
         descr = Descr()
-        descr.rd_bytecode_position = 2
+        descr.rd_bytecode_position = 1
         parent = ResumeBytecode(base.operations)
         b = ResumeBytecode(bridge.operations, parent=parent,
-                           parent_position=3)
+                           parent_position=2)
         descr.rd_resume_bytecode = b
         metainterp = MockMetaInterp()
         metainterp.cpu = MockCPU()
@@ -168,6 +161,7 @@
         """, namespace={'jitcode':jitcode1})
 
     def test_reconstructing_resume_reader(self):
+        py.test.skip("xxx")
         jitcode1 = JitCode("jitcode")
         jitcode1.setup(num_regs_i=2, num_regs_f=0, num_regs_r=0)
         jitcode2 = JitCode("jitcode2")


More information about the pypy-commit mailing list