[pypy-commit] pypy jit-targets: a bit more cloning to get a short_preamble for the fallback that does not contain ops from the failed optimization attempt
hakanardo
noreply at buildbot.pypy.org
Sun Dec 11 15:19:59 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-targets
Changeset: r50384:4c3b1c0a071a
Date: 2011-12-11 14:23 +0100
http://bitbucket.org/pypy/pypy/changeset/4c3b1c0a071a/
Log: a bit more cloning to get a short_preamble for the fallback that
does not contain ops from the failed optimization attempt
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
@@ -207,6 +207,7 @@
[h_ops[i].clone() for i in range(start, len(h_ops))] + \
[ResOperation(rop.JUMP, jumpargs, None, descr=loop_jitcell_token)]
label = part.operations[0]
+ orignial_label = label.clone()
assert label.getopnum() == rop.LABEL
try:
optimize_trace(metainterp_sd, part, jitdriver_sd.warmstate.enable_opts)
@@ -216,12 +217,13 @@
target_token = label.getdescr()
assert isinstance(target_token, TargetToken)
assert target_token.exported_state
- part.operations = [label] + \
+ part.operations = [orignial_label] + \
[ResOperation(rop.JUMP, target_token.exported_state.jump_args,
None, descr=loop_jitcell_token)]
try:
optimize_trace(metainterp_sd, part, jitdriver_sd.warmstate.enable_opts,
inline_short_preamble=False)
+
except InvalidLoop:
return None
assert part.operations[-1].getopnum() != rop.LABEL
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
@@ -188,7 +188,7 @@
return
self.did_import = True
- self.short = target_token.short_preamble
+ self.short = target_token.short_preamble[:]
self.short_seen = {}
self.short_boxes = exported_state.short_boxes.clone()
for box, const in exported_state.constant_inputargs.items():
More information about the pypy-commit
mailing list