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

Log:    apparently it can be called in slightly different circumstances too

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
@@ -527,19 +527,23 @@
     
     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
+        if self.optimizer._newoperations[-1].getopnum() == rop.LEAVE_FRAME:
+            leave_frame_op = self.optimizer._newoperations.pop()
+        else:
+            leave_frame_op = None
         cell_token = jumpop.getdescr()
 
         assert isinstance(cell_token, JitCellToken)
         if not cell_token.target_tokens:
-            self.optimizer._newoperations.append(leave_frame_op)
+            if leave_frame_op is not None:
+                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)
+            if leave_frame_op is not None:
+                self.optimizer._newoperations.append(leave_frame_op)
             self.optimizer.send_extra_operation(jumpop)
             return True
 
@@ -606,11 +610,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)
+                    if leave_frame_op is not None:
+                        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)
+                else:
+                    if leave_frame_op is not None:
+                        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)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to