[pypy-commit] pypy resume-refactor: fix one missing item for inheriting parent in resumebuilder
fijal
noreply at buildbot.pypy.org
Sun Jan 12 14:47:08 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68611:7f1660207c81
Date: 2014-01-12 14:24 +0100
http://bitbucket.org/pypy/pypy/changeset/7f1660207c81/
Log: fix one missing item for inheriting parent in resumebuilder
diff --git a/rpython/jit/backend/llsupport/resumebuilder.py b/rpython/jit/backend/llsupport/resumebuilder.py
--- a/rpython/jit/backend/llsupport/resumebuilder.py
+++ b/rpython/jit/backend/llsupport/resumebuilder.py
@@ -46,13 +46,23 @@
self.framestack.pop()
class ResumeBuilder(object):
- def __init__(self, regalloc, frontend_liveness, descr):
+ def __init__(self, regalloc, frontend_liveness, descr, inputframes=None,
+ inputlocs=None):
self.newops = []
self.regalloc = regalloc
self.current_attachment = {}
self.frontend_liveness = frontend_liveness
self.frontend_pos = {}
self.virtuals = {}
+ if inputlocs is not None:
+ i = 0
+ for frame_pos, frame in enumerate(inputframes):
+ for pos_in_frame, box in enumerate(frame):
+ loc_pos = inputlocs[i].get_jitframe_position()
+ self.current_attachment[box] = loc_pos
+ self.frontend_pos[box] = (ConstInt(frame_pos),
+ ConstInt(pos_in_frame))
+ i += 1
def process(self, op):
if op.getopnum() == rop.RESUME_PUT:
diff --git a/rpython/jit/backend/llsupport/test/test_resumebuilder.py b/rpython/jit/backend/llsupport/test/test_resumebuilder.py
--- a/rpython/jit/backend/llsupport/test/test_resumebuilder.py
+++ b/rpython/jit/backend/llsupport/test/test_resumebuilder.py
@@ -4,6 +4,7 @@
from rpython.jit.codewriter.jitcode import JitCode
from rpython.jit.tool.oparser import parse
from rpython.jit.metainterp.optimizeopt.util import equaloplists
+from rpython.jit.metainterp.test.test_resume2 import rebuild_locs_from_resumedata
from rpython.rtyper.lltypesystem import lltype
class MockJitCode(JitCode):
@@ -116,12 +117,12 @@
def test_bridge(self):
jitcode = JitCode("name")
- jitcode.setup(num_regs_i=2, num_regs_r=0, num_regs_f=0)
+ jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0)
loop = parse("""
[i0]
enter_frame(-1, descr=jitcode)
- resume_put(i0, 0, 0)
i1 = int_lt(i0, 10)
+ resume_put(i1, 0, 0)
guard_true(i1)
leave_frame()
""", namespace={'jitcode': jitcode})
@@ -129,3 +130,22 @@
looptoken = JitCellToken()
self.cpu.compile_loop(None, loop.inputargs, loop.operations,
looptoken)
+
+ descr = loop.operations[3].getdescr()
+
+ bridge = parse("""
+ [i0]
+ force_spill(i0)
+ guard_false(i0)
+ """)
+ locs = rebuild_locs_from_resumedata(descr)
+ self.cpu.compile_bridge(None, descr, [bridge.inputargs], locs,
+ bridge.operations, looptoken)
+
+ descr = bridge.operations[-1].getdescr()
+ expected_resume = parse("""
+ []
+ resume_put(28, 0, 0)
+ """)
+ equaloplists(descr.rd_resume_bytecode.opcodes,
+ expected_resume.operations)
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -133,7 +133,8 @@
self.jump_target_descr = None
self.final_jump_op = None
- def _prepare(self, inputframes, operations, allgcrefs, descr=None):
+ def _prepare(self, inputframes, operations, allgcrefs, descr=None,
+ locs=None):
cpu = self.assembler.cpu
self.fm = X86FrameManager(cpu.get_baseofs_of_frame_field())
operations = cpu.gc_ll_descr.rewrite_assembler(cpu, operations,
@@ -141,7 +142,8 @@
# compute longevity of variables
x = compute_vars_longevity(inputframes, operations, descr)
longevity, last_real_usage, frontend_liveness = x
- self.resumebuilder = ResumeBuilder(self, frontend_liveness, descr)
+ self.resumebuilder = ResumeBuilder(self, frontend_liveness, descr,
+ inputframes, locs)
self.longevity = longevity
self.last_real_usage = last_real_usage
self.rm = gpr_reg_mgr_cls(self.longevity,
@@ -165,7 +167,8 @@
def prepare_bridge(self, inputframes, arglocs, operations, allgcrefs,
frame_info, descr):
- operations = self._prepare(inputframes, operations, allgcrefs, descr)
+ operations = self._prepare(inputframes, operations, allgcrefs, descr,
+ locs=arglocs)
self._update_bindings(arglocs, inputframes)
self.min_bytes_before_label = 0
return operations
More information about the pypy-commit
mailing list