[pypy-dev] [pypy-commit] pypy default: Unroll list.count() when the list is virtual or very small and constant lenght
Carl Friedrich Bolz
cfbolz at gmx.de
Fri Aug 30 11:23:07 CEST 2013
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.gaynor at 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-commit at python.org
> http://mail.python.org/mailman/listinfo/pypy-commit
>
More information about the pypy-dev
mailing list