Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r78481:59e4de30e491 Date: 2015-07-06 19:00 +0200 http://bitbucket.org/pypy/pypy/changeset/59e4de30e491/
Log: improve checks for short preamble diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -177,9 +177,6 @@ """ % expected_value self.optimize_loop(ops, expected) - #def test_cast_1(self): - # xxx - def test_reverse_of_cast_1(self): ops = """ [i0] @@ -196,7 +193,7 @@ p3 = cast_int_to_ptr(i2) #jump(i2) <- think about it """ - self.optimize_loop(ops, expected) #, expected_short=short) + self.optimize_loop(ops, expected, expected_short=short) def test_reverse_of_cast_2(self): ops = """ diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py --- a/rpython/jit/metainterp/optimizeopt/test/test_util.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py @@ -446,14 +446,14 @@ end_label = ResOperation(rop.LABEL, start_state.end_args) loop_data = compile.UnrolledLoopData(end_label, jump_op, ops, start_state) - _, ops = self._do_optimize_loop(loop_data, call_pure_results) + loop_info, ops = self._do_optimize_loop(loop_data, call_pure_results) preamble = TreeLoop('preamble') preamble.inputargs = start_label.getarglist() preamble.operations = [start_label] + preamble_ops emit_end_label = ResOperation(rop.LABEL, start_state.end_args) loop.inputargs = start_state.end_args loop.operations = [emit_end_label] + ops - return Info(preamble) + return Info(preamble, loop_info.short_preamble) def foo(self): metainterp_sd = FakeMetaInterpStaticData(self.cpu) diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py --- a/rpython/jit/metainterp/optimizeopt/unroll.py +++ b/rpython/jit/metainterp/optimizeopt/unroll.py @@ -56,7 +56,6 @@ def __init__(self, metainterp_sd, jitdriver_sd, optimizations): self.optimizer = UnrollableOptimizer(metainterp_sd, jitdriver_sd, optimizations) - self.short = [] self.optimizer.optunroll = self def get_virtual_state(self, args): @@ -76,6 +75,7 @@ return exported_state, self.optimizer._newoperations def optimize_peeled_loop(self, start_label, end_jump, ops, state): + self.short = [] self._check_no_forwarding([[start_label, end_jump], ops]) self.import_state(start_label, state) self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops) @@ -85,7 +85,13 @@ self.optimizer) jump_op = ResOperation(rop.JUMP, jump_args) self.optimizer._newoperations.append(jump_op) - return None, self.optimizer._newoperations + return (UnrollInfo(self.make_short_preamble(start_label.getarglist())), + self.optimizer._newoperations) + + def make_short_preamble(self, args): + label = ResOperation(rop.LABEL, args) + short = [label] + self.short + return short def random_garbage(self): # WTF is the rest of this function @@ -688,18 +694,28 @@ 'it has at the start of the target loop') i += 1 -class ShortPreambleBuilder(object): - """ A place that builds short preamble and the necessary - arguments for the label and the jump +class LoopInfo(object): + pass + +class UnrollInfo(LoopInfo): + """ A state after optimizing the peeled loop, contains the following: + + * short_preamble - list of operations that go into short preamble """ - -class ExportedState(object): + def __init__(self, short_preamble): + self.short_preamble = short_preamble + +class ExportedState(LoopInfo): """ Exported state consists of a few pieces of information: * inputarg_mapping - a list of tuples with original inputarg box as the first element and the second element being what it maps to (potentially const) * exported_infos - a mapping from ops to infos, including inputargs + * end_args - arguments that end up in the label leading to the next + iteration + * virtual_state - instance of VirtualState representing current state + of virtuals at this label * short boxes - a mapping op -> preamble_op """ _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit