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.

Reply via email to