https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110726
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- /* a | (a == b) --> a | (b^1) (boolean version of the above). */ (simplify (bit_ior:c @0 (nop_convert? (eq:c @0 @1))) (bit_ior @0 (bit_xor @1 { build_one_cst (type); }))) So I guess the issue is eq on generic has an integer type rather than boolean type ...