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