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.

Reply via email to