Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r79597:75a3c9bce078 Date: 2015-09-13 11:30 +0200 http://bitbucket.org/pypy/pypy/changeset/75a3c9bce078/
Log: a test and a fix diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -8843,5 +8843,43 @@ """ self.optimize_loop(ops, expected) + def test_same_as_preserves_info_in_the_preamble(self): + ops = """ + [p0, p1, i1] + i2 = int_add(i1, 1) + setfield_gc(p0, i2, descr=valuedescr) + i = int_le(i2, 13) + guard_true(i) [] + if00 = getfield_gc_i(p0, descr=valuedescr) + icheck = int_le(if00, 13) + guard_true(icheck) [] + jump(p0, p1, i1) + """ + expected = """ + [p0, p1, i1, i2] + setfield_gc(p0, i2, descr=valuedescr) + jump(p0, p1, i1, i2) + """ + self.optimize_loop(ops, expected) + + def test_same_as_preserves_info_in_the_preamble_2(self): + ops = """ + [i0, p0] + ifoo = getfield_gc_i(p0, descr=valuedescr) + icheck = int_lt(ifoo, 13) + guard_true(icheck) [] + i1 = int_add(i0, 1) + i2 = int_lt(i1, 13) + guard_true(i2) [] + setfield_gc(p0, i1, descr=valuedescr) + jump(i0, p0) + """ + expected = """ + [i0, p0, i4] + setfield_gc(p0, i4, descr=valuedescr) + jump(i0, p0, i4) + """ + self.optimize_loop(ops, expected) + class TestLLtype(OptimizeOptTest, LLtypeMixin): pass diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py --- a/rpython/jit/metainterp/optimizeopt/unroll.py +++ b/rpython/jit/metainterp/optimizeopt/unroll.py @@ -10,7 +10,8 @@ from rpython.jit.metainterp.optimizeopt.vstring import StrPtrInfo from rpython.jit.metainterp.optimizeopt.virtualstate import ( VirtualStateConstructor, VirtualStatesCantMatch) -from rpython.jit.metainterp.resoperation import rop, ResOperation, GuardResOp +from rpython.jit.metainterp.resoperation import rop, ResOperation, GuardResOp,\ + AbstractResOp from rpython.jit.metainterp import compile from rpython.rlib.debug import debug_print, debug_start, debug_stop,\ have_debug_prints @@ -359,7 +360,10 @@ op.set_forwarded(None) def _expand_info(self, arg, infos): - info = self.optimizer.getinfo(arg) + if isinstance(arg, AbstractResOp) and arg.is_same_as(): + info = self.optimizer.getinfo(arg.getarg(0)) + else: + info = self.optimizer.getinfo(arg) if arg in infos: return if info: @@ -395,7 +399,7 @@ for produced_op in short_boxes: op = produced_op.short_op.res if not isinstance(op, Const): - infos[op] = self.optimizer.getinfo(op) + self._expand_info(op, infos) self.optimizer._clean_optimization_info(end_args) self.optimizer._clean_optimization_info(start_label.getarglist()) return ExportedState(label_args, end_args, virtual_state, infos, _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit