[pypy-dev] Duplicated guards

Hakan Ardo hakan at debian.org
Sat Aug 20 10:32:11 CEST 2011


Hi,
I've been experimenting a bit with heuristics such as "not retracing
loops with a lot of guards" or "not unrolling if the peel loop is not
much better than the preamble". In some situations is seem possible to
increase performace by such means (go: +37%, html5lib: +13%, rietveld:
+8%). However I think the real problem is that we duplicate guards and
that this leads to an explosion of bridges. I added
test_excessive_bridgeing to test_ajit on the jit-limit_peeling branch.
It is a simple example where the last part of the loop is traced 8
times producing 8 identical bridges.

Is there any chance of identifying copies of "the same guard" (in some
sens that considers both the address of the guard and the state of
virtuals) and when the second copy of the guards is about to be traced
we would just connect it to the already compiled bridge? Maybe by
producing a small header-bridge that moves things around and then
jumps to the already compiled bridge?

-- 
Håkan Ardö


More information about the pypy-dev mailing list