i386: Add combiner splitter to optimize V2SImode memory rotation [PR96166]
authorJakub Jelinek <jakub@redhat.com>
Sat, 13 Feb 2021 09:32:16 +0000 (10:32 +0100)
committerJakub Jelinek <jakub@redhat.com>
Sat, 13 Feb 2021 09:32:16 +0000 (10:32 +0100)
commit0f3a743b688f4845e1798eed9b2e2284e891da11
treed0ae1048cc10ce9b7db5822a0bebd4ae8921cb88
parentfab095dad5e1970ceae598ec9c98b07cce3eb599
i386: Add combiner splitter to optimize V2SImode memory rotation [PR96166]

Since the x86 backend enabled V2SImode vectorization (with
TARGET_MMX_WITH_SSE), slp vectorization can kick in and emit
        movq    (%rdi), %xmm1
        pshufd  $225, %xmm1, %xmm0
        movq    %xmm0, (%rdi)
instead of
        rolq    $32, (%rdi)
we used to emit (or emit when slp vectorization is disabled).
I think the rotate is both smaller and faster, so this patch adds
a combiner splitter to optimize that back.

2021-02-13  Jakub Jelinek  <jakub@redhat.com>

PR target/96166
* config/i386/mmx.md (*mmx_pshufd_1): Add a combine splitter for
swap of V2SImode elements in memory into DImode memory rotate by 32.

* gcc.target/i386/pr96166.c: New test.
gcc/config/i386/mmx.md
gcc/testsuite/gcc.target/i386/pr96166.c [new file with mode: 0644]