http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54146
--- Comment #34 from Steven Bosscher <steven at gcc dot gnu.org> 2012-08-08 10:10:46 UTC --- (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.