Author: Hakan Ardo <ha...@debian.org>
Branch: jit-targets
Changeset: r48766:90d65a7d35c3
Date: 2011-11-04 22:19 +0100
http://bitbucket.org/pypy/pypy/changeset/90d65a7d35c3/

Log:    allow orignial jump_args to be used in the peeled loop

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
@@ -97,12 +97,12 @@
                               [ResOperation(rop.TARGET, jump_args, None, 
descr=targettoken)] 
         self._do_optimize_loop(preamble, call_pure_results)
 
-        jump_args = 
preamble.operations[-1].getdescr().exported_state.jump_args  # FIXME!!
         inliner = Inliner(inputargs, jump_args)
         loop.inputargs = None
         loop.start_resumedescr = preamble.start_resumedescr
         loop.operations = [preamble.operations[-1]] + \
                           [inliner.inline_op(op, clone=False) for op in 
cloned_operations]
+
         self._do_optimize_loop(loop, call_pure_results)
         extra_same_as = []
         while loop.operations[0].getopnum() != rop.TARGET:
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
@@ -152,8 +152,8 @@
             loop.operations = self.optimizer.get_newoperations()
 
     def export_state(self, targetop):
-        jump_args = targetop.getarglist()
-        jump_args = [self.getvalue(a).get_key_box() for a in jump_args]
+        original_jump_args = targetop.getarglist()
+        jump_args = [self.getvalue(a).get_key_box() for a in 
original_jump_args]
 
         start_resumedescr = 
self.optimizer.loop.start_resumedescr.clone_if_mutable()
         assert isinstance(start_resumedescr, ResumeGuardDescr)
@@ -173,6 +173,9 @@
                 constant_inputargs[box] = const
 
         short_boxes = ShortBoxes(self.optimizer, inputargs + 
constant_inputargs.keys())
+        for i in range(len(original_jump_args)):
+            if original_jump_args[i] is not jump_args[i]:
+                short_boxes.alias(original_jump_args[i], jump_args[i])
 
         self.optimizer.clear_newoperations()
         for box in short_inputargs:
@@ -215,6 +218,9 @@
             preamble_value = exported_state.optimizer.getvalue(box)
             value = self.optimizer.getvalue(box)
             value.import_from(preamble_value, self.optimizer)
+
+        for newbox, oldbox in self.short_boxes.aliases.items():
+            self.optimizer.make_equal_to(newbox, 
self.optimizer.getvalue(oldbox))
         
         # Setup the state of the new optimizer by emiting the
         # short operations and discarding the result
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to