Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r48717:8ecb5f0cd990 Date: 2011-11-03 20:47 +0100 http://bitbucket.org/pypy/pypy/changeset/8ecb5f0cd990/
Log: merge default diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py --- a/pypy/jit/metainterp/optimizeopt/heap.py +++ b/pypy/jit/metainterp/optimizeopt/heap.py @@ -146,8 +146,6 @@ newresult = result.clonebox() optimizer.make_constant(newresult, result) result = newresult - if result is op.getarg(0): # FIXME: Unsupported corner case?? - continue getop = ResOperation(rop.GETARRAYITEM_GC, [op.getarg(0), op.getarg(1)], result, op.getdescr()) shortboxes.add_potential(getop, synthetic=True) diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -7450,6 +7450,55 @@ """ self.optimize_loop(ops, expected) + def test_setarrayitem_p0_p0(self): + ops = """ + [i0, i1] + p0 = escape() + setarrayitem_gc(p0, 2, p0, descr=arraydescr) + jump(i0, i1) + """ + expected = """ + [i0, i1] + p0 = escape() + setarrayitem_gc(p0, 2, p0, descr=arraydescr) + jump(i0, i1) + """ + self.optimize_loop(ops, expected) + + def test_setfield_p0_p0(self): + ops = """ + [i0, i1] + p0 = escape() + setfield_gc(p0, p0, descr=arraydescr) + jump(i0, i1) + """ + expected = """ + [i0, i1] + p0 = escape() + setfield_gc(p0, p0, descr=arraydescr) + jump(i0, i1) + """ + self.optimize_loop(ops, expected) + + def test_setfield_p0_p1_p0(self): + ops = """ + [i0, i1] + p0 = escape() + p1 = escape() + setfield_gc(p0, p1, descr=adescr) + setfield_gc(p1, p0, descr=bdescr) + jump(i0, i1) + """ + expected = """ + [i0, i1] + p0 = escape() + p1 = escape() + setfield_gc(p0, p1, descr=adescr) + setfield_gc(p1, p0, descr=bdescr) + jump(i0, i1) + """ + self.optimize_loop(ops, expected) + class TestLLtype(OptimizeOptTest, LLtypeMixin): pass diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py --- a/pypy/jit/metainterp/optimizeopt/virtualstate.py +++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py @@ -551,6 +551,7 @@ optimizer.produce_potential_short_preamble_ops(self) self.short_boxes = {} + self.short_boxes_in_production = {} for box in self.potential_ops.keys(): try: @@ -606,6 +607,10 @@ return if isinstance(box, Const): return + if box in self.short_boxes_in_production: + raise BoxNotProducable + self.short_boxes_in_production[box] = True + if box in self.potential_ops: ops = self.prioritized_alternatives(box) produced_one = False diff --git a/pypy/module/__builtin__/functional.py b/pypy/module/__builtin__/functional.py --- a/pypy/module/__builtin__/functional.py +++ b/pypy/module/__builtin__/functional.py @@ -312,10 +312,11 @@ class W_XRange(Wrappable): - def __init__(self, space, start, len, step): + def __init__(self, space, start, stop, step): self.space = space self.start = start - self.len = len + self.stop = stop + self.len = get_len_of_range(space, start, stop, step) self.step = step def descr_new(space, w_subtype, w_start, w_stop=None, w_step=1): @@ -325,9 +326,8 @@ start, stop = 0, start else: stop = _toint(space, w_stop) - howmany = get_len_of_range(space, start, stop, step) obj = space.allocate_instance(W_XRange, w_subtype) - W_XRange.__init__(obj, space, start, howmany, step) + W_XRange.__init__(obj, space, start, stop, step) return space.wrap(obj) def descr_repr(self): @@ -357,12 +357,12 @@ def descr_iter(self): return self.space.wrap(W_XRangeIterator(self.space, self.start, - self.len, self.step)) + self.stop, self.step)) def descr_reversed(self): lastitem = self.start + (self.len-1) * self.step return self.space.wrap(W_XRangeIterator(self.space, lastitem, - self.len, -self.step)) + self.start - 1, -self.step)) def descr_reduce(self): space = self.space @@ -389,25 +389,24 @@ ) class W_XRangeIterator(Wrappable): - def __init__(self, space, current, remaining, step): + def __init__(self, space, start, stop, step): self.space = space - self.current = current - self.remaining = remaining + self.current = start + self.stop = stop self.step = step def descr_iter(self): return self.space.wrap(self) def descr_next(self): - if self.remaining > 0: + if (self.step > 0 and self.current < self.stop) or (self.step < 0 and self.current > self.stop): item = self.current self.current = item + self.step - self.remaining -= 1 return self.space.wrap(item) raise OperationError(self.space.w_StopIteration, self.space.w_None) - def descr_len(self): - return self.space.wrap(self.remaining) + #def descr_len(self): + # return self.space.wrap(self.remaining) def descr_reduce(self): from pypy.interpreter.mixedmodule import MixedModule @@ -418,7 +417,7 @@ w = space.wrap nt = space.newtuple - tup = [w(self.current), w(self.remaining), w(self.step)] + tup = [w(self.current), w(self.stop), w(self.step)] return nt([new_inst, nt(tup)]) W_XRangeIterator.typedef = TypeDef("rangeiterator", diff --git a/pypy/module/_pickle_support/maker.py b/pypy/module/_pickle_support/maker.py --- a/pypy/module/_pickle_support/maker.py +++ b/pypy/module/_pickle_support/maker.py @@ -66,10 +66,10 @@ new_generator.running = running return space.wrap(new_generator) -@unwrap_spec(current=int, remaining=int, step=int) -def xrangeiter_new(space, current, remaining, step): +@unwrap_spec(current=int, stop=int, step=int) +def xrangeiter_new(space, current, stop, step): from pypy.module.__builtin__.functional import W_XRangeIterator - new_iter = W_XRangeIterator(space, current, remaining, step) + new_iter = W_XRangeIterator(space, current, stop, step) return space.wrap(new_iter) @unwrap_spec(identifier=str) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit