[pypy-commit] pypy jit-targets: dont inline short preamble when falling back to the full preamble
hakanardo
noreply at buildbot.pypy.org
Tue Nov 8 10:27:02 CET 2011
Author: Hakan Ardo <hakan at 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)
More information about the pypy-commit
mailing list