Author: Ronan Lamy <ronan.l...@gmail.com> Branch: optimizeopt-cleanup Changeset: r96465:f6577bae1fb3 Date: 2019-04-13 23:52 +0100 http://bitbucket.org/pypy/pypy/changeset/f6577bae1fb3/
Log: LoopCompileData.optimize() is only called with unroll=True; simplify optimize() and optimize_trace() diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py --- a/rpython/jit/metainterp/compile.py +++ b/rpython/jit/metainterp/compile.py @@ -35,7 +35,7 @@ for arg in self.trace.inputargs: arg.set_forwarded(None) -class LoopCompileData(CompileData): +class PreambleCompileData(CompileData): """ An object that accumulates all of the necessary info for the optimization phase, but does not actually have any other state @@ -49,19 +49,13 @@ assert runtime_boxes is not None self.runtime_boxes = runtime_boxes - def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll): - from rpython.jit.metainterp.optimizeopt.unroll import (UnrollOptimizer, - Optimizer) - - if unroll: - opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations) - return opt.optimize_preamble(self.trace, - self.runtime_boxes, - self.call_pure_results, - self.box_names_memo) - else: - opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations) - return opt.propagate_all_forward(self.trace, self.call_pure_results) + def optimize(self, metainterp_sd, jitdriver_sd, optimizations): + from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer + opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations) + return opt.optimize_preamble(self.trace, + self.runtime_boxes, + self.call_pure_results, + self.box_names_memo) class SimpleCompileData(CompileData): """ This represents label() ops jump with no extra info associated with @@ -74,11 +68,9 @@ self.call_pure_results = call_pure_results self.enable_opts = enable_opts - def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll): + def optimize(self, metainterp_sd, jitdriver_sd, optimizations): from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer from rpython.jit.metainterp.optimizeopt.bridgeopt import deserialize_optimizer_knowledge - - #assert not unroll opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations) traceiter = self.trace.get_iter() if self.resumestorage: @@ -101,7 +93,7 @@ self.inline_short_preamble = inline_short_preamble self.resumestorage = resumestorage - def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll): + def optimize(self, metainterp_sd, jitdriver_sd, optimizations): from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations) @@ -113,7 +105,7 @@ class UnrolledLoopData(CompileData): """ This represents label() ops jump with extra info that's from the - run of LoopCompileData. Jump goes to the same label + run of PreambleCompileData. Jump goes to the same label """ log_noopt = False @@ -127,10 +119,8 @@ self.call_pure_results = call_pure_results self.inline_short_preamble = inline_short_preamble - def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll): + def optimize(self, metainterp_sd, jitdriver_sd, optimizations): from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer - - assert unroll # we should not be here if it's disabled opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations) return opt.optimize_peeled_loop(self.trace, self.celltoken, self.state, self.call_pure_results, self.inline_short_preamble) @@ -217,7 +207,7 @@ def compile_simple_loop(metainterp, greenkey, trace, runtime_args, enable_opts, cut_at): - from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling + from rpython.jit.metainterp.optimizeopt import optimize_trace jitdriver_sd = metainterp.jitdriver_sd metainterp_sd = metainterp.staticdata @@ -225,11 +215,9 @@ call_pure_results = metainterp.call_pure_results data = SimpleCompileData(trace, call_pure_results=call_pure_results, enable_opts=enable_opts) - use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts) try: loop_info, ops = optimize_trace( - metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo, - use_unrolling=use_unroll) + metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo) except InvalidLoop: metainterp_sd.jitlog.trace_aborted() trace.cut_at(cut_at) @@ -287,13 +275,13 @@ return compile_simple_loop(metainterp, greenkey, trace, jumpargs, enable_opts, cut_at) call_pure_results = metainterp.call_pure_results - preamble_data = LoopCompileData(trace, jumpargs, + preamble_data = PreambleCompileData(trace, jumpargs, call_pure_results=call_pure_results, enable_opts=enable_opts) try: start_state, preamble_ops = optimize_trace( metainterp_sd, jitdriver_sd, preamble_data, - metainterp.box_names_memo, use_unrolling=use_unroll) + metainterp.box_names_memo) except InvalidLoop: metainterp_sd.jitlog.trace_aborted() history.cut(cut_at) @@ -309,8 +297,7 @@ enable_opts=enable_opts) try: loop_info, loop_ops = optimize_trace( - metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo, - use_unrolling=use_unroll) + metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo) except InvalidLoop: metainterp_sd.jitlog.trace_aborted() history.cut(cut_at) @@ -373,15 +360,15 @@ cut = history.get_trace_position() history.record(rop.JUMP, jumpargs[:], None, descr=loop_jitcell_token) enable_opts = jitdriver_sd.warmstate.enable_opts + use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts) + assert use_unroll call_pure_results = metainterp.call_pure_results loop_data = UnrolledLoopData(trace, loop_jitcell_token, start_state, call_pure_results=call_pure_results, enable_opts=enable_opts) - use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts) try: loop_info, loop_ops = optimize_trace( - metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo, - use_unrolling=use_unroll) + metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo) except InvalidLoop: # Fall back on jumping directly to preamble history.cut(cut) @@ -393,7 +380,7 @@ try: loop_info, loop_ops = optimize_trace( metainterp_sd, jitdriver_sd, loop_data, - metainterp.box_names_memo, use_unrolling=use_unroll) + metainterp.box_names_memo) except InvalidLoop: metainterp_sd.jitlog.trace_aborted() history.cut(cut) @@ -1091,8 +1078,7 @@ use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts) try: info, newops = optimize_trace( - metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo, - use_unrolling=use_unroll) + metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo) except InvalidLoop: metainterp_sd.jitlog.trace_aborted() # XXX I am fairly convinced that optimize_bridge cannot actually raise diff --git a/rpython/jit/metainterp/optimizeopt/__init__.py b/rpython/jit/metainterp/optimizeopt/__init__.py --- a/rpython/jit/metainterp/optimizeopt/__init__.py +++ b/rpython/jit/metainterp/optimizeopt/__init__.py @@ -53,8 +53,7 @@ if not is_unrolled: metainterp_sd.logger_noopt.log_loop_from_trace(trace, memo=memo) -def optimize_trace(metainterp_sd, jitdriver_sd, compile_data, - memo=None, use_unrolling=True): +def optimize_trace(metainterp_sd, jitdriver_sd, compile_data, memo=None): """Optimize loop.operations to remove internal overheadish operations. """ debug_start("jit-optimize") @@ -65,8 +64,8 @@ memo = {} compile_data.box_names_memo = memo optimizations = build_opt_chain(compile_data.enable_opts) - return compile_data.optimize(metainterp_sd, jitdriver_sd, - optimizations, unroll=use_unrolling) + return compile_data.optimize( + metainterp_sd, jitdriver_sd, optimizations) finally: compile_data.forget_optimization_info() debug_stop("jit-optimize") diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py @@ -5,7 +5,6 @@ from rpython.rlib.rarithmetic import LONG_BIT from rpython.rtyper import rclass from rpython.rtyper.lltypesystem import lltype -from rpython.jit.metainterp.optimizeopt import use_unrolling from rpython.jit.metainterp.optimizeopt.test.test_util import ( BaseTest, FakeMetaInterpStaticData, convert_old_style_to_targets) from rpython.jit.metainterp.history import ( @@ -34,10 +33,9 @@ expected = convert_old_style_to_targets(exp, jump=True) call_pure_results = self._convert_call_pure_results(call_pure_results) trace = convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu)) - use_unroll = use_unrolling(self.cpu, self.enable_opts) compile_data = compile.SimpleCompileData( trace, call_pure_results=call_pure_results) - info, ops = self._do_optimize_loop(compile_data, use_unroll) + info, ops = self._do_optimize_loop(compile_data) label_op = ResOperation(rop.LABEL, info.inputargs) loop.inputargs = info.inputargs loop.operations = [label_op] + ops diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py @@ -1,4 +1,3 @@ -from rpython.jit.metainterp.optimizeopt import use_unrolling from rpython.jit.metainterp.optimizeopt.test.test_util import ( BaseTest, convert_old_style_to_targets, FakeMetaInterpStaticData) from rpython.jit.metainterp import compile @@ -30,13 +29,12 @@ self.add_guard_future_condition(bridge) trace = oparser.convert_loop_to_trace( bridge, FakeMetaInterpStaticData(self.cpu)) - use_unroll = use_unrolling(self.cpu, self.enable_opts) data = compile.BridgeCompileData( trace, self.convert_values(bridge.operations[-1].getarglist(), bridge_values), None, enable_opts=self.enable_opts, inline_short_preamble=inline_short_preamble) - bridge_info, ops = self._do_optimize_loop(data, use_unroll) + bridge_info, ops = self._do_optimize_loop(data) loop.check_consistency(check_descr=False) info.preamble.check_consistency(check_descr=False) bridge.operations = ([ResOperation(rop.LABEL, bridge_info.inputargs)] + diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py --- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py @@ -11,12 +11,11 @@ from rpython.jit.metainterp.support import ptr2int from rpython.jit.metainterp.optimizeopt.shortpreamble import ( ShortPreambleBuilder, PreambleOp, ShortInputArg) -from rpython.jit.metainterp.compile import LoopCompileData +from rpython.jit.metainterp.compile import PreambleCompileData from rpython.jit.metainterp.optimizeopt.virtualstate import ( NotVirtualStateInfo, LEVEL_CONSTANT, LEVEL_UNKNOWN, LEVEL_KNOWNCLASS, VirtualStateInfo) from rpython.jit.metainterp.optimizeopt import info, optimizer -from rpython.jit.metainterp.optimizeopt import use_unrolling from rpython.jit.tool import oparser class FakeOptimizer(object): @@ -47,9 +46,8 @@ inputargs = loop.inputargs preamble = TreeLoop('preamble') trace = oparser.convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu)) - use_unroll = use_unrolling(self.cpu, self.enable_opts) - compile_data = LoopCompileData(trace, inputargs) - start_state, newops = self._do_optimize_loop(compile_data, use_unroll) + compile_data = PreambleCompileData(trace, inputargs) + start_state, newops = self._do_optimize_loop(compile_data) preamble.operations = newops preamble.inputargs = start_state.renamed_inputargs return start_state, loop, preamble 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 @@ -23,7 +23,7 @@ from rpython.jit.metainterp.resoperation import ( rop, ResOperation, InputArgRef, AbstractValue) from rpython.jit.metainterp.virtualref import VirtualRefInfo -from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling +from rpython.jit.metainterp.optimizeopt import optimize_trace from rpython.jit.metainterp.optimizeopt.util import ( sort_descrs, equaloplists, args_dict) @@ -538,14 +538,13 @@ assert equaloplists(optimized.operations, expected.operations, False, remap, text_right) - def _do_optimize_loop(self, compile_data, use_unroll): + def _do_optimize_loop(self, compile_data): metainterp_sd = FakeMetaInterpStaticData(self.cpu) metainterp_sd.virtualref_info = self.vrefinfo compute_bitstrings(self.cpu.fetch_all_descrs()) # compile_data.enable_opts = self.enable_opts - state = optimize_trace( - metainterp_sd, None, compile_data, use_unrolling=use_unroll) + state = optimize_trace(metainterp_sd, None, compile_data) return state def _convert_call_pure_results(self, d): @@ -583,14 +582,13 @@ jump_op.setdescr(celltoken) call_pure_results = self._convert_call_pure_results(call_pure_results) t = convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu)) - use_unroll = use_unrolling(self.cpu, self.enable_opts) - preamble_data = compile.LoopCompileData(t, runtime_boxes, - call_pure_results) - start_state, preamble_ops = self._do_optimize_loop(preamble_data, use_unroll) + preamble_data = compile.PreambleCompileData( + t, runtime_boxes, call_pure_results, enable_opts=self.enable_opts) + start_state, preamble_ops = self._do_optimize_loop(preamble_data) preamble_data.forget_optimization_info() loop_data = compile.UnrolledLoopData(preamble_data.trace, celltoken, start_state, call_pure_results) - loop_info, ops = self._do_optimize_loop(loop_data, use_unroll) + loop_info, ops = self._do_optimize_loop(loop_data) preamble = TreeLoop('preamble') preamble.inputargs = start_state.renamed_inputargs start_label = ResOperation(rop.LABEL, start_state.renamed_inputargs) diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py --- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py @@ -853,7 +853,7 @@ enable_opts = "intbounds:rewrite:virtualize:string:pure:earlyforce:heap:unroll" def _do_optimize_bridge(self, bridge, call_pure_results, values): - from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling + from rpython.jit.metainterp.optimizeopt import optimize_trace from rpython.jit.metainterp.optimizeopt.util import args_dict self.bridge = bridge @@ -871,9 +871,7 @@ data = compile.BridgeCompileData(trace, runtime_boxes, enable_opts=self.enable_opts, inline_short_preamble=True) - use_unroll = use_unrolling(self.cpu, self.enable_opts) - info, newops = optimize_trace(metainterp_sd, None, data, - use_unrolling=use_unroll) + info, newops = optimize_trace(metainterp_sd, None, data) if info.final(): bridge.operations = newops bridge.inputargs = info.inputargs diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py --- a/rpython/jit/metainterp/test/test_ajit.py +++ b/rpython/jit/metainterp/test/test_ajit.py @@ -2918,9 +2918,8 @@ return i # seen = [] - def my_optimize_trace(metainterp_sd, jitdriver_sd, data, memo=None, - use_unrolling=True): - assert use_unrolling == ('unroll' in data.enable_opts) + def my_optimize_trace(metainterp_sd, jitdriver_sd, data, memo=None): + use_unrolling = ('unroll' in data.enable_opts) seen.append(use_unrolling) raise InvalidLoop old_optimize_trace = optimizeopt.optimize_trace _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit