Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r79043:b2a9f450a0b4
Date: 2015-08-18 18:00 +0200
http://bitbucket.org/pypy/pypy/changeset/b2a9f450a0b4/

Log:    I *think* this is correct

diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py 
b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -196,7 +196,8 @@
         return ProducedShortOp(self, self.preamble_op)
 
     def produce_op(self, opt, preamble_op, exported_infos, invented_name):
-        assert not invented_name
+        pass
+        #assert not invented_name
 
     def __repr__(self):
         return "INP(%r -> %r)" % (self.res, self.preamble_op)
@@ -258,6 +259,19 @@
         else:
             return None
 
+    def _pick_op_index(self, lst, pick_inparg=True):
+        index = -1
+        for i, item in enumerate(lst):
+            if (not isinstance(item.short_op, HeapOp) and
+                (pick_inparg or not isinstance(item.short_op, ShortInputArg))):
+                if index != -1:
+                    assert pick_inparg
+                    return self._pick_op_index(lst, False)
+                index = i
+        if index == -1:
+            index = 0
+        return index
+
     def add_op_to_short(self, shortop):
         if shortop.res in self.produced_short_boxes:
             return # already added due to dependencies
@@ -268,13 +282,7 @@
                 if len(lst) == 0:
                     return None
                 else:
-                    index = -1
-                    for i, item in enumerate(lst):
-                        if not isinstance(item.short_op, HeapOp):
-                            assert index == -1
-                            index = i
-                    if index == -1:
-                        index = 0
+                    index = self._pick_op_index(lst)
                     pop = lst[index]
                     for i in range(len(lst)):
                         if i == index:
@@ -315,8 +323,6 @@
         self.potential_ops[op] = CompoundOp(op, pop, prev_op)
 
     def add_pure_op(self, op):
-        if op in self.potential_ops:
-            return
         self.add_potential_op(op, PureOp(op))
 
     def add_loopinvariant_op(self, op):
@@ -383,7 +389,7 @@
     def add_preamble_op(self, preamble_op):
         if preamble_op.invented_name:
             self.extra_same_as.append(preamble_op.op)
-        self.used_boxes.append(preamble_op.op)
+        self.used_boxes.append(preamble_op.op)            
         self.short_preamble_jump.append(preamble_op.preamble_op)
 
     def build_short_preamble(self):
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
@@ -2395,11 +2395,7 @@
         setfield_gc(p1, i2, descr=valuedescr)
         jump(p1, i1, i2, 1) # , i5)
         """
-        expected_short = """
-        []
-        """
-        self.optimize_loop(ops, expected, preamble,
-                           expected_short=expected_short)
+        self.optimize_loop(ops, expected, preamble)
 
     def test_duplicate_setfield_residual_guard_2(self):
         # the difference with the previous test is that the field value is
@@ -8720,16 +8716,5 @@
         """
         self.optimize_loop(ops, expected, expected_short=expected_short)
 
-    def test_simple_swap_arguments(self):
-        ops = """
-        [i0, i1]
-        i2 = int_add(i1, 1)
-        jump(i2, i0)
-        """
-        expected = """
-        []
-        """
-        self.optimize_loop(ops, expected)
-
 class TestLLtype(OptimizeOptTest, LLtypeMixin):
     pass
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to