http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47365

--- Comment #2 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-01-20 
12:01:23 UTC ---
What happens is that when translating D.2739_9 = b.a[0].i; from bb6 to
bb3 value-numbering does look through the aggregate copy b.a[0] = b.a[1];
continuing to look for b.a[1].i and finding D.2737_7 = b.a[1].i; from bb4
(which is ok - the consumer has to check availability).  Thus
b.a[1].i ends up in antic-out (not a problem) with a new value-number,
it doesn't end up in antic-in of bb3.

b.a[0].i is partially redundant in bb6, D.2739_4 is correctly found as
the available expression for it via bb6.  But when we translate
b.a[0].i to bb3 again during insertion we again obtain b.a[1].i
(because it's also still in the phi-translation cache).  It is
obviously not available here so we insert it.  Oops.

We don't prune invalid translations during insertion - that's the
basic problem.  We'd expect to find a leader as the translated
expression has a SCCVN value-number.

The problem is latent on trunk.

Reply via email to