https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97711
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #3) > Mine, the patch which fixes PR 103216 fixes this too. Note it does not fix it fullly on the gimple level, we are left with: _1 = x_3(D) & 1; _7 = _1 != 0; _6 = (int) _7; _9 = x_3(D) - _6; But the RTL level does optimize it to: movl %edi, %eax andl $-2, %eax