arm: Auto-vectorization for MVE: vshr
authorChristophe Lyon <christophe.lyon@linaro.org>
Thu, 19 Nov 2020 16:25:48 +0000 (16:25 +0000)
committerChristophe Lyon <christophe.lyon@linaro.org>
Fri, 15 Jan 2021 10:37:44 +0000 (10:37 +0000)
commitbfab355012ca0f5219da8beb04f2fdaf757d34b7
treea82d4863be7568fb2360e959eacd99c8f59c438b
parent7432f255b70811dafaf325d94036ac580891de69
arm: Auto-vectorization for MVE: vshr

This patch enables MVE vshr instructions for auto-vectorization.  New
MVE patterns are introduced that take a vector of constants as second
operand, all constants being equal.

The existing mve_vshrq_n_<supf><mode> is kept, as it takes a single
immediate as second operand, and is used by arm_mve.h.

The vashr<mode>3 and vlshr<mode>3 expanders are moved fron neon.md to
vec-common.md, updated to rely on the normal expansion scheme to
generate shifts by immediate.

2020-12-03  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/mve.md (mve_vshrq_n_s<mode>_imm): New entry.
(mve_vshrq_n_u<mode>_imm): Likewise.
* config/arm/neon.md (vashr<mode>3, vlshr<mode>3): Move to ...
* config/arm/vec-common.md: ... here.

gcc/testsuite/
* gcc.target/arm/simd/mve-vshr.c: Add tests for vshr.
gcc/config/arm/mve.md
gcc/config/arm/neon.md
gcc/config/arm/vec-common.md
gcc/testsuite/gcc.target/arm/simd/mve-vshr.c [new file with mode: 0644]