Author: Hakan Ardo <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit