Author: Maciej Fijalkowski <fij...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit