Hi,

On Tue, Apr 15 2025, Jakub Jelinek wrote:
> On Mon, Mar 31, 2025 at 03:34:07PM +0200, Martin Jambor wrote:
>> This patch just introduces a form of dumping of widest ints that only
>> have zeros in the lowest 128 bits so that instead of printing
>> thousands of f's the output looks like:
>> 
>>        Bits: value = 0xffff, mask = all ones folled by 
>> 0xffffffffffffffffffffffffffff0000
>> 
>> and then makes sure we use the function not only to print bits but
>> also to print masks where values like these can also occur.
>
> Shouldn't that be followed by instead?

Yes, of course.

> And the widest_int checks seems to be quite expensive (especially for
> large widest_ints), I think for the first one we can just == -1
> and for the second one wi::arshift (value, 128) == -1 and the zero extension
> by using wi::zext.
>
> Anyway, I wonder if it wouldn't be better to use something shorter,
> the variant patch uses 0xf..f prefix before the 128-bit hexadecimal
> number (maybe we could also special case the even more common bits 64+
> are all ones case).  Or it could be 0xf*f prefix.  Or printing such
> numbers as -0x prefixed negative, though that is not a good idea for masks.

I was not sure myself what the best way would be and so proposed the
simplest variant I could think of.  I am fine with anything that does
not print thousands of f's which could be the case before.

So if you like the second variant more, I and I guess I do as well, by
all means go ahead and commit it.

Thanks,

Martin


>
>       Jakub
> 2025-04-15  Jakub Jelinek  <ja...@redhat.com>
>
>       * ipa-cp.cc (ipcp_print_widest_int): Fix a typo, folled -> followed.
>       Simplify wide_int check for -1 or all ones above least significant
>       128 bits.
>
> --- gcc/ipa-cp.cc.jj  2025-04-15 07:55:18.369479825 +0200
> +++ gcc/ipa-cp.cc     2025-04-15 11:37:03.059964475 +0200
> @@ -313,14 +313,12 @@ ipcp_lattice<valtype>::print (FILE * f,
>  static void
>  ipcp_print_widest_int (FILE *f, const widest_int &value)
>  {
> -  if (wi::eq_p (wi::bit_not (value), 0))
> +  if (value == -1)
>      fprintf (f, "-1");
> -  else if (wi::eq_p (wi::bit_not (wi::bit_or (value,
> -                                           wi::sub (wi::lshift (1, 128),
> -                                                    1))), 0))
> +  else if (wi::arshift (value, 128) == -1)
>      {
> -      fprintf (f, "all ones folled by ");
> -      print_hex (wi::bit_and (value, wi::sub (wi::lshift (1, 128), 1)), f);
> +      fprintf (f, "all ones followed by ");
> +      print_hex (wi::zext (value, 128), f);
>      }
>    else
>      print_hex (value, f);
> 2025-04-15  Jakub Jelinek  <ja...@redhat.com>
>
>       * ipa-cp.cc (ipcp_print_widest_int): Print values with all ones in
>       bits 128+ with "0xf..f" prefix instead of "all ones folled by ".
>       Simplify wide_int check for -1 or all ones above least significant
>       128 bits.
>
> --- gcc/ipa-cp.cc.jj  2025-04-15 07:55:18.369479825 +0200
> +++ gcc/ipa-cp.cc     2025-04-15 11:54:45.369704056 +0200
> @@ -313,14 +313,20 @@ ipcp_lattice<valtype>::print (FILE * f,
>  static void
>  ipcp_print_widest_int (FILE *f, const widest_int &value)
>  {
> -  if (wi::eq_p (wi::bit_not (value), 0))
> +  if (value == -1)
>      fprintf (f, "-1");
> -  else if (wi::eq_p (wi::bit_not (wi::bit_or (value,
> -                                           wi::sub (wi::lshift (1, 128),
> -                                                    1))), 0))
> +  else if (wi::arshift (value, 128) == -1)
>      {
> -      fprintf (f, "all ones folled by ");
> -      print_hex (wi::bit_and (value, wi::sub (wi::lshift (1, 128), 1)), f);
> +      char buf[35];
> +      widest_int v = wi::zext (value, 128);
> +      size_t len;
> +      print_hex (v, buf);
> +      len = strlen (buf + 2);
> +      if (len == 32)
> +     fprintf (f, "0xf..f");
> +      else
> +     fprintf (f, "0xf..f%0*d", (int) (32 - len), 0);
> +      fputs (buf + 2, f);
>      }
>    else
>      print_hex (value, f);

Reply via email to