Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r78357:9f67e775a106 Date: 2015-06-30 11:04 +0200 http://bitbucket.org/pypy/pypy/changeset/9f67e775a106/
Log: add GUARD_VALUE for short preamble diff --git a/rpython/jit/metainterp/optimizeopt/intutils.py b/rpython/jit/metainterp/optimizeopt/intutils.py --- a/rpython/jit/metainterp/optimizeopt/intutils.py +++ b/rpython/jit/metainterp/optimizeopt/intutils.py @@ -245,6 +245,10 @@ return res def make_guards(self, box, guards): + if self.is_constant(): + guards.append(ResOperation(rop.GUARD_VALUE, + [box, ConstInt(self.upper)])) + return if self.has_lower and self.lower > MININT: bound = self.lower op = ResOperation(rop.INT_GE, [box, ConstInt(bound)]) 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 @@ -442,12 +442,13 @@ else: return CONST_0 - def propagate_all_forward(self, clear=True): + def propagate_all_forward(self, clear=True, create_inp_args=True): if clear: self.clear_newoperations() - self.inparg_dict = {} - for op in self.loop.inputargs: - self.inparg_dict[op] = None + if create_inp_args: + self.inparg_dict = {} + for op in self.loop.inputargs: + self.inparg_dict[op] = None for op in self.loop.operations: self._really_emitted_operation = None 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 @@ -450,7 +450,7 @@ [i0] i1 = int_is_true(i0) guard_value(i1, 1) [] - jump(i0) + #jump(i0) <- xxx """ self.optimize_loop(ops, expected, preamble, 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 @@ -27,8 +27,9 @@ class PreambleOp(AbstractResOp): - def __init__(self, op): + def __init__(self, op, info): self.op = op + self.info = info def getarg(self, i): return self.op.getarg(i) @@ -56,9 +57,11 @@ self.emitted_guards += 1 # FIXME: can we use counter in self._emit_operation? self._emit_operation(op) - def force_op_from_preamble(self, op): - op = op.op + def force_op_from_preamble(self, preamble_op): + op = preamble_op.op self.optunroll.short.append(op) + if preamble_op.info: + preamble_op.info.make_guards(op, self.optunroll.short) return op @@ -117,7 +120,12 @@ jumpop = None self.import_state(start_label, starting_state) - self.optimizer.propagate_all_forward(clear=False) + self.optimizer.inparg_dict = {} + for box in start_label.getarglist(): + self.optimizer.inparg_dict[box] = None + import pdb + pdb.set_trace() + self.optimizer.propagate_all_forward(clear=False, create_inp_args=False) if not jumpop: return @@ -311,7 +319,8 @@ if not op: continue if op.is_always_pure(): - self.pure(op.getopnum(), PreambleOp(op)) + self.pure(op.getopnum(), + PreambleOp(op, self.optimizer.getinfo(op))) else: yyy return diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py --- a/rpython/jit/metainterp/optimizeopt/virtualstate.py +++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py @@ -589,7 +589,7 @@ state.append(self.visit_not_virtual(box)) elif box.type == 'i': intbound = opt.getintbound(box) - state.append(self.visit_not_ptr(box, intbound)) + state.append(self.visit_not_virtual(box)) else: xxx #values = [self.getvalue(box).force_at_end_of_preamble(already_forced, _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit