[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