[pypy-commit] pypy resume-refactor: (fijal, antocuni) write a resumereader that can put things in faillocs
fijal
noreply at buildbot.pypy.org
Fri Aug 30 15:03:00 CEST 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r66462:c36753f12659
Date: 2013-08-30 14:02 +0100
http://bitbucket.org/pypy/pypy/changeset/c36753f12659/
Log: (fijal, antocuni) write a resumereader that can put things in
faillocs
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
@@ -71,10 +71,29 @@
class ReconstructingResumeReader(AbstractResumeReader):
def __init__(self):
- pass
+ self.framestack = []
+
+ def enter_frame(self, pc, jitcode):
+ self.framestack.append([-1] * jitcode.num_regs())
+
+ def put(self, jitframe_index, depth, frontend_position):
+ self.framestack[- depth - 1][frontend_position] = jitframe_index
+
+ def leave_frame(self):
+ self.framestack.pop()
def rebuild_from_resumedata(metainterp, deadframe, faildescr):
BoxResumeReader(metainterp, deadframe).rebuild(faildescr)
def rebuild_locs_from_resumedata(faildescr):
- ReconstructingResumeReader().rebuild(faildescr)
+ reader = ReconstructingResumeReader()
+ reader.rebuild(faildescr)
+ size = 0
+ for frame in reader.framestack:
+ size += len(frame)
+ res = [-1] * size
+ i = 0
+ for frame in reader.framestack:
+ res[i : i + len(frame)] = frame
+ i += len(frame)
+ return res
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
@@ -126,20 +126,23 @@
def test_reconstructing_resume_reader(self):
jitcode1 = JitCode("jitcode")
- jitcode1.setup(num_regs_i=13)
+ jitcode1.setup(num_regs_i=3, num_regs_f=0, num_regs_r=0)
jitcode2 = JitCode("jitcode2")
- jitcode2.setup(num_regs_i=9)
+ jitcode2.setup(num_regs_i=3, num_regs_f=0, num_regs_r=0)
resume_loop = parse("""
[]
enter_frame(-1, descr=jitcode1)
- backend_put(11, 0, 2)
+ backend_put(11, 0, 1)
enter_frame(12, descr=jitcode2)
- backend_put(12, 0, 3)
- backend_put(8, 1, 4)
+ backend_put(12, 0, 2)
+ backend_put(8, 1, 0)
leave_frame()
- backend_put(10, 0, 1)
+ backend_put(10, 0, 0)
leave_frame()
""", namespace={'jitcode1': jitcode1,
'jitcode2': jitcode2})
descr = Descr()
- #rebuild_locs_from_resumedata(descr)
+ descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
+ descr.rd_bytecode_position = 5
+ locs = rebuild_locs_from_resumedata(descr)
+ assert locs == [8, 11, -1, -1, -1, 12]
More information about the pypy-commit
mailing list