https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83410
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- So it's SCOP detection failing in /* Check for unstructured control flow: CFG not generated by structured if-then-else. */ if (bb->succs->length () > 1) { edge e; edge_iterator ei; FOR_EACH_EDGE (e, ei, bb->succs) if (!dominated_by_p (CDI_POST_DOMINATORS, bb, e->dest) && !dominated_by_p (CDI_DOMINATORS, e->dest, bb)) return true; } for the result because we have one if arm containing the loop exit and the other not. I'm not exactly sure what can go wrong and why this test exists... as usual it didn't come with a testcase (r232657). For autopar we also like to lift the single-loop-SCOP restriction. Note that when I remove that check we still FAIL because we are not able to compute the number of iterations of such loop anymore (number_of_iterations_exit fails). So I think this is a generally bad threading before loop opts if it causes this! This is probably due to the fact that the block with the exit test doesn't dominate the latch block (sth to test in threading?).