https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97711
Bug ID: 97711 Summary: Failure to optimise "x & 1 ? x - 1 : x" to "x & -2" Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: rsandifo at gcc dot gnu.org Target Milestone: --- GCC doesn't optimise the expression: int f (int x) { return x & 1 ? x - 1 : x; } to x & -2 (but clang does). The original motivation was actually: char *g (char *x) { return (__UINTPTR_TYPE__) x & 1 ? x - 1 : x; } which I guess might require a different pattern. (And the reason for writing g that way was to do all pointer arithmetic on pointers rather than converting to a uintptr_t, doing arithmetic, and converting back.)