http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146
--- Comment #35 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-08-08 11:49:21 UTC --- (In reply to comment #34) > (In reply to comment #33) > > I think you should simply move compute_global_livein to its single use > > and make it static. > > Yes, and I need to add the same smarts there as in find_uses_to_rename_use to > look through loops at the same nesting level, because this test case fails: > > extern unsigned use (unsigned); > void foo (void) > { > unsigned i, j; > do { i = use (0); } while (i); > do { j = use (0); } while (j); > if (i) use (j); > } > > It fails in check_loop_closed_ssa_use at -O2 but passes at -O2 -fno-tree-vrp, > so VRP is doing something destroying the initially correct loop-closed SSA > form. Jump threading I suppose. I think you can drop loop-closed SSA form right before calling vrp_finalize ().