https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122450
--- Comment #1 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:a1de16a8e523de2ba928f7b5251059329eef0dc6 commit r16-5084-ga1de16a8e523de2ba928f7b5251059329eef0dc6 Author: Andrew Pinski <[email protected]> Date: Thu Nov 6 12:04:30 2025 -0800 forwprop: Handle already true/false branchs in optimize_unreachable [PR122588] When optimize_unreachable was moved from fab to forwprop, I missed that due to the integrated copy prop, we might end up with an already true branch leading to a __builtin_unreachable block. optimize_unreachable would switch around the if and things go down hill from there since the other edge was already marked as non-executable, forwprop didn't process those blocks and didn't do copy prop into that block and the original assignment statement was removed. This fixes the problem by having optimize_unreachable not touch the if statement was already changed to true/false. Note I placed the testcase in gcc.c-torture/compile as gcc.dg/torture is NOT currently testing -Og (see PR 122450 for that). Changes since v1: * v2: Add gimple testcase. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/122588 gcc/ChangeLog: * tree-ssa-forwprop.cc (optimize_unreachable): Don't touch if the condition was already true or false. gcc/testsuite/ChangeLog: * gcc.c-torture/compile/pr122588-1.c: New test. * gcc.dg/tree-ssa/pr122588-1.c: New test. Signed-off-by: Andrew Pinski <[email protected]>
