https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92980
--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> --- Ah, sorry I failed to see the entry from BB2 isn't fallthru. I agree the difference is spurious in this particular case but in general it's quite hard to do better without excessively rotating most multi-exit loops. Note in the end you also have to satisfy should_duplicate_loop_header_p for each block to duplicate. So what is suprious here is that we do not consider do { } while (i++ < n); to be a do-while loop but we do for do { } while (++i < n); due to the IV update in the latch. IMHO technically that's correct. The loop in question does not look like a do-while loop to us because the loop header doesn't contain "most" of the loop body. But CFG wise it perfectly satisfies the predicate. I think the new FAILs are somewhat spurious and one would need to investigate on a case-by-case basis whether they really are a regression. Often they are testcases for specific input IL (which you changed) rather than a specific C testcase.