https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110554
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So originally we have: signed-boolean:32 _8 = _7 > 1; _Bool _9 = (_Bool) _8; (int) _9; I think if we swap around where the convert was, it will fix the issue. That is: (bit_and (convert @0) { wide_int_to_tree (type, wi::mask (inter_prec, false, TYPE_PRECISION (type))); }))) But maybe we should check for which is a boolean type.