https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96671
--- Comment #2 from Gabriel Ravier <gabravier at gmail dot com> --- There is also a very similar pattern with this function : int f(int a, int b, int c) { return (a ^ b) | ((b ^ c) ^ a); } Which can be optimized to `return (a ^ b) | c;`.