https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122734
--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The trunk branch has been updated by Andrew Pinski <[email protected]>: https://gcc.gnu.org/g:b5c64db0a49d4653418457a520648c4305e01e75 commit r16-6104-gb5c64db0a49d4653418457a520648c4305e01e75 Author: Andrew Pinski <[email protected]> Date: Tue Nov 18 23:02:36 2025 -0800 ch: Improve copy header when the bbs are predicated as non-executed [PR122734] This is version based on https://gcc.gnu.org/pipermail/gcc-patches/2025-November/701533.html review. Though the only thing is we still need an extra check for the edge probability like it is done in single_likely_exit because probabilities are still not being tracked correctly it seems. I also added copy-headers-12.c which we fail by duplicating too much. But I think that is ok, as this pattern of being the "correct" part of the loop header leading to a noreturn function does not happen that often and when it does the header would have had a statically figured out conditional which is already being checked. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/122734 gcc/ChangeLog: * tree-ssa-loop-ch.cc (should_duplicate_loop_header_p): Add new argument, canbe_neverexecuted. When canbe_neverexecuted is true, return if a loop exit is "never executed" like we are doing an invariant conditional. (ch_base::copy_headers): Update call to should_duplicate_loop_header_p. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/20030711-1.c: Update. * gcc.dg/tree-ssa/copy-headers-10.c: New test. * gcc.dg/tree-ssa/copy-headers-11.c: New test. * gcc.dg/tree-ssa/copy-headers-12.c: New test. Signed-off-by: Andrew Pinski <[email protected]>
