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