[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