Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit