https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89497
--- Comment #17 from Richard Biener <rguenth at gcc dot gnu.org> --- Created attachment 45836 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45836&action=edit patch I am testing So we can now properly "order" CFG cleanup and SSA update by interleaving them. There's the slight chance that we run update_ssa twice, but the comment looks outdated and I wonder what would trigger it: /* When cleanup_tree_cfg merges consecutive blocks, it may perform some simplistic propagation when removing single valued PHI nodes. This propagation may, in turn, cause the SSA form to become out-of-date (see PR 22037). So, even if the parent pass had not scheduled an SSA update, we may still need to do one. */ if (!(flags & TODO_update_ssa_any) && need_ssa_update_p (cfun)) flags |= TODO_update_ssa;