https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95922
Bug ID: 95922 Summary: Failure to optimize `((b ^ a) & c) ^ a` to `(a & ~c) | (b & c)` the right way on architectures with andnot Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- int f(int a, int b, int c) { return ((b ^ a) & c) ^ a; } This can be optimized to `return (a & ~c) | (b & c);` on processors that have andnot instructions (at least according to LLVM, which does this transformation on x86 with -mbmi).