https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87169
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- There's two issues I think though fixing the first makes us no longer run into the second. The first is that I again forgot to mark a destination block executable after marking an edge so ... (doh). The second one is that when marking loop headers as not need iterating we can face the situation (as with the CFG in this testcase) that a backedge into its header is _not_ a latch of it but part of an outer irreducible region which we may end up iterating and thus we need to continue iterating the loop we try to mark not needing that. Even though I lack a testcase for the latter issue I'll fix that as well. (fixing only that results in endless iteration - sth you'd expect)