http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58326
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- I think the issue is latent - the bitmap with changed blocks fed to rewrite_into_loop_closed_ssa is the blocks scanned for _uses_, but as far as I can see unloop sets the blocks that had a non-trivial update of their loop-father which doesn't seem to be the right set as the interesting block is not marked. Reverting the patch papers over the issue as then the cfgcleanup done passes an empty bitmap to loop-closed-ssa-rewrite which fixes up the previous mistake. Adding verify_loop_closed_ssa into rewrite_into_loop_closed_ssa shows the bogous IL is appearing after unloop_loops (loop_closed_ssa_invalidated, &irred_invalidated); /* We can not use TODO_update_ssa_no_phi because VOPS gets confused. */ if (loop_closed_ssa_invalidated && !bitmap_empty_p (loop_closed_ssa_invalidated)) rewrite_into_loop_closed_ssa (loop_closed_ssa_invalidated, TODO_update_ssa); else update_ssa (TODO_update_ssa); (just looked at the -O2 code for now)