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.

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