]> git.ipfire.org Git - thirdparty/gcc.git/commit
Detect bswap + rotate for byte permutation in pass_bswap.
authorliuhongt <hongtao.liu@intel.com>
Mon, 6 Mar 2023 07:35:37 +0000 (15:35 +0800)
committerliuhongt <hongtao.liu@intel.com>
Tue, 30 May 2023 09:53:58 +0000 (17:53 +0800)
commitd8545fb2c71683f407bfd96706103297d4d6e27b
tree0cccd887436470d455190f3ccba625f9ee0e3619
parent365b1d5493988b6bd40183d1fe49bd8a3b32a6bb
Detect bswap + rotate for byte permutation in pass_bswap.

The patch doesn't handle:
  1. cast64_to_32,
  2. memory source with rsize < range.

gcc/ChangeLog:

PR middle-end/108938
* gimple-ssa-store-merging.cc (is_bswap_or_nop_p): New
function, cut from original find_bswap_or_nop function.
(find_bswap_or_nop): Add a new parameter, detect bswap +
rotate and save rotate result in the new parameter.
(bswap_replace): Add a new parameter to indicate rotate and
generate rotate stmt if needed.
(maybe_optimize_vector_constructor): Adjust for new rotate
parameter in the upper 2 functions.
(pass_optimize_bswap::execute): Ditto.
(imm_store_chain_info::output_merged_store): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr108938-1.c: New test.
* gcc.target/i386/pr108938-2.c: New test.
* gcc.target/i386/pr108938-3.c: New test.
* gcc.target/i386/pr108938-load-1.c: New test.
* gcc.target/i386/pr108938-load-2.c: New test.
gcc/gimple-ssa-store-merging.cc
gcc/testsuite/gcc.target/i386/pr108938-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr108938-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr108938-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr108938-load-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr108938-load-2.c [new file with mode: 0644]