Re: [PATCH] middle-end: If supported, use __builtin_bitreverse64 on reflect_hwi. [PR126625]

Kael Andrew Franco <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <CACAb0qdXJO4UW6O+obZ8iHJcVwxRSqg_qHmtL-u-Bp48gWd=6g@mail.gmail.com>
Likewise for ira-color.cc?

On Fri, Aug 7, 2026 at 1:46 AM Andrea Pinski <[email protected]>
wrote:

> On Thu, Aug 6, 2026 at 3:24 AM Kael Andrew Franco <[email protected]>
> wrote:
> >
> > From f3df22990341e3ff247160509c41e8b123aff0bd Mon Sep 17 00:00:00 2001
> > From: Kael Andrew Alonzo Franco <[email protected]>
> > Date: Wed, 5 Aug 2026 12:50:20 -0400
> > Subject: [PATCH] middle-end: If supported, use __builtin_bitreverse64 on
> reflect_hwi. [PR126625]
> >
> > reflect_hwi uses a naive for loop approach to emulate
> __builtin_bitreverse64 ().
> > This is slow compared to using __builtin_bitreverse64 () plus bitshift.
> > This is useful for bootstrapping GCC since r17-523.
> > Also add assert on BITWIDTH <= 64.
> >
> > Bootstrapped and regtested on x86_64-pc-linux-gnu.
> >
> > PR middle-end/126625
> >
> > gcc/ChangeLog:
> >
> > * hwint.cc (reflect_hwi): If supported, use __builtin_bitreverse64.
> >
> > Signed-off-by: Kael Andrew Franco <[email protected]>
> > ---
> >  gcc/hwint.cc | 19 ++++++++++++++++++-
> >  1 file changed, 18 insertions(+), 1 deletion(-)
> >
> > diff --git a/gcc/hwint.cc b/gcc/hwint.cc
> > index f3b3e7b8408..e87956ed3f5 100644
> > --- a/gcc/hwint.cc
> > +++ b/gcc/hwint.cc
> > @@ -189,12 +189,27 @@ least_common_multiple (HOST_WIDE_INT a,
> HOST_WIDE_INT b)
> >    return mul_hwi (abs_hwi (a) / gcd (a, b), abs_hwi (b));
> >  }
> >
> > -/* Reflect (reverse) the bits of a given VALUE within a specified
> BITWIDTH.  */
> > +#ifdef __has_builtin
> > +#if __has_builtin(__builtin_bitreverse64)
> > +#define HAVE_BITREVERSE64
> > +#endif
> > +#endif
>
> I think it is better to do:
> #define HAVE_BITREVERSE64 0
> #ifdef __has_builtin
> # if __has_builtin(__builtin_bitreverse64)
> #  define HAVE_BITREVERSE64 1
> #endif
> #endif
>
> > +
> > +/* Reflect (reverse) the bits of a given VALUE within a specified
> BITWIDTH <= 64.  */
> >
> >  unsigned HOST_WIDE_INT
> >  reflect_hwi (unsigned HOST_WIDE_INT value, unsigned bitwidth)
> >  {
> > +  if (bitwidth == 0)
> > +    return 0;
> > +
> > +  gcc_checking_assert (bitwidth <= 64);
> > +
> > +#ifdef HAS_BITREVERSE64
> #if HAVE_BITREVERSE64
> > +  return __builtin_bitreverse64 (value) >> (64 - bitwidth);
> > +#else
> >    unsigned HOST_WIDE_INT reflected_value = 0;
> > +
> >    /* Loop through each bit in the specified BITWIDTH.  */
> >    for (size_t i = 0; i < bitwidth; i++)
> >      {
> > @@ -204,5 +219,7 @@ reflect_hwi (unsigned HOST_WIDE_INT value, unsigned
> bitwidth)
> >        reflected_value |= (value & 1);
> >        value >>= 1;
> >      }
> > +
> >    return reflected_value;
> > +#endif
> >  }
> > --
> > 2.55.0
> >
> >
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.