Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78480:127dc1dae3be
Date: 2015-07-06 18:49 +0200
http://bitbucket.org/pypy/pypy/changeset/127dc1dae3be/
Log: fix for guard_value
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
@@ -75,7 +75,7 @@
class UnrolledLoopData(CompileData):
""" This represents label() ops jump with extra info that's from the
- run of LoopCompileData
+ run of LoopCompileData. Jump goes to the same label
"""
def __init__(self, start_label, end_jump, operations, state,
call_pure_results=None):
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -445,12 +445,14 @@
preamble_data.forget_optimization_info()
end_label = ResOperation(rop.LABEL, start_state.end_args)
loop_data = compile.UnrolledLoopData(end_label, jump_op,
- ops + [jump_op], start_state)
+ ops, start_state)
_, ops = self._do_optimize_loop(loop_data, call_pure_results)
preamble = TreeLoop('preamble')
preamble.inputargs = start_label.getarglist()
preamble.operations = [start_label] + preamble_ops
- loop.operations = [end_label] + ops
+ emit_end_label = ResOperation(rop.LABEL, start_state.end_args)
+ loop.inputargs = start_state.end_args
+ loop.operations = [emit_end_label] + ops
return Info(preamble)
def foo(self):
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
@@ -79,6 +79,12 @@
self._check_no_forwarding([[start_label, end_jump], ops])
self.import_state(start_label, state)
self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops)
+ jump_args = [self.get_box_replacement(op)
+ for op in end_jump.getarglist()]
+ jump_args = state.virtual_state.make_inputargs(jump_args,
+ self.optimizer)
+ jump_op = ResOperation(rop.JUMP, jump_args)
+ self.optimizer._newoperations.append(jump_op)
return None, self.optimizer._newoperations
def random_garbage(self):
@@ -186,7 +192,8 @@
infos = {}
for arg in end_args:
infos[arg] = self.optimizer.getinfo(arg)
- return ExportedState(end_args, inparg_mapping, virtual_state, infos,
+ label_args = virtual_state.make_inputargs(end_args, self.optimizer)
+ return ExportedState(label_args, inparg_mapping, virtual_state, infos,
sb.short_boxes)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit