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? 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. 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);