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 >
