https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110111
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- >/* 1bit `((x ^ y) & m) ^ x` should just be convert into `m ? y : x` early */ Actually it is true for all zero_one_valued_p. Even more if m is just zere_one_valued_p we could convert it to (m ? y : x) & 1