Author: Hakan Ardo <ha...@debian.org> Branch: jit-targets Changeset: r48903:8ed931ccc062 Date: 2011-11-07 20:08 +0100 http://bitbucket.org/pypy/pypy/changeset/8ed931ccc062/
Log: dont inline short preamble when falling back to the full preamble diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py --- a/pypy/jit/metainterp/compile.py +++ b/pypy/jit/metainterp/compile.py @@ -708,7 +708,7 @@ else: inline_short_preamble = True try: - optimize_trace(metainterp_sd, new_trace, state.enable_opts) + optimize_trace(metainterp_sd, new_trace, state.enable_opts, inline_short_preamble) except InvalidLoop: debug_print("compile_new_bridge: got an InvalidLoop") # XXX I am fairly convinced that optimize_bridge cannot actually raise diff --git a/pypy/jit/metainterp/optimizeopt/__init__.py b/pypy/jit/metainterp/optimizeopt/__init__.py --- a/pypy/jit/metainterp/optimizeopt/__init__.py +++ b/pypy/jit/metainterp/optimizeopt/__init__.py @@ -28,8 +28,7 @@ ALL_OPTS_LIST = [name for name, _ in ALL_OPTS] ALL_OPTS_NAMES = ':'.join([name for name, _ in ALL_OPTS]) -def build_opt_chain(metainterp_sd, enable_opts, - inline_short_preamble=True, retraced=False): +def build_opt_chain(metainterp_sd, enable_opts): config = metainterp_sd.config optimizations = [] unroll = 'unroll' in enable_opts # 'enable_opts' is normally a dict @@ -48,9 +47,6 @@ or 'heap' not in enable_opts or 'unroll' not in enable_opts): optimizations.append(OptSimplify()) - if inline_short_preamble: - optimizations = [OptInlineShortPreamble(retraced)] + optimizations - return optimizations, unroll @@ -81,13 +77,13 @@ if __name__ == '__main__': print ALL_OPTS_NAMES -def optimize_trace(metainterp_sd, loop, enable_opts): +def optimize_trace(metainterp_sd, loop, enable_opts, inline_short_preamble=True): """Optimize loop.operations to remove internal overheadish operations. """ - optimizations, unroll = build_opt_chain(metainterp_sd, enable_opts, True, False) + optimizations, unroll = build_opt_chain(metainterp_sd, enable_opts) if unroll: - optimize_unroll(metainterp_sd, loop, optimizations) + optimize_unroll(metainterp_sd, loop, optimizations, inline_short_preamble) else: optimizer = Optimizer(metainterp_sd, loop, optimizations) optimizer.propagate_all_forward() 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 @@ -14,8 +14,9 @@ # FIXME: Introduce some VirtualOptimizer super class instead -def optimize_unroll(metainterp_sd, loop, optimizations): +def optimize_unroll(metainterp_sd, loop, optimizations, inline_short_preamble=True): opt = UnrollOptimizer(metainterp_sd, loop, optimizations) + opt.inline_short_preamble = inline_short_preamble opt.propagate_all_forward() class UnrollableOptimizer(Optimizer): @@ -23,6 +24,7 @@ self.importable_values = {} self.emitting_dissabled = False self.emitted_guards = 0 + self.inline_short_preamble = True def ensure_imported(self, value): if not self.emitting_dissabled and value in self.importable_values: @@ -464,6 +466,12 @@ if not cell_token.target_tokens: return False + if not self.inline_short_preamble: + assert cell_token.target_tokens[0].virtual_state is None + jumpop.setdescr(cell_token.target_tokens[0]) + self.optimizer.send_extra_operation(jumpop) + return True + args = jumpop.getarglist() modifier = VirtualStateAdder(self.optimizer) virtual_state = modifier.get_virtual_state(args) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit