https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119803
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So full patch would be --- gcc/ipa-cp.cc.jj 2025-04-15 14:56:26.861419422 +0200 +++ gcc/ipa-cp.cc 2025-04-15 15:10:05.270414498 +0200 @@ -933,13 +933,13 @@ ipcp_bits_lattice::meet_with_1 (widest_i m_mask = (m_mask | mask) | (m_value ^ value); if (drop_all_ones) m_mask |= m_value; - m_value &= ~m_mask; - widest_int cap_mask = wi::bit_not (wi::sub (wi::lshift (1, precision), 1)); + widest_int cap_mask = wi::shifted_mask <widest_int> (0, precision, true); m_mask |= cap_mask; if (wi::sext (m_mask, precision) == -1) return set_to_bottom (); + m_value &= ~m_mask; return m_mask != old_mask; } @@ -1011,14 +1011,12 @@ ipcp_bits_lattice::meet_with (ipcp_bits_ if (top_p ()) { if (drop_all_ones) - { - adjusted_mask |= adjusted_value; - adjusted_value &= ~adjusted_mask; - } - widest_int cap_mask = wi::bit_not (wi::sub (wi::lshift (1, precision), 1)); + adjusted_mask |= adjusted_value; + widest_int cap_mask = wi::shifted_mask <widest_int> (0, precision, true); adjusted_mask |= cap_mask; if (wi::sext (adjusted_mask, precision) == -1) return set_to_bottom (); + adjusted_value &= ~adjusted_mask; return set_to_constant (adjusted_value, adjusted_mask); } else plus testcase.