https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110539
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- yes adding: /* (convert)(zeroone != 0) into (convert)zeroone */ /* (convert)(zeroone == 0) into ((convert)zeroone)^1 */ (for neeq (ne eq) (simplify (convert (neeq zero_one_valued_p@0 integer_zerop)) (if (neeq == NE_EXPR) (convert @0) (bit_xor (convert @0) { build_one_cst (type); } )))) Fixes the original testcase.