Author: Hakan Ardo <ha...@debian.org>
Branch: jit-duplicated_short_boxes
Changeset: r46684:5a623ddb5a5c
Date: 2011-08-21 15:52 +0200
http://bitbucket.org/pypy/pypy/changeset/5a623ddb5a5c/

Log:    only accept loop invariant ops into the short preamble

diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py 
b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -129,13 +129,26 @@
             inputargs = virtual_state.make_inputargs(values)
             short_inputargs = virtual_state.make_inputargs(values, 
keyboxes=True)
 
+            loop_invariants = []
+            assert len(jump_args) == len(loop.inputargs)
+            for i in range(len(jump_args)):
+                v1 = self.getvalue(jump_args[i])
+                v2 = self.getvalue(loop.inputargs[i])
+                if v1 is v2:
+                    loop_invariants.append(jump_args[i])
+
             self.constant_inputargs = {}
             for box in jump_args: 
                 const = self.get_constant_box(box)
                 if const:
                     self.constant_inputargs[box] = const
 
-            sb = ShortBoxes(self.optimizer, inputargs + 
self.constant_inputargs.keys())
+            if os.getenv('FULLSHORT'):
+                sb = ShortBoxes(self.optimizer,
+                                inputargs + self.constant_inputargs.keys())
+            else:
+                sb = ShortBoxes(self.optimizer,
+                                loop_invariants + 
self.constant_inputargs.keys())
             self.short_boxes = sb
             preamble_optimizer = self.optimizer
             loop.preamble.quasi_immutable_deps = (
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
@@ -12,6 +12,7 @@
 from pypy.rlib.objectmodel import we_are_translated
 from pypy.rlib.debug import debug_start, debug_stop, debug_print
 from pypy.rlib.objectmodel import we_are_translated
+import os
 
 class AbstractVirtualStateInfo(resume.AbstractVirtualInfo):
     position = -1
@@ -475,8 +476,8 @@
                 self.produce_short_preamble_box(box)
             except BoxNotProducable:
                 pass
-
-        self.duplicate_short_boxes_if_needed()
+        if not os.getenv('DONT_DUPLICATE'):
+            self.duplicate_short_boxes_if_needed()
 
     def produce_short_preamble_box(self, box):
         if box in self.short_boxes:
diff --git a/pypy/jit/metainterp/test/test_virtualstate.py 
b/pypy/jit/metainterp/test/test_virtualstate.py
--- a/pypy/jit/metainterp/test/test_virtualstate.py
+++ b/pypy/jit/metainterp/test/test_virtualstate.py
@@ -996,3 +996,10 @@
                                               self.i3))
         sb = ShortBoxes(Optimizer(), [self.p1, self.p2])
         assert len(sb.short_boxes) == 5
+
+    def duplicate_duplicaded_box(self):
+        pass
+
+    def duplucate_on_both_arguments(self):
+        pass
+    
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to