[pypy-commit] pypy jit-usable_retrace_3: use the short preamable instead (this is becomming too big a hack)

hakanardo noreply at buildbot.pypy.org
Thu Sep 6 19:57:10 CEST 2012


Author: Hakan Ardo <hakan at debian.org>
Branch: jit-usable_retrace_3
Changeset: r57186:dfe5cc3b6d3d
Date: 2012-09-06 19:56 +0200
http://bitbucket.org/pypy/pypy/changeset/dfe5cc3b6d3d/

Log:	use the short preamable instead (this is becomming too big a hack)

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
@@ -193,6 +193,8 @@
     assert loop_jitcell_token
     assert partial_trace.operations[-1].getopnum() == rop.LABEL
     orignial_label = partial_trace.operations[-1].clone()
+    exported_state = orignial_label.getdescr().exported_state
+
     h_ops = history.operations
 
     preamble = create_empty_loop(metainterp)
@@ -219,7 +221,35 @@
                                         None, descr=loop_jitcell_token)]
         optimize_trace(metainterp_sd, loop, jitdriver_sd.warmstate.enable_opts)
 
-        preamble.operations = preamble.operations[:-1]
+        label = loop.operations[0]
+        assert label.getopnum() == rop.LABEL
+
+        target_token = label.getdescr()
+        assert isinstance(target_token, TargetToken)
+        assert loop_jitcell_token.target_tokens
+        loop_jitcell_token.target_tokens.append(target_token)
+
+        orignial_label.getdescr().exported_state = exported_state # XXX: Hack
+        orignial_label.getdescr().short_preamble = None # XXX: Hack
+
+        preamble.operations = [orignial_label] + \
+                              [ResOperation(rop.JUMP, exported_state.jump_args,
+                                            None, descr=loop_jitcell_token)]
+        try:
+            optimize_trace(metainterp_sd, preamble, jitdriver_sd.warmstate.enable_opts)
+        except InvalidLoop:
+            assert False
+
+        assert loop.operations[0].getopnum() == rop.LABEL
+        assert preamble.operations[0].getopnum() == rop.LABEL
+        jumpop = preamble.operations[-1]
+        assert jumpop.getopnum() == rop.JUMP
+        preamble.operations = preamble.operations[1:-1]
+        for a1, a2 in zip(jumpop.getarglist(), loop.operations[0].getarglist()):
+            if a1 is not a2:
+                preamble.operations.append(ResOperation(rop.SAME_AS, [a1], a2))
+
+        #loop.operations = []
 
     except InvalidLoop:
         # Fall back on jumping to preamble
@@ -244,6 +274,7 @@
     loop = trace # FIXME: rename
 
     assert loop.operations[-1].getopnum() != rop.LABEL
+    # FIXME: done above
     target_token = label.getdescr()
     assert isinstance(target_token, TargetToken)
     assert loop_jitcell_token.target_tokens
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
@@ -232,7 +232,10 @@
             self.initial_virtual_state = virtual_state
             return
         
-        self.short = target_token.short_preamble[:]
+        if target_token.short_preamble:
+            self.short = target_token.short_preamble[:]
+        else:
+            self.short = None
         self.short_seen = {}
         self.short_boxes = exported_state.short_boxes
         self.short_resume_at_jump_descr = target_token.resume_at_jump_descr
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -384,7 +384,7 @@
                 pass
             if value.is_constant():
                 op = ResOperation(rop.SAME_AS, [box], box.clonebox())
-                optimizer._newoperations.append(op)
+                #optimizer._newoperations.append(op) FIXME
                 return optimizer.getvalue(op.result)
             else:
                 v = OptValue(box)


More information about the pypy-commit mailing list