Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r78548:3a0e074cc535 Date: 2015-07-13 20:00 +0200 http://bitbucket.org/pypy/pypy/changeset/3a0e074cc535/
Log: improve the situation somewhat, despite failing tests 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 @@ -9,12 +9,12 @@ def __init__(self): self.potential_ops = [] self.produced_short_boxes = {} - self.ops_used = {} self.extra_same_as = [] def create_short_boxes(self, optimizer, inputargs): for box in inputargs: - self.ops_used[box] = None + self.produced_short_boxes[box] = None + optimizer.produce_potential_short_preamble_ops(self) self.short_boxes = [] @@ -33,19 +33,13 @@ self.produced_short_boxes[op] = None def produce_short_preamble_op(self, op, preamble_op): - if isinstance(op, Const): - pass - elif isinstance(op, AbstractInputArg): - if op not in self.ops_used: - return - else: - for arg in op.getarglist(): - if isinstance(arg, Const): - pass - elif arg in self.ops_used: - pass - else: - return # can't produce + for arg in preamble_op.getarglist(): + if isinstance(arg, Const): + pass + elif arg in self.produced_short_boxes: + pass + else: + return # can't produce if op in self.produced_short_boxes: opnum = OpHelpers.same_as_for_type(op.type) same_as_op = ResOperation(opnum, [op]) @@ -59,4 +53,3 @@ self.potential_ops.append((op, op)) else: self.potential_ops.append((op, short_preamble_op)) - self.ops_used[op] = None 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 @@ -867,21 +867,21 @@ def test_dont_delay_setfields(self): ops = """ [p1, p2] - i1 = getfield_gc_i(p1, descr=nextdescr) + i1 = getfield_gc_i(p1, descr=valuedescr) i2 = int_sub(i1, 1) i2b = int_is_true(i2) guard_true(i2b) [] - setfield_gc(p2, i2, descr=nextdescr) + setfield_gc(p2, i2, descr=valuedescr) p3 = new_with_vtable(descr=nodesize) jump(p2, p3) """ preamble = """ [p1, p2] - i1 = getfield_gc_i(p1, descr=nextdescr) + i1 = getfield_gc_i(p1, descr=valuedescr) i2 = int_sub(i1, 1) i2b = int_is_true(i2) guard_true(i2b) [] - setfield_gc(p2, i2, descr=nextdescr) + setfield_gc(p2, i2, descr=valuedescr) jump(p2, i2) """ expected = """ @@ -890,7 +890,7 @@ i2b = int_is_true(i2) guard_true(i2b) [] p3 = new_with_vtable(descr=nodesize) - setfield_gc(p3, i2, descr=nextdescr) + setfield_gc(p3, i2, descr=valuedescr) jump(p3, i2) """ self.optimize_loop(ops, expected, preamble) 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 @@ -228,7 +228,8 @@ end_args = [self.get_box_replacement(a) for a in original_label_args] virtual_state = self.get_virtual_state(end_args) sb = ShortBoxes() - sb.create_short_boxes(self.optimizer, end_args) + sb.create_short_boxes(self.optimizer, [self.get_box_replacement(a) + for a in start_label.getarglist()]) inparg_mapping = [(start_label.getarg(i), end_args[i]) for i in range(len(end_args)) if start_label.getarg(i) is not end_args[i]] _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit