https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40210

--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Roger Sayle <sa...@gcc.gnu.org>:

https://gcc.gnu.org/g:4c619132b3f14dc5e672a7f2f0e09cb784193559

commit r12-2137-g4c619132b3f14dc5e672a7f2f0e09cb784193559
Author: Roger Sayle <ro...@nextmovesoftware.com>
Date:   Thu Jul 8 11:46:14 2021 +0100

    PR tree-optimization/40210: Fold (bswap(X)>>C1)&C2 to (X>>C3)&C2 in
match.pd

    All of the optimizations/transformations mentioned in bugzilla for
    PR tree-optimization/40210 are already implemented in mainline GCC,
    with one exception.  In comment #5, there's a suggestion that
    (bswap64(x)>>56)&0xff can be implemented without the bswap as
    (unsigned char)x, or equivalently x&0xff.

    This patch implements the above optimization, and closely related
    variants.  For any single bit, (bswap(X)>>C1)&1 can be simplified
    to (X>>C2)&1, where bit position C2 is the appropriate permutation
    of C1.  Similarly, the bswap can eliminated if the desired set of
    bits all lie within the same byte, hence (bswap(x)>>8)&255 can
    always be optimized, as can (bswap(x)>>8)&123.

    Previously,
    int foo(long long x) {
      return (__builtin_bswap64(x) >> 56) & 0xff;
    }

    compiled with -O2 to
    foo:    movq    %rdi, %rax
            bswap   %rax
            shrq    $56, %rax
            ret

    with this patch, it now compiles to
    foo:    movzbl  %dil, %eax
            ret

    2021-07-08  Roger Sayle  <ro...@nextmovesoftware.com>
                Richard Biener  <rguent...@suse.de>

    gcc/ChangeLog
            PR tree-optimization/40210
            * match.pd (bswap optimizations): Simplify (bswap(x)>>C1)&C2 as
            (x>>C3)&C2 when possible.  Simplify bswap(x)>>C1 as ((T)x)>>C2
            when possible.  Simplify bswap(x)&C1 as (x>>C2)&C1 when 0<=C1<=255.

    gcc/testsuite/ChangeLog
            PR tree-optimization/40210
            * gcc.dg/builtin-bswap-13.c: New test.
            * gcc.dg/builtin-bswap-14.c: New test.
  • [Bug tree-optimization/4021... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to