On Thu, May 1, 2025 at 5:02 PM Andrew Pinski <quic_apin...@quicinc.com> wrote:
>
> While looking into bitwise optimizations, I noticed that
> get_known_nonzero_bits_1 does `bm.value () & ~bm.mask ()` which
> is ok except it creates a temporary wide_int. Instead if we
> use wi::bit_and_not, we can avoid the temporary and on some
> targets use the andn/bic instruction.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

> gcc/ChangeLog:
>
>         * tree-ssanames.cc (get_known_nonzero_bits_1): Use
>         wi::bit_and_not instead of `a & ~b`.
>
> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> ---
>  gcc/tree-ssanames.cc | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc
> index d7865f29f0b..de7b9b79f94 100644
> --- a/gcc/tree-ssanames.cc
> +++ b/gcc/tree-ssanames.cc
> @@ -576,7 +576,7 @@ get_known_nonzero_bits_1 (const_tree name)
>    if (tmp.undefined_p ())
>      return wi::shwi (0, precision);
>    irange_bitmask bm = tmp.get_bitmask ();
> -  return bm.value () & ~bm.mask ();
> +  return wi::bit_and_not (bm.value (), bm.mask ());
>  }
>
>  /* Return a wide_int with known non-zero bits in SSA_NAME
> --
> 2.43.0
>

Reply via email to