Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79043:b2a9f450a0b4 Date: 2015-08-18 18:00 +0200 http://bitbucket.org/pypy/pypy/changeset/b2a9f450a0b4/
Log: I *think* this is correct 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 @@ -196,7 +196,8 @@ return ProducedShortOp(self, self.preamble_op) def produce_op(self, opt, preamble_op, exported_infos, invented_name): - assert not invented_name + pass + #assert not invented_name def __repr__(self): return "INP(%r -> %r)" % (self.res, self.preamble_op) @@ -258,6 +259,19 @@ else: return None + def _pick_op_index(self, lst, pick_inparg=True): + index = -1 + for i, item in enumerate(lst): + if (not isinstance(item.short_op, HeapOp) and + (pick_inparg or not isinstance(item.short_op, ShortInputArg))): + if index != -1: + assert pick_inparg + return self._pick_op_index(lst, False) + index = i + if index == -1: + index = 0 + return index + def add_op_to_short(self, shortop): if shortop.res in self.produced_short_boxes: return # already added due to dependencies @@ -268,13 +282,7 @@ if len(lst) == 0: return None else: - index = -1 - for i, item in enumerate(lst): - if not isinstance(item.short_op, HeapOp): - assert index == -1 - index = i - if index == -1: - index = 0 + index = self._pick_op_index(lst) pop = lst[index] for i in range(len(lst)): if i == index: @@ -315,8 +323,6 @@ self.potential_ops[op] = CompoundOp(op, pop, prev_op) def add_pure_op(self, op): - if op in self.potential_ops: - return self.add_potential_op(op, PureOp(op)) def add_loopinvariant_op(self, op): @@ -383,7 +389,7 @@ def add_preamble_op(self, preamble_op): if preamble_op.invented_name: self.extra_same_as.append(preamble_op.op) - self.used_boxes.append(preamble_op.op) + self.used_boxes.append(preamble_op.op) self.short_preamble_jump.append(preamble_op.preamble_op) def build_short_preamble(self): 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 @@ -2395,11 +2395,7 @@ setfield_gc(p1, i2, descr=valuedescr) jump(p1, i1, i2, 1) # , i5) """ - expected_short = """ - [] - """ - self.optimize_loop(ops, expected, preamble, - expected_short=expected_short) + self.optimize_loop(ops, expected, preamble) def test_duplicate_setfield_residual_guard_2(self): # the difference with the previous test is that the field value is @@ -8720,16 +8716,5 @@ """ self.optimize_loop(ops, expected, expected_short=expected_short) - def test_simple_swap_arguments(self): - ops = """ - [i0, i1] - i2 = int_add(i1, 1) - jump(i2, i0) - """ - expected = """ - [] - """ - self.optimize_loop(ops, expected) - class TestLLtype(OptimizeOptTest, LLtypeMixin): pass _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit