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

Reply via email to