[pypy-commit] pypy jit-duplicated_short_boxes: actualy do prevent short_boxes from blowing up too much

hakanardo noreply at buildbot.pypy.org
Wed Aug 31 12:50:21 CEST 2011


Author: Hakan Ardo <hakan at debian.org>
Branch: jit-duplicated_short_boxes
Changeset: r46943:f299e69201a0
Date: 2011-08-31 12:49 +0200
http://bitbucket.org/pypy/pypy/changeset/f299e69201a0/

Log:	actualy do prevent short_boxes from blowing up too much

diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -7127,6 +7127,24 @@
         """
         self.optimize_loop(ops, expected)
 
+    def test_exploding_duplicatipon(self):
+        ops = """
+        [i1, i2]
+        i3 = int_add(i1, i1)
+        i4 = int_add(i3, i3)
+        i5 = int_add(i4, i4)
+        i6 = int_add(i5, i5)
+        call(i6, descr=nonwritedescr)
+        jump(i1, i3)
+        """
+        expected = """
+        [i1, i3, i20, i18]
+        i26 = int_add(i20, i20)
+        call(i26, descr=nonwritedescr)
+        jump(i1, i18, i20, i18)
+        """
+        self.optimize_loop(ops, expected)
+
 class TestLLtype(OptimizeOptTest, LLtypeMixin):
     pass
         
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -531,9 +531,10 @@
         allops = None
         for i in range(len(op.getarglist())):
             arg = op.getarg(i)
-            if len(self.duplicates) > 5:
-                debug_print("Refusing to duplicate short box %d times." % len(self.duplicates))
             if arg in self.duplicates:
+                if len(self.duplicates[arg]) > 5:
+                    debug_print("Refusing to duplicate short box %d times." % len(self.duplicates))
+                    continue
                 if not allops:
                     allops = [op]
                 previous_ops = len(allops)


More information about the pypy-commit mailing list