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