------- Comment #23 from matz at gcc dot gnu dot org 2010-02-19 13:19 ------- Richi: not really. It tries to separate paths where at least one has mostly constants in their PHI args. This applies to this testcase for the first chain of PHI nodes, which are separated as intended. But this simply leads to constant propagation into the next chain of PHI nodes. If repeated until nothing changes this just ripples down the constants further and further but doubles the number of incoming edges for the successor blocks. Until we have the exponential growth in the number of edges, not the number of PHI nodes. I.e. effectively all possible paths are then represented by an edge, as would be expected from a tracer. At that point the last PHI node with constants then would be useless and removed. But we still would have exponential code size growth.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38785