https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103857
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Keywords| |missed-optimization Ever confirmed|0 |1 Severity|normal |enhancement Last reconfirmed| |2021-12-29 --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Reduced testcase: int f(int a, int b, int c) { if (a != b && a != c) __builtin_unreachable(); return a == b ? b : c; } This should just translate into: int f1(int a, int b, int c) { if (a != b && a != c) __builtin_unreachable(); return a; } The ^ part is not needed really if it is just selecting between two values.