Hi Alex, please revert this change, it can lead to combinatorial explosion: it can give a bridge per pattern of where in the list the object is found.
Cheers, Carl Friedrich On 29/08/13 23:47, alex_gaynor wrote: > Author: Alex Gaynor <alex.gay...@gmail.com> > Branch: > Changeset: r66432:185512e0c4df > Date: 2013-08-29 15:47 -0700 > http://bitbucket.org/pypy/pypy/changeset/185512e0c4df/ > > Log: Unroll list.count() when the list is virtual or very small and > constant lenght > > diff --git a/pypy/module/pypyjit/test_pypy_c/test_containers.py > b/pypy/module/pypyjit/test_pypy_c/test_containers.py > --- a/pypy/module/pypyjit/test_pypy_c/test_containers.py > +++ b/pypy/module/pypyjit/test_pypy_c/test_containers.py > @@ -241,3 +241,22 @@ > loop, = log.loops_by_filename(self.filepath) > ops = loop.ops_by_id('getitem', include_guard_not_invalidated=False) > assert log.opnames(ops) == [] > + > + def test_list_count_virtual_list(self): > + def main(n): > + i = 0 > + while i < n: > + i += [n].count(n) > + return i > + > + log = self.run(main, [1000]) > + assert log.result == main(1000) > + loop, = log.loops_by_filename(self.filepath) > + assert loop.match(""" > + i7 = int_lt(i5, i6) > + guard_true(i7, descr=...) > + guard_not_invalidated(descr=...) > + i9 = int_add(i5, 1) > + --TICK-- > + jump(..., descr=...) > + """) > diff --git a/pypy/objspace/std/listobject.py b/pypy/objspace/std/listobject.py > --- a/pypy/objspace/std/listobject.py > +++ b/pypy/objspace/std/listobject.py > @@ -562,6 +562,8 @@ > 'L.reverse() -- reverse *IN PLACE*' > self.reverse() > > + @jit.look_inside_iff(lambda self, space, w_value: > + jit.loop_unrolling_heuristic(self, self.length(), UNROLL_CUTOFF)) > def descr_count(self, space, w_value): > '''L.count(value) -> integer -- return number of > occurrences of value''' > _______________________________________________ > pypy-commit mailing list > pypy-com...@python.org > http://mail.python.org/mailman/listinfo/pypy-commit > _______________________________________________ pypy-dev mailing list pypy-dev@python.org http://mail.python.org/mailman/listinfo/pypy-dev