On Wed, Sep 23, 2026 at 12:37 AM David Guillen Fandos <[email protected]> wrote:
>
> Hi all,
>
> These patches aim to expand and improve the byte swapping pass to recognize
> some more patterns including bit reverse patterns.  The first three patches
> build on bswap to track bits instead of bytes and recognize some new bswap
> patterns (ie. with somewhat arbitrary rotation and masking).  The last three
> add bitreverse recognition including 8 and 16 bit variants.

Thanks for improving the symbolic number tracking.  One thing that's on my
wish list for this is tracking of vector lane permutations and vector
per-element
shifts/masks with the idea to detect permutes.  That would require tracking
larger symbolic numbers (for AVX512 it's 512 bits), but bit tracking is overkill
there.  So I wonder how ugly it gets to make bits vs. bytes configurable?
As you've transitioned bytes to bits you can probably answer this quickly.

Richard.

> Several tests were added to ensure these new paths are properly exercised.
> I ran the testsuite on x86-64 and aarch64 and didn't find any regressions.
> I also did some performance testing, which shows no measurable difference
> in build times after these changes, at least with my (limited) testing.
>
> This is my first "proper" gcc patchset, let me know if I made some obvious
> mistake or whether I'm missing something in the patches.  I'm eager to
> learn and further contribute.
>
> Thank you all in advance.
>
> David
>
> David Guillen Fandos (6):
>   bswap: Adjust struct symbolic_number to track bits instead of bytes
>   bswap: Allow for arbitrary rotations on bswap permutations
>   bswap: Allow for arbitrary masking on bswap operations
>   bitreverse: Recognize bit reversing operations using bswap logic
>   bitreverse: Support bitreverse QI and HI
>   bitreverse: Relax emission if no instruction is available (but bswap
>     is)
>
>  gcc/gimple-ssa-store-merging.cc               | 809 ++++++++++--------
>  gcc/optabs-query.cc                           |   3 +-
>  gcc/testsuite/gcc.dg/optimize-bitrevdi-1.c    |  21 +
>  gcc/testsuite/gcc.dg/optimize-bitrevdi-2.c    |  21 +
>  gcc/testsuite/gcc.dg/optimize-bitrevhi-1.c    |  19 +
>  gcc/testsuite/gcc.dg/optimize-bitrevqi-1.c    |  18 +
>  gcc/testsuite/gcc.dg/optimize-bitrevsi-1.c    |  20 +
>  gcc/testsuite/gcc.dg/optimize-bitrevsi-2.c    |  20 +
>  gcc/testsuite/gcc.dg/optimize-bitrevsi-3.c    |  21 +
>  gcc/testsuite/gcc.dg/optimize-bitrevsi-4.c    |  44 +
>  gcc/testsuite/gcc.dg/optimize-bitrevsi-5.c    |  30 +
>  gcc/testsuite/gcc.dg/optimize-bitrevsi-6.c    |  28 +
>  gcc/testsuite/gcc.dg/optimize-bswapsi-8.c     |  21 +
>  gcc/testsuite/gcc.dg/optimize-bswapsi-9.c     |  20 +
>  .../gcc.target/i386/builtin-bitreverse-2.c    |  16 +
>  gcc/testsuite/lib/target-supports.exp         |  10 +
>  16 files changed, 756 insertions(+), 365 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevdi-1.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevdi-2.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevhi-1.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevqi-1.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevsi-1.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevsi-2.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevsi-3.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevsi-4.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevsi-5.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bitrevsi-6.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bswapsi-8.c
>  create mode 100644 gcc/testsuite/gcc.dg/optimize-bswapsi-9.c
>  create mode 100644 gcc/testsuite/gcc.target/i386/builtin-bitreverse-2.c
>
> --
> 2.55.0
>

Reply via email to