Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r78482:b69837aebecf Date: 2015-07-07 09:36 +0200 http://bitbucket.org/pypy/pypy/changeset/b69837aebecf/
Log: invent new names for inputargs too, we need to rethink the check_lazy_fail_args at some point 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 @@ -5,7 +5,8 @@ from rpython.jit.metainterp.optimizeopt.intutils import IntBound,\ ConstIntBound, MININT, MAXINT from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method -from rpython.jit.metainterp.resoperation import rop, AbstractResOp, GuardResOp +from rpython.jit.metainterp.resoperation import rop, AbstractResOp, GuardResOp,\ + OpHelpers from rpython.jit.metainterp.optimizeopt import info from rpython.jit.metainterp.typesystem import llhelper from rpython.rlib.objectmodel import specialize, we_are_translated @@ -19,6 +20,13 @@ llhelper.CONST_NULLREF = llhelper.CONST_NULL REMOVED = AbstractResOp() +class LoopInfo(object): + pass + +class BasicLoopInfo(LoopInfo): + def __init__(self, inputargs): + self.inputargs = inputargs + class Optimization(object): next_optimization = None @@ -286,15 +294,9 @@ zzz def get_box_replacement(self, op): - from rpython.jit.metainterp.optimizeopt.unroll import PreambleOp - - orig_op = op if op is None: return op - res = op.get_box_replacement() - if isinstance(res, PreambleOp): - xxx - return res + return op.get_box_replacement() def force_box(self, op): op = self.get_box_replacement(op) @@ -432,7 +434,12 @@ return CONST_0 def propagate_all_forward(self, inputargs, ops, call_pure_results=None): - self.init_inparg_dict_from(inputargs) + newargs = [] + for inparg in inputargs: + new_arg = OpHelpers.inputarg_from_tp(inparg.type) + inparg.set_forwarded(new_arg) + newargs.append(new_arg) + self.init_inparg_dict_from(newargs) self.call_pure_results = call_pure_results for op in ops: self._really_emitted_operation = None @@ -441,7 +448,7 @@ #self.loop.quasi_immutable_deps = self.quasi_immutable_deps # accumulate counters self.resumedata_memo.update_counters(self.metainterp_sd.profiler) - return None, self._newoperations + return BasicLoopInfo(newargs), self._newoperations def send_extra_operation(self, op): self.first_optimization.propagate_forward(op) diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py @@ -84,7 +84,9 @@ call_pure_results = self._convert_call_pure_results(call_pure_results) compile_data = compile.SimpleCompileData(label_op, loop.operations, call_pure_results) - _, ops = self._do_optimize_loop(compile_data) + info, ops = self._do_optimize_loop(compile_data) + label_op = ResOperation(rop.LABEL, info.inputargs) + loop.inputargs = info.inputargs loop.operations = [label_op] + ops #print '\n'.join([str(o) for o in loop.operations]) self.loop = loop 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 @@ -3332,7 +3332,6 @@ self.optimize_loop(ops, expected) def test_int_and_or_with_zero(self): - xxx ops = """ [i0, i1] i2 = int_and(i0, 0) 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 @@ -420,7 +420,6 @@ # compile_data.enable_opts = self.enable_opts state = optimize_trace(metainterp_sd, None, compile_data) - compile_data.forget_optimization_info() return state def _convert_call_pure_results(self, d): 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 @@ -5,7 +5,7 @@ from rpython.jit.metainterp.optimize import InvalidLoop from rpython.jit.metainterp.optimizeopt import info from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\ - Optimization + Optimization, LoopInfo from rpython.jit.metainterp.optimizeopt.virtualstate import (VirtualStateConstructor, BadVirtualState, VirtualStatesCantMatch) from rpython.jit.metainterp.resoperation import rop, ResOperation,\ @@ -257,7 +257,8 @@ # by short preamble for op, preamble_op in exported_state.short_boxes.items(): if preamble_op.is_always_pure(): - self.pure(op.getopnum(), PreambleOp(op, preamble_op, None)) + self.pure(op.getopnum(), PreambleOp(op, preamble_op, + self.optimizer.getinfo(op))) else: yyy @@ -694,8 +695,6 @@ 'it has at the start of the target loop') i += 1 -class LoopInfo(object): - pass class UnrollInfo(LoopInfo): """ A state after optimizing the peeled loop, contains the following: diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py --- a/rpython/jit/metainterp/resoperation.py +++ b/rpython/jit/metainterp/resoperation.py @@ -34,10 +34,12 @@ def get_box_replacement(op): orig_op = op + c = 0 while (op.get_forwarded() is not None and not op.get_forwarded().is_info_class): + c += 1 op = op.get_forwarded() - if op is not orig_op: + if op is not orig_op and c > 1: orig_op.set_forwarded(op) return op @@ -1136,3 +1138,13 @@ opnum == rop.CALL_RELEASE_GIL_R or opnum == rop.CALL_RELEASE_GIL_F or opnum == rop.CALL_RELEASE_GIL_N) + + @staticmethod + def inputarg_from_tp(tp): + if tp == 'i': + return InputArgInt() + elif tp == 'r': + return InputArgRef() + else: + assert tp == 'f' + return InputArgFloat() _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit