Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79328:00a0ca84a79d Date: 2015-08-31 19:12 +0200 http://bitbucket.org/pypy/pypy/changeset/00a0ca84a79d/
Log: finish the weird modify-short-preamble-in-place diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py b/rpython/jit/metainterp/optimizeopt/shortpreamble.py --- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py +++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py @@ -344,7 +344,32 @@ empty_info = EmptyInfo() class AbstractShortPreambleBuilder(object): - pass + def use_box(self, box, preamble_op, optimizer=None): + for arg in preamble_op.getarglist(): + if isinstance(arg, Const): + continue + if isinstance(arg, AbstractInputArg): + info = arg.get_forwarded() + if info is not None and info is not empty_info: + info.make_guards(arg, self.short) + elif arg.get_forwarded() is None: + pass + else: + self.short.append(arg) + info = arg.get_forwarded() + if info is not empty_info: + info.make_guards(arg, self.short) + arg.set_forwarded(None) + self.short.append(preamble_op) + if preamble_op.is_ovf(): + self.short.append(ResOperation(rop.GUARD_NO_OVERFLOW, [], None)) + info = preamble_op.get_forwarded() + preamble_op.set_forwarded(None) + if optimizer is not None: + optimizer.setinfo_from_preamble(box, info, None) + if info is not empty_info: + info.make_guards(preamble_op, self.short) + return preamble_op class ShortPreambleBuilder(AbstractShortPreambleBuilder): """ ShortPreambleBuilder is used during optimizing of the peeled loop, @@ -372,33 +397,6 @@ self.extra_same_as = [] self.short_inputargs = short_inputargs - def use_box(self, box, preamble_op, optimizer=None): - for arg in preamble_op.getarglist(): - if isinstance(arg, Const): - continue - if isinstance(arg, AbstractInputArg): - info = arg.get_forwarded() - if info is not None and info is not empty_info: - info.make_guards(arg, self.short) - elif arg.get_forwarded() is None: - pass - else: - self.short.append(arg) - info = arg.get_forwarded() - if info is not empty_info: - info.make_guards(arg, self.short) - arg.set_forwarded(None) - self.short.append(preamble_op) - if preamble_op.is_ovf(): - self.short.append(ResOperation(rop.GUARD_NO_OVERFLOW, [], None)) - info = preamble_op.get_forwarded() - preamble_op.set_forwarded(None) - if optimizer is not None: - optimizer.setinfo_from_preamble(box, info, None) - if info is not empty_info: - info.make_guards(preamble_op, self.short) - return preamble_op - def add_preamble_op(self, preamble_op): """ Notice that we're actually using the preamble_op, add it to label and jump @@ -444,3 +442,8 @@ self.sb.label_dict[op] = None self.label_args.append(op) self.jump_args.append(preamble_op.preamble_op) + + def use_box(self, box, preamble_op, optimizer=None): + jump_op = self.short.pop() + AbstractShortPreambleBuilder.use_box(self, box, preamble_op, optimizer) + self.short.append(jump_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 @@ -8372,9 +8372,9 @@ expected = """ [p1, p2] call_n(p2, descr=nonwritedescr) + ifoo = arraylen_gc(p1, descr=gcarraydescr) # killed p3 = new_with_vtable(descr=nodesize) setarrayitem_gc(p1, 3, p3, descr=gcarraydescr) - ifoo = arraylen_gc(p1, descr=gcarraydescr) # killed jump(p1, p3) """ self.optimize_loop(ops, expected) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit