Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78543:e6d31ebd3035
Date: 2015-07-13 09:32 +0200
http://bitbucket.org/pypy/pypy/changeset/e6d31ebd3035/
Log: small fixes
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -306,11 +306,10 @@
# XXX hack, use stuff on info somehow, a bit on the hard side
# but doable :-)
try:
- preamble_op = self.optunroll.ops_to_import[op]
+ self.optunroll.ops_to_import[op]
except KeyError:
pass
else:
- self.optunroll.short.append(preamble_op)
self.optunroll.extra_label_args.append(op)
del self.optunroll.ops_to_import[op]
if info is not None:
@@ -468,6 +467,11 @@
self.resumedata_memo.update_counters(self.metainterp_sd.profiler)
return BasicLoopInfo(newargs), self._newoperations
+ def _clean_optimization_info(self, lst):
+ for op in lst:
+ if op.get_forwarded() is not None:
+ op.set_forwarded(None)
+
def send_extra_operation(self, op):
self.first_optimization.propagate_forward(op)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -8103,9 +8103,9 @@
jump(i1, i3)
"""
expected = """
- [i1, i2, i6, i3]
- call_n(i6, descr=nonwritedescr)
- jump(i1, i3, i6, i3)
+ [i1, i2, i3]
+ call_n(i3, descr=nonwritedescr)
+ jump(i1, i2, i3)
"""
short = """
[i1, i2]
@@ -8113,7 +8113,7 @@
i4 = int_add(i3, i3)
i5 = int_add(i4, i4)
i6 = int_add(i5, i5)
- jump(i1, i2, i6, i3)
+ #jump(i1, i2, i6, i3)
"""
self.optimize_loop(ops, expected, expected_short=short)
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
@@ -3,9 +3,9 @@
from rpython.jit.metainterp.history import TargetToken, JitCellToken, Const
from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes
from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.optimizeopt import info
+from rpython.jit.metainterp.optimizeopt import info, intutils
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\
- Optimization, LoopInfo
+ Optimization, LoopInfo, MININT, MAXINT
from rpython.jit.metainterp.optimizeopt.virtualstate import
(VirtualStateConstructor,
BadVirtualState, VirtualStatesCantMatch)
from rpython.jit.metainterp.resoperation import rop, ResOperation,\
@@ -50,6 +50,7 @@
op = self.get_box_replacement(op)
if isinstance(preamble_info, info.PtrInfo):
if preamble_info.is_virtual():
+ # XXX do we want to sanitize this?
op.set_forwarded(preamble_info)
return
if op.is_constant():
@@ -59,6 +60,15 @@
self.make_constant_class(op, known_class, False)
if preamble_info.is_nonnull():
self.make_nonnull(op)
+ elif isinstance(preamble_info, intutils.IntBound):
+ if preamble_info.lower > MININT/2 or preamble_info.upper <
MAXINT/2:
+ intbound = self.getintbound(op)
+ if preamble_info.lower > MININT/2:
+ intbound.has_lower = True
+ intbound.lower = preamble_info.lower
+ if preamble_info.upper < MAXINT/2:
+ intbound.has_upper = True
+ intbound.upper = preamble_info.upper
class UnrollOptimizer(Optimization):
@@ -88,9 +98,12 @@
self._check_no_forwarding([[start_label, end_label], ops])
info, newops = self.optimizer.propagate_all_forward(
start_label.getarglist()[:], ops)
- self.flush()
+ self.optimizer.flush()
exported_state = self.export_state(start_label, end_label,
info.inputargs)
+ # we need to absolutely make sure that we've cleaned up all
+ # the optimization info
+ self.optimizer._clean_optimization_info(self.optimizer._newoperations)
return exported_state, self.optimizer._newoperations
def optimize_peeled_loop(self, start_label, end_jump, ops, state):
@@ -107,7 +120,7 @@
jump_args = state.virtual_state.make_inputargs(jump_args,
self.optimizer, force_boxes=True) + args_from_extras
- self.flush()
+ self.optimizer.flush()
jump_op = ResOperation(rop.JUMP, jump_args)
self.optimizer._newoperations.append(jump_op)
return (UnrollInfo(self.make_short_preamble(start_label.getarglist()),
@@ -226,10 +239,8 @@
for box in sb.short_boxes:
infos[box] = self.optimizer.getinfo(box)
label_args = virtual_state.make_inputargs(end_args, self.optimizer)
- for arg in end_args:
- if arg.get_forwarded() is not None:
- arg.set_forwarded(None) # forget the optimization info
- # (it's by infos exported)
+ self.optimizer._clean_optimization_info(end_args)
+ self.optimizer._clean_optimization_info(start_label.getarglist())
return ExportedState(label_args, inparg_mapping, virtual_state, infos,
sb.short_boxes, renamed_inputargs)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit