https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108370
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #5) > _10 = _9 >> 1; > _11 = (bool) _10; > if (_11 != 0) > > > Should just be optimized to: > _t = _9 & 1 > if (_t != 0) > > Let me add that to match. We do handle: /* Fold ((X << C1) & C2) cmp C3 into (X & (C2 >> C1)) cmp (C3 >> C1) ((X >> C1) & C2) cmp C3 into (X & (C2 << C1)) cmp (C3 << C1). */