[pypy-commit] pypy resume-refactor: (fijal, agaynor) write rebuildingresumebuilder

fijal noreply at buildbot.pypy.org
Wed Oct 16 15:17:10 CEST 2013


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r67421:4efa7708d887
Date: 2013-10-16 15:10 +0200
http://bitbucket.org/pypy/pypy/changeset/4efa7708d887/

Log:	(fijal, agaynor) write rebuildingresumebuilder

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,6 +9,7 @@
                                          BoxFloat, ConstFloat)
 from rpython.jit.metainterp.resoperation import ResOperation, rop
 from rpython.jit.metainterp.typesystem import deref
+from rpython.jit.metainterp.resume2 import rebuild_faillocs_from_resumedata
 from rpython.jit.codewriter.effectinfo import EffectInfo
 from rpython.jit.codewriter.jitcode import JitCode
 from rpython.jit.tool.oparser import parse
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
@@ -14,7 +14,7 @@
     def rebuild(self, faildescr):
         self._rebuild_until(faildescr.rd_resume_bytecode,
                             faildescr.rd_bytecode_position)
-        self.finish()
+        return self.finish()
 
     def finish(self):
         pass
@@ -96,3 +96,4 @@
 
 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
@@ -1,9 +1,10 @@
 
+import py
 from rpython.jit.tool.oparser import parse
 from rpython.jit.codewriter.jitcode import JitCode
 from rpython.jit.metainterp.history import AbstractDescr
 from rpython.jit.metainterp.resume2 import rebuild_from_resumedata,\
-     ResumeBytecode
+     ResumeBytecode, BoxResumeReader
 
 
 class Descr(AbstractDescr):
@@ -16,10 +17,17 @@
     def __init__(self, jitcode):
         self.jitcode = jitcode
         self.registers_i = [None] * jitcode.num_regs_i()
+        self.registers_r = [None] * jitcode.num_regs_r()
+        self.registers_f = [None] * jitcode.num_regs_f()
 
     def num_nonempty_regs(self):
         return len(filter(bool, self.registers_i))
 
+    def dump_registers(self, lst, backend_values):
+        lst += [backend_values[x] for x in self.registers_i]
+        lst += [backend_values[x] for x in self.registers_r]
+        lst += [backend_values[x] for x in self.registers_f]        
+
 class MockMetaInterp(object):
     def __init__(self):
         self.framestack = []
@@ -35,6 +43,20 @@
         assert frame == "myframe"
         return index + 3
 
+class RebuildingResumeReader(BoxResumeReader):
+    def __init__(self):
+        self.backend_values = {}
+        self.metainterp = MockMetaInterp()
+
+    def finish(self):
+        l = []
+        for frame in self.metainterp.framestack:
+            frame.dump_registers(l, self.backend_values)
+        return l
+
+def rebuild_locs_from_resumedata(faildescr):
+    return RebuildingResumeReader().rebuild(faildescr)
+
 class TestResumeDirect(object):
     def test_box_resume_reader(self):
         jitcode = JitCode("jitcode")
@@ -133,6 +155,7 @@
         assert f.registers_i[1].getint() == 2 + 3
 
     def test_new(self):
+        py.test.skip("finish")
         jitcode1 = JitCode("jitcode")
         jitcode1.setup(num_regs_i=1)
         base = parse("""
@@ -142,28 +165,29 @@
         resume_setfield(i0, 13, descr=fielddescr)
         backend_put(12,
         leave_frame()
-        """, namespace={'jitcode':jitcode})
+        """, namespace={'jitcode':jitcode1})
 
     def test_reconstructing_resume_reader(self):
-        XXX
         jitcode1 = JitCode("jitcode")
-        jitcode1.setup(num_regs_i=3, num_regs_f=0, num_regs_r=0)
+        jitcode1.setup(num_regs_i=2, num_regs_f=0, num_regs_r=0)
         jitcode2 = JitCode("jitcode2")
-        jitcode2.setup(num_regs_i=3, num_regs_f=0, num_regs_r=0)
+        jitcode2.setup(num_regs_i=1, num_regs_f=0, num_regs_r=0)
         resume_loop = parse("""
-        []
+        [i0, i1, i2, i3]
         enter_frame(-1, descr=jitcode1)
-        backend_put(11, 0, 1)
+        resume_put(i0, 0, 1)
+        backend_attach(i0, 11)
         enter_frame(12, descr=jitcode2)
-        backend_put(12, 0, 2)
-        backend_put(8, 1, 0)
+        resume_put(i1, 0, 0)
+        backend_attach(i1, 12)
+        resume_put(i3, 1, 0)
+        backend_attach(i3, 8)
         leave_frame()
-        backend_put(10, 0, 0)
         leave_frame()
         """, namespace={'jitcode1': jitcode1,
                         'jitcode2': jitcode2})
         descr = Descr()
         descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
-        descr.rd_bytecode_position = 5
+        descr.rd_bytecode_position = 8
         locs = rebuild_locs_from_resumedata(descr)
-        assert locs == [8, 11, -1, -1, -1, 12]
+        assert locs == [8, 11, 12]


More information about the pypy-commit mailing list