Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r78548:3a0e074cc535
Date: 2015-07-13 20:00 +0200
http://bitbucket.org/pypy/pypy/changeset/3a0e074cc535/

Log:    improve the situation somewhat, despite failing tests

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
@@ -9,12 +9,12 @@
     def __init__(self):
         self.potential_ops = []
         self.produced_short_boxes = {}
-        self.ops_used = {}
         self.extra_same_as = []
 
     def create_short_boxes(self, optimizer, inputargs):
         for box in inputargs:
-            self.ops_used[box] = None
+            self.produced_short_boxes[box] = None
+
         optimizer.produce_potential_short_preamble_ops(self)
 
         self.short_boxes = []
@@ -33,19 +33,13 @@
         self.produced_short_boxes[op] = None
 
     def produce_short_preamble_op(self, op, preamble_op):
-        if isinstance(op, Const):
-            pass
-        elif isinstance(op, AbstractInputArg):
-            if op not in self.ops_used:
-                return
-        else:
-            for arg in op.getarglist():
-                if isinstance(arg, Const):
-                    pass
-                elif arg in self.ops_used:
-                    pass
-                else:
-                    return # can't produce
+        for arg in preamble_op.getarglist():
+            if isinstance(arg, Const):
+                pass
+            elif arg in self.produced_short_boxes:
+                pass
+            else:
+                return # can't produce
         if op in self.produced_short_boxes:
             opnum = OpHelpers.same_as_for_type(op.type)
             same_as_op = ResOperation(opnum, [op])
@@ -59,4 +53,3 @@
             self.potential_ops.append((op, op))
         else:
             self.potential_ops.append((op, short_preamble_op))
-        self.ops_used[op] = None
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
@@ -867,21 +867,21 @@
     def test_dont_delay_setfields(self):
         ops = """
         [p1, p2]
-        i1 = getfield_gc_i(p1, descr=nextdescr)
+        i1 = getfield_gc_i(p1, descr=valuedescr)
         i2 = int_sub(i1, 1)
         i2b = int_is_true(i2)
         guard_true(i2b) []
-        setfield_gc(p2, i2, descr=nextdescr)
+        setfield_gc(p2, i2, descr=valuedescr)
         p3 = new_with_vtable(descr=nodesize)
         jump(p2, p3)
         """
         preamble = """
         [p1, p2]
-        i1 = getfield_gc_i(p1, descr=nextdescr)
+        i1 = getfield_gc_i(p1, descr=valuedescr)
         i2 = int_sub(i1, 1)
         i2b = int_is_true(i2)
         guard_true(i2b) []
-        setfield_gc(p2, i2, descr=nextdescr)
+        setfield_gc(p2, i2, descr=valuedescr)
         jump(p2, i2)
         """
         expected = """
@@ -890,7 +890,7 @@
         i2b = int_is_true(i2)
         guard_true(i2b) []
         p3 = new_with_vtable(descr=nodesize)
-        setfield_gc(p3, i2, descr=nextdescr)
+        setfield_gc(p3, i2, descr=valuedescr)
         jump(p3, i2)
         """
         self.optimize_loop(ops, expected, preamble)
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
@@ -228,7 +228,8 @@
         end_args = [self.get_box_replacement(a) for a in original_label_args]
         virtual_state = self.get_virtual_state(end_args)
         sb = ShortBoxes()
-        sb.create_short_boxes(self.optimizer, end_args)
+        sb.create_short_boxes(self.optimizer, [self.get_box_replacement(a)
+                                            for a in start_label.getarglist()])
         inparg_mapping = [(start_label.getarg(i), end_args[i])
                           for i in range(len(end_args)) if
                           start_label.getarg(i) is not end_args[i]]
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to