[pypy-commit] pypy resume-refactor: fix a case in resumebuilder
fijal
noreply at buildbot.pypy.org
Sun Jan 12 14:16:28 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68609:e239dd41741b
Date: 2014-01-12 13:38 +0100
http://bitbucket.org/pypy/pypy/changeset/e239dd41741b/
Log: fix a case in resumebuilder
diff --git a/rpython/jit/backend/llsupport/regalloc.py b/rpython/jit/backend/llsupport/regalloc.py
--- a/rpython/jit/backend/llsupport/regalloc.py
+++ b/rpython/jit/backend/llsupport/regalloc.py
@@ -492,7 +492,10 @@
if box in self.bindings_to_frame_reg:
return self.frame_reg
if must_exist:
- return self.frame_manager.bindings[box]
+ try:
+ return self.frame_manager.bindings[box]
+ except KeyError:
+ raise
return self.frame_manager.loc(box)
def return_constant(self, v, forbidden_vars=[], selected_reg=None):
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
@@ -57,7 +57,14 @@
if op.getopnum() == rop.RESUME_PUT:
box = op.getarg(0)
args = op.getarglist()
- pos = self.regalloc.loc(box).get_jitframe_position()
+ try:
+ pos = self.regalloc.loc(box, must_exist=True).get_jitframe_position()
+ except KeyError:
+ # the thing is not *yet* anywhere, which means we'll record
+ # we know about it, but not store the resume_put just yet
+ self.current_attachment[box] = -1
+ self.frontend_pos[box] = (args[1], args[2])
+ return
self.current_attachment[box] = pos
self.frontend_pos[box] = (args[1], args[2])
args[0] = ConstInt(pos)
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
@@ -362,12 +362,12 @@
while mc.get_relative_pos() < self.min_bytes_before_label:
mc.NOP()
- def loc(self, v):
+ def loc(self, v, must_exist=False):
if v is None: # xxx kludgy
return None
if v.type == FLOAT:
- return self.xrm.loc(v)
- return self.rm.loc(v)
+ return self.xrm.loc(v, must_exist=must_exist)
+ return self.rm.loc(v, must_exist=must_exist)
def _consider_guard(self, op):
loc = self.rm.make_sure_var_in_reg(op.getarg(0))
More information about the pypy-commit
mailing list