Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r53696:64beedea51bc Date: 2012-03-15 12:12 -0700 http://bitbucket.org/pypy/pypy/changeset/64beedea51bc/
Log: Complain if make_sure_var_in_reg() is called on a fresh new box. diff --git a/pypy/jit/backend/llsupport/regalloc.py b/pypy/jit/backend/llsupport/regalloc.py --- a/pypy/jit/backend/llsupport/regalloc.py +++ b/pypy/jit/backend/llsupport/regalloc.py @@ -321,7 +321,7 @@ except KeyError: pass # 'var' is already not in a register - def loc(self, box): + def loc(self, box, must_exist=False): """ Return the location of 'box'. """ self._check_type(box) @@ -332,6 +332,8 @@ except KeyError: if box in self.bindings_to_frame_reg: return self.frame_reg + if must_exist: + return self.frame_manager.bindings[box] return self.frame_manager.loc(box) def return_constant(self, v, forbidden_vars=[], selected_reg=None): @@ -360,7 +362,7 @@ self._check_type(v) if isinstance(v, Const): return self.return_constant(v, forbidden_vars, selected_reg) - prev_loc = self.loc(v) + prev_loc = self.loc(v, must_exist=True) if prev_loc is self.frame_reg and selected_reg is None: return prev_loc loc = self.force_allocate_reg(v, forbidden_vars, selected_reg, diff --git a/pypy/jit/backend/llsupport/test/test_regalloc.py b/pypy/jit/backend/llsupport/test/test_regalloc.py --- a/pypy/jit/backend/llsupport/test/test_regalloc.py +++ b/pypy/jit/backend/llsupport/test/test_regalloc.py @@ -1,4 +1,4 @@ - +import py from pypy.jit.metainterp.history import BoxInt, ConstInt, BoxFloat, INT, FLOAT from pypy.jit.backend.llsupport.regalloc import FrameManager from pypy.jit.backend.llsupport.regalloc import RegisterManager as BaseRegMan @@ -236,6 +236,16 @@ assert isinstance(loc, FakeFramePos) assert len(asm.moves) == 1 + def test_bogus_make_sure_var_in_reg(self): + b0, = newboxes(0) + longevity = {b0: (0, 1)} + fm = TFrameManager() + asm = MockAsm() + rm = RegisterManager(longevity, frame_manager=fm, assembler=asm) + rm.next_instruction() + # invalid call to make_sure_var_in_reg(): box unknown so far + py.test.raises(KeyError, rm.make_sure_var_in_reg, b0) + def test_return_constant(self): asm = MockAsm() boxes, longevity = boxes_and_longevity(5) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit