Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: resume-refactor
Changeset: r68995:d975673661fd
Date: 2014-01-29 18:40 +0100
http://bitbucket.org/pypy/pypy/changeset/d975673661fd/

Log:    hack enough at the unrolling to pass the next test

diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -524,18 +524,22 @@
         if box in self.optimizer.values:
             box = self.optimizer.values[box].force_box(self.optimizer)
         jumpargs.append(box)
-
-    def jump_to_already_compiled_trace(self, jumpop):
+    
+    def jump_to_already_compiled_trace(self, jumpop):    
         assert jumpop.getopnum() == rop.JUMP
+        leave_frame_op = self.optimizer._newoperations.pop()
+        assert leave_frame_op.getopnum() == rop.LEAVE_FRAME
         cell_token = jumpop.getdescr()
 
         assert isinstance(cell_token, JitCellToken)
         if not cell_token.target_tokens:
+            self.optimizer._newoperations.append(leave_frame_op)
             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._newoperations.append(leave_frame_op)
             self.optimizer.send_extra_operation(jumpop)
             return True
 
@@ -586,7 +590,9 @@
                     self.optimizer.send_extra_operation(guard)
 
                 try:
-                    for shop in target.short_preamble[1:]:
+                    stop = len(target.short_preamble) - 1
+                    assert stop >= 0
+                    for shop in target.short_preamble[1:stop]:
                         newop = inliner.inline_op(shop)
                         self.optimizer.send_extra_operation(newop)
                         if shop.result in target.assumed_classes:
@@ -600,9 +606,14 @@
                                 "jumping to preamble instead")
                     assert cell_token.target_tokens[0].virtual_state is None
                     jumpop.setdescr(cell_token.target_tokens[0])
+                    self.optimizer._newoperations.append(leave_frame_op)
                     self.optimizer.send_extra_operation(jumpop)
+                self.optimizer._newoperations.append(leave_frame_op)
+                newop = inliner.inline_op(target.short_preamble[-1])
+                self.optimizer.send_extra_operation(newop)
                 return True
         debug_stop('jit-log-virtualstate')
+        self.optimizer._newoperations.append(leave_frame_op)
         return False
 
 
diff --git a/rpython/jit/resume/frontend.py b/rpython/jit/resume/frontend.py
--- a/rpython/jit/resume/frontend.py
+++ b/rpython/jit/resume/frontend.py
@@ -23,7 +23,7 @@
     def finish(self):
         nextbh = None
         curbh = None
-        for frame in self.framestack:
+        for i, frame in enumerate(self.framestack):
             curbh = self.bhinterpbuilder.acquire_interp()
             curbh.nextblackholeinterp = nextbh
             nextbh = curbh
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to