http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50204
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2011-08-27 CC| |rguenth at gcc dot gnu.org Ever Confirmed|0 |1 --- Comment #1 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-08-27 08:13:12 UTC --- This is because we have, for the 2nd load <bb 6>: # .MEM_4 = PHI <.MEM_7(3), .MEM_6(D)(4), .MEM_8(5)> # VUSE <.MEM_4> opening.0_3 = opening; if (opening.0_3 != 4) Thus three incoming edges. The walker in SCCVN does not try to handle more than two, see tree-ssa-alias.c:get_continuation_for_phi (). In principle one can handle N PHI arguments by reducing them to N - 1 PHI arguments by handling two of them and reducing them to the dominating continuation. And then iterate. But the idea of get_continuation_for_phi () is to make this walk linear which it wouldn't be for this case. Confirmed anyway. I suppose it's not performance critical for crafty to see this redundant load?