Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79131:3e5dc110b2ac
Date: 2015-08-22 09:08 +0200
http://bitbucket.org/pypy/pypy/changeset/3e5dc110b2ac/

Log:    yay pass test_loop_invariant_mul_bridge_ovf2

diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -300,7 +300,7 @@
     loop.operations = ([start_label] + preamble_ops + loop_info.extra_same_as +
                        [mid_label] + loop_ops)
     loop.check_consistency()
-    jitcell_token.target_tokens = [mid_descr_token, start_descr]
+    jitcell_token.target_tokens = [start_descr, mid_descr_token]
     send_loop_to_backend(greenkey, jitdriver_sd, metainterp_sd, loop, "loop")
     record_loop_or_bridge(metainterp_sd, loop)
     return start_descr
@@ -1015,13 +1015,11 @@
     call_pure_results = metainterp.call_pure_results
 
     if operations[-1].getopnum() == rop.JUMP:
-        jump_op = operations[-1]
         data = BridgeCompileData(label, operations[:],
                                  call_pure_results=call_pure_results,
                                  enable_opts=enable_opts,
                                  inline_short_preamble=inline_short_preamble)
     else:
-        jump_op = None
         data = SimpleCompileData(label, operations[:],
                                  call_pure_results=call_pure_results,
                                  enable_opts=enable_opts)
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
@@ -8,6 +8,7 @@
 from rpython.jit.metainterp.optimizeopt.virtualstate import (
     VirtualStateConstructor, VirtualStatesCantMatch)
 from rpython.jit.metainterp.resoperation import rop, ResOperation
+from rpython.jit.metainterp import compile
 
 class UnrollableOptimizer(Optimizer):
     def force_op_from_preamble(self, preamble_op):
@@ -130,13 +131,19 @@
 
     def optimize_bridge(self, start_label, operations, call_pure_results,
                         inline_short_preamble):
-        assert inline_short_preamble
         self._check_no_forwarding([start_label.getarglist(),
                                     operations])
         info, ops = self.optimizer.propagate_all_forward(
             start_label.getarglist()[:], operations[:-1],
             call_pure_results, True)
         jump_op = operations[-1]
+        if not inline_short_preamble:
+            cell_token = jump_op.getdescr()
+            assert cell_token.target_tokens[0].virtual_state is None
+            jump_op = jump_op.copy_and_change(rop.JUMP,
+                                        descr=cell_token.target_tokens[0])
+            self.optimizer.send_extra_operation(jump_op)
+            return info, self.optimizer._newoperations[:]
         vs = self.jump_to_existing_trace(jump_op, inline_short_preamble)
         if vs is None:
             return info, self.optimizer._newoperations[:]
@@ -196,7 +203,8 @@
             self.make_equal_to(short_inputargs[i], jump_args[i])
         for op in short_ops:
             if op.is_guard():
-                op = self.replace_op_with(op, op.getopnum())
+                op = self.replace_op_with(op, op.getopnum(),
+                                          
descr=compile.ResumeAtPositionDescr())
                 op.rd_snapshot = patchguardop.rd_snapshot
                 op.rd_frame_info_list = patchguardop.rd_frame_info_list
             self.optimizer.send_extra_operation(op)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to