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.