[2/2] middle-end Backport complex vect testsuite to GCC 11

Message ID 20220228112929.GA13209@arm.com
State Committed
Headers
Series [1/2] middle-end Handle difference between complex negations in SLP tree better (GCC 11 backport) |

Commit Message

Tamar Christina Feb. 28, 2022, 11:29 a.m. UTC
  Hi All,

The GCC 12 testsuite for complex numbers pattern recognition is a lot more
exhaustive than the GCC 11 one.  This backports the testsuite to GCC 11 so
any further changes to the branch prevents regressions.

Bootstrapped Regtested on aarch64-none-linux-gnu,
x86_64-pc-linux-gnu and no regressions.

Ok for GCC-11?

Thanks,
Tamar

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c: Update test
	cases to not be UNSUPPORTED.
	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c: Likewise.
	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c: Likewise.
	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c:
	Likewise.
	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c:
	Likewise.
	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c:
	Likewise.
	* gcc.dg/vect/complex/complex-add-pattern-template.c: Likewise.
	* gcc.dg/vect/complex/complex-add-template.c: Likewise.
	* gcc.dg/vect/complex/complex-operations-run.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-complex-add-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-add-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-add-half-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c:
	Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mla-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mla-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mla-half-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mls-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mls-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mls-half-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mul-double.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mul-float.c: Likewise.
	* gcc.dg/vect/complex/fast-math-complex-mul-half-float.c: Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-byte.c: Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-int.c: Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-long.c: Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-short.c: Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c:
	Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c:
	Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c:
	Likewise.
	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c:
	Likewise.
	* gcc.dg/vect/complex/complex.exp: Copyright year update.

--- inline copy of patch -- 
diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
index 8eba24dc187895150ee3515d5bd2a35b46528388..cead05f1cc4e02790630a6cbfe8378c2de3778f3 100644


--
  

Comments

Richard Biener Feb. 28, 2022, 12:49 p.m. UTC | #1
On Mon, 28 Feb 2022, Tamar Christina wrote:

> Hi All,
> 
> The GCC 12 testsuite for complex numbers pattern recognition is a lot more
> exhaustive than the GCC 11 one.  This backports the testsuite to GCC 11 so
> any further changes to the branch prevents regressions.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu,
> x86_64-pc-linux-gnu and no regressions.
> 
> Ok for GCC-11?

OK.

> Thanks,
> Tamar
> 
> gcc/testsuite/ChangeLog:
> 
> 	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c: Update test
> 	cases to not be UNSUPPORTED.
> 	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c: Likewise.
> 	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c: Likewise.
> 	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/complex-add-pattern-template.c: Likewise.
> 	* gcc.dg/vect/complex/complex-add-template.c: Likewise.
> 	* gcc.dg/vect/complex/complex-operations-run.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-add-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-add-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-add-half-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mla-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mla-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mla-half-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mls-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mls-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mls-half-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mul-double.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mul-float.c: Likewise.
> 	* gcc.dg/vect/complex/fast-math-complex-mul-half-float.c: Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-byte.c: Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-int.c: Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-long.c: Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-short.c: Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c:
> 	Likewise.
> 	* gcc.dg/vect/complex/complex.exp: Copyright year update.
> 
> --- inline copy of patch -- 
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
> index 8eba24dc187895150ee3515d5bd2a35b46528388..cead05f1cc4e02790630a6cbfe8378c2de3778f3 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
> @@ -1,12 +1,15 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_int } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
>  
>  #define TYPE int32_t
>  #define N 16
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_byte } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_int } && ! target { aarch64_sve2 } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
> index 9275ff12e0cc4fd643c3d60d1a5ce51cd3550833..0d21f57666ed9ff918dad343cbe53fbbdd271630 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
> @@ -1,12 +1,17 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_long } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE int64_t
>  #define N 16
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_long } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_long } && ! target { aarch64_sve2 } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" { target { vect_long_long } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" { target { vect_long_long } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" { target { vect_long_long } } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
> index 8cbbdb825ddb616cc9c3ac7c0b62ad53e0e54045..8928386a5174154719fbc86c6f11d5f886cf1f4a 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
> @@ -1,12 +1,17 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_short } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE int16_t
>  #define N 16
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_short } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_short } && ! target { aarch64_sve2 } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
> index 270c49efbf95ffbc21ff5c3b7ae34280fa1b6059..4ab4b9a446a8f13c052a569aa694016b22bb2b3b 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
> @@ -1,12 +1,17 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_int } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE uint32_t
>  #define N 16
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_int } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_int } && ! target { aarch64_sve2 } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
> index 88144e52014d86842b16520b0940123d5448459c..38aa9c0b9d51d38e5c28c1e81ef082e0c568c8f8 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
> @@ -1,12 +1,16 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_long } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE uint64_t
>  #define N 16
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_long } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_long } && ! target { aarch64_sve2 } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" { target { vect_long_long } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" { target { vect_long_long } } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
> index 445af3943d318c4daa69334fa6c1095592e2dec0..8846c9889fb64cdba614553e70052901039f1752 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
> @@ -1,12 +1,17 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_short } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE uint16_t
>  #define N 16
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_short } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_short } && ! target { aarch64_sve2 } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c b/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c
> index a99a9296194472c42fed84376c4a48853073c7fd..658af294f1c81ab28fb961202e165ea8813dff88 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c
> @@ -1,5 +1,8 @@
>  void add90 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i+=2)
>      {
>        c[i] = a[i] - b[i+1];
> @@ -11,6 +14,9 @@ void add90 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
>  
>  void add270 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i+=2)
>      {
>        c[i] = a[i] + b[i+1];
> @@ -22,6 +28,9 @@ void add270 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
>  
>  void addMixed (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i+=4)
>      {
>        c[i] = a[i] - b[i+1];
> @@ -34,6 +43,9 @@ void addMixed (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
>  void add90HandUnrolled (TYPE a[restrict N], TYPE b[restrict N],
>  			TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < (N /2); i+=4)
>      {
>        c[i] = a[i] - b[i+1];
> @@ -48,6 +60,9 @@ void add90HandUnrolled (TYPE a[restrict N], TYPE b[restrict N],
>  void add90Hybrid (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N],
>  		  TYPE d[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i+=2)
>      {
>        c[i] = a[i] - b[i+1];
> @@ -57,4 +72,4 @@ void add90Hybrid (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N],
>      }
>  }
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
> \ No newline at end of file
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c b/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c
> index 32c81e64f627b0f529e6a9129bd7ceeff727a662..f37ab98813faebfbde96fedf647099468609bfd4 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c
> @@ -3,6 +3,9 @@
>  void add0 (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  	   _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = a[i] + b[i];
>  }
> @@ -10,6 +13,9 @@ void add0 (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void add90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  	       _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = a[i] + (b[i] * I);
>  }
> @@ -19,6 +25,9 @@ void add90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void add180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  	        _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = a[i] + (b[i] * I * I);
>  }
> @@ -26,6 +35,9 @@ void add180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void add270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  	        _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = a[i] + (b[i] * I * I * I);
>  }
> @@ -35,6 +47,9 @@ void add270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void add90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  	       _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = (a[i] * I) + b[i];
>  }
> @@ -44,6 +59,9 @@ void add90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void add180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  	        _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = (a[i] * I * I) + b[i];
>  }
> @@ -51,6 +69,9 @@ void add180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void add270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  	        _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = (a[i] * I * I * I) + b[i];
>  }
> @@ -60,6 +81,9 @@ void add270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void addconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  		 _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = ~a[i] + b[i];
>  }
> @@ -67,6 +91,9 @@ void addconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void addconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  		 _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = a[i] + ~b[i];
>  }
> @@ -74,6 +101,9 @@ void addconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  void addconjboth (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
>  		  _Complex TYPE c[restrict N])
>  {
> +#if defined (UNROLL)
> +#pragma GCC unroll 16
> +#endif
>    for (int i=0; i < N; i++)
>      c[i] = ~a[i] + ~b[i];
>  }
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c b/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
> index a0348a7041ca384104bc5ab688d941c14e5b7381..14ac512a8efa4d9af8cd274d995a8e642ac9f10f 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
> @@ -1,7 +1,7 @@
>  /* { dg-do run } */
>  /* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
>  
>  #include <stdio.h>
>  #include <complex.h>
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex.exp b/gcc/testsuite/gcc.dg/vect/complex/complex.exp
> index f94c7a8ee07c3c39670064e77b94451183871253..ea6bfcdf62f0869674a76fc8bbafab54c91d8280 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/complex.exp
> +++ b/gcc/testsuite/gcc.dg/vect/complex/complex.exp
> @@ -1,4 +1,4 @@
> -# Copyright (C) 1997-2021 Free Software Foundation, Inc.
> +# Copyright (C) 1997-2022 Free Software Foundation, Inc.
>  
>  # This program is free software; you can redistribute it and/or modify
>  # it under the terms of the GNU General Public License as published by
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
> index 7bbb61adfab06a89ac36a66f848746033158c41c..2e611b77c7631b305d79fe21c4b95c8593dcc369 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
> @@ -1,12 +1,16 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_double } */
> +/* { dg-require-effective-target vect_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +
> +#define UNROLL
>  
>  #define TYPE double
>  #define N 16
>  #include "complex-add-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_double } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_double } } } } */
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c
> index cf99f1de31056bbaca3fe8885643289b770ad76d..1e63a5f2c5e1a478ae9ea1f49c6eb21665cfca8c 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c
> @@ -1,11 +1,15 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_float } */
> +/* { dg-require-effective-target vect_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +
> +#define UNROLL
>  
>  #define TYPE float
>  #define N 16
>  #include "complex-add-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
> index 9f535dde7c0d131c1a35e5b6b1d27530faaea88f..0ae49c16438c503ad59010a9b170e54764419c36 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
> @@ -1,7 +1,8 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_half } */
> +/* { dg-require-effective-target float16 } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 16
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
> index e121113320ec153a732fe8e1c0b25d06929c126b..3f5619b78ce55c83df07f22dfe58fbb6f56e66ac 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
> @@ -1,11 +1,16 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +/* { dg-require-effective-target vect_double } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE double
>  #define N 16
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_double } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_double } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
> index 8565833887f026b732b86d2c42c3a3d7a883b8d8..a961a852775f29ade98d61100358cc36c394f3de 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
> @@ -1,11 +1,15 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_float } */
> +/* { dg-require-effective-target vect_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +
> +#define UNROLL
>  
>  #define TYPE float
>  #define N 16
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
> index 857ee9de6b48407ebb1c6974d4b05cd661cd4f16..e30df0ff0b03e612ef2491f797a84bcc117df5e1 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
> @@ -1,11 +1,16 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_half } */
> +/* { dg-require-effective-target float16 } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
> +
> +#define UNROLL
>  
>  #define TYPE _Float16
>  #define N 16
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail arm*-*-* } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_half } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_half } && ! target { arm*-*-* } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
> index d9d13c29578f905e793e5d80f08ec7b758d09c5f..b77c847403df3253648dc4b2f493364fc1cb6959 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
> @@ -1,9 +1,11 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fdump-tree-vect-details" } */
>  
>  #define TYPE double
>  #define N 16
>  #include "complex-mla-template.c"
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
> index ac680cbca81b3b0bc3a51555236faa7f702e5082..cd68fd190089bc48615e4098a19450c0f374c275 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
> @@ -1,8 +1,10 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_float } */
> -/* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fdump-tree-vect-details" } */
> +/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
>  
>  #define TYPE float
>  #define N 16
>  #include "complex-mla-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
> index d0a48d007178a7464ae2e4d00720bb3b3abca18a..510092028d5697b4f48ed4e3d60d586988671d02 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
> @@ -1,9 +1,12 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_half } */
> +/* { dg-require-effective-target float16 } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 16
>  #include "complex-mla-template.c"
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "slp1" { xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "slp1"  { xfail *-*-* } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c
> index d9d13c29578f905e793e5d80f08ec7b758d09c5f..9d9839417a2b09fd7715ce554d9d96827ee3f00c 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c
> @@ -1,9 +1,11 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fdump-tree-vect-details" } */
>  
>  #define TYPE double
>  #define N 16
> -#include "complex-mla-template.c"
> +#include "complex-mls-template.c"
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
> index ac680cbca81b3b0bc3a51555236faa7f702e5082..cf540a08acd1a0ffe0b193dd2346a58afc0bfd2a 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
> @@ -1,8 +1,11 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_float } */
> +/* { dg-additional-options "-fdump-tree-vect-details" } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE float
>  #define N 16
> -#include "complex-mla-template.c"
> +#include "complex-mls-template.c"
> +
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
> index d0a48d007178a7464ae2e4d00720bb3b3abca18a..217401bae59e658c1f920c4619f0858c95cc3322 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
> @@ -1,9 +1,12 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_half } */
> +/* { dg-require-effective-target float16 } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 16
> -#include "complex-mla-template.c"
> +#include "complex-mls-template.c"
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "slp1"  { xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "slp1"  { xfail *-*-* } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
> index ab8313f01226bfb96b2e304ff7f275cffb665b06..dcac519cd98c6dd5773117134ca1c007ae3e3856 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
> @@ -1,9 +1,11 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-additional-options "-fdump-tree-vect-details" } */
>  
>  #define TYPE double
>  #define N 16
>  #include "complex-mul-template.c"
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
> index 49bf961c7a17d266d45b9112383a89ac406a705c..827687b92fa7a8e68bf3eaa101ab67a5d07901f3 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
> @@ -1,8 +1,10 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE float
>  #define N 16
>  #include "complex-mul-template.c"
> +
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
> index f5c23fbe20d67e88f870417d9a4bde63c169e301..309b168dfb0813aea39e144813325e4e0910c77c 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
> @@ -1,9 +1,12 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_half } */
> +/* { dg-require-effective-target float16 } */
> +/* { dg-additional-options "-fno-tree-loop-vectorize" } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 16
>  #include "complex-mul-template.c"
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "slp1"  { xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "slp1"  { xfail *-*-* } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
> index 0d4d3ce8869cde8e3020b93456421cc268fb8263..f935405e3d942cc68e49b2b21ca543e23076e0c9 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
> @@ -1,11 +1,12 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_double } */
> +/* { dg-require-effective-target vect_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE double
>  #define N 200
>  #include "complex-add-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
> \ No newline at end of file
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_double } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect"  { target { vect_complex_add_double } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
> index b9866966be37ed2e2c5210a06f04474171e0d4f3..71f391db7bba8ac7c4ce090f650c32d9180ee4f9 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
> @@ -1,11 +1,12 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_float } */
> +/* { dg-require-effective-target vect_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE float
>  #define N 200
>  #include "complex-add-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
> \ No newline at end of file
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
> index c3dca57b4f49932acf28b19ad86774f171072576..e5b826f1ca77d262c7d0a39b6b8446255a9dea36 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
> @@ -1,11 +1,10 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_half } */
> +/* { dg-require-effective-target float16 } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 200
>  #include "complex-add-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
> \ No newline at end of file
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_half } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" { target { vect_complex_add_half } } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
> index df4d3f671f40663d779598dcb5b1f94260c6d7e3..5b70d834c2435c316bdbf119a1e2ace15f68b8e7 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
> @@ -1,11 +1,13 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_double } */
> +/* { dg-require-effective-target vect_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE double
>  #define N 200
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" { target { vect_complex_add_double } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_double } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
> index 6df5c6d18309723d81734429f9034e3f6b10f7fc..3ef05645a2c95ab2269276bd23f2db2afd016c1a 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
> @@ -1,11 +1,13 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_float } */
> +/* { dg-require-effective-target vect_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE float
>  #define N 200
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_float } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
> index a72511262784b942d51fad9d0da423890bc3cd92..06a9216add747ab2880f92828483333dabb30496 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
> @@ -1,12 +1,16 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_half } */
> +/* { dg-require-effective-target vect_float } */
> +/* { dg-require-effective-target float16 } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 200
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" { target { vect_complex_add_half } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_half } } } } */
>  
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
> index c85ff07a6cc432051b8dfc70456a31b8e485e024..3ec46e5cf6694e0ccf23d6e7db094a9df996afbd 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
> @@ -1,8 +1,9 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE double
>  #define N 200
>  #include "complex-mla-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
> index a17b91b1bd4bb0a26107e973ca1b06f7a9e4c24c..af59323023a6a15340ded60155f130671d840f68 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
> @@ -1,8 +1,9 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_complex_add_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE float
>  #define N 200
>  #include "complex-mla-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
> index fa81985b9085ef760737b471591065388d59aed0..34146f3d1e7f123231c7f39ccfa1aba832ee87ca 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
> @@ -1,8 +1,8 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_half } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 200
>  #include "complex-mla-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
> index c85ff07a6cc432051b8dfc70456a31b8e485e024..0982a2b8ead9bec96f6dcbceaeac9c2ebcbda300 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
> @@ -1,8 +1,10 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE double
>  #define N 200
> -#include "complex-mla-template.c"
> +#include "complex-mls-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
> index a17b91b1bd4bb0a26107e973ca1b06f7a9e4c24c..a069533b22a64f62bd8dd6b6bdd3b771c7b7ea4d 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
> @@ -1,8 +1,10 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE float
>  #define N 200
> -#include "complex-mla-template.c"
> +#include "complex-mls-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
> index fa81985b9085ef760737b471591065388d59aed0..89ac54c2a42a114a1afb6dead0504b04c37c3f98 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
> @@ -1,8 +1,9 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_half } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 200
> -#include "complex-mla-template.c"
> +#include "complex-mls-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
> index 77c01a82bb25d62d1fcf56d5015d21d8e3417963..56a8ea4ae0232cb3051a780157902fdb03a9e942 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
> @@ -1,8 +1,8 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_double } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE double
>  #define N 200
>  #include "complex-mul-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
> index a8b44f2069877d354572148acf2d8efbccdf89c6..969416d7dc7779ee6feaa8e069a1a3687dd53559 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
> @@ -1,8 +1,8 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_float } */
>  /* { dg-add-options arm_v8_3a_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE float
>  #define N 200
>  #include "complex-mul-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
> index d57df82808d5a08b52ed905048d7a0b46af41a4b..da1b9213a6b3e1df4fdc4ecf6ffbf3645975a5ba 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
> @@ -1,8 +1,8 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_half } */
>  /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
>  
>  #define TYPE _Float16
>  #define N 200
>  #include "complex-mul-template.c"
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c
> index 438d2192723a7b15261c346a290ccb0d9e0e02b6..bf7c135fa1a8ccf7cf23c783e8572c8d12f245bd 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c
> @@ -1,12 +1,14 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_byte } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
>  
>  #define TYPE int8_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_byte } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_byte } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c
> index 04c27dcf4102e4d53f2cc4f2aebb55a10d1fe5b1..2fd2a9f0617ab1d741826970d0db6ed9a8f393ec 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c
> @@ -1,12 +1,14 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_int } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
>  
>  #define TYPE int32_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_int } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_int } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c
> index 27988ad34233f23b359fa4de56cb1d2182496bcc..70977155256bf6e414f2fa5a604b0e301496a2e6 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c
> @@ -1,12 +1,15 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_long } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE int64_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_long } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_long } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" { target { vect_long_long } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" { target { vect_long_long } } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c
> index 88d225d6ff8004eabc679a51b9dc01d69be2c3b0..8cbb8ac0c19061e7fe4d2978bccc24df0990d540 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c
> @@ -1,12 +1,14 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_short } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
>  
>  #define TYPE int16_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_short } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_short } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c
> index 59109c008bb28bf65600e0427ca86935db10b55c..9477f0d92d8f8f761d84916677ecce9f2a5c6fee 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c
> @@ -1,12 +1,14 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_byte } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
>  
>  #define TYPE uint8_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_byte } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_byte } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
> index 44d96354d6071bcd2d7e61d8e5211692560f6cbe..41f60042ee9a32c26831d1d415f6a2b4a1b20777 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
> @@ -1,12 +1,14 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_int } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
>  
>  #define TYPE uint32_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_int } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_int } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
> index 667145751cd9efbdf8019249cffea7722e1c78e5..7708ac495b8b8a626d2974f3e7070892adc0d8b1 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
> @@ -1,12 +1,15 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_long } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
> +
> +#define UNROLL
>  
>  #define TYPE uint64_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_long } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_long } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" { target { vect_long_long } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" { target { vect_long_long } } } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
> index 841adf830c8e1b2fa9184811b39fb54bfc1af92f..6260be4d12161b9d25d5fecd9fd13b1ba0c76dbd 100644
> --- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
> +++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
> @@ -1,12 +1,14 @@
>  /* { dg-do compile } */
> -/* { dg-require-effective-target vect_complex_add_short } */
>  /* { dg-require-effective-target stdint_types } */
> -/* { dg-add-options arm_v8_1m_mve_fp } */
> +/* { dg-require-effective-target vect_int } */
> +/* { dg-add-options arm_v8_3a_complex_neon } */
>  
>  #define TYPE uint16_t
>  #define N 200
>  #include <stdint.h>
>  #include "complex-add-pattern-template.c"
>  
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
> -/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_short } } } } */
> +/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_short } } } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
> +/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
> 
> 
>
  

Patch

diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
index 8eba24dc187895150ee3515d5bd2a35b46528388..cead05f1cc4e02790630a6cbfe8378c2de3778f3 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
@@ -1,12 +1,15 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_int } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
 
 #define TYPE int32_t
 #define N 16
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_byte } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_int } && ! target { aarch64_sve2 } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
index 9275ff12e0cc4fd643c3d60d1a5ce51cd3550833..0d21f57666ed9ff918dad343cbe53fbbdd271630 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
@@ -1,12 +1,17 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_long } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE int64_t
 #define N 16
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_long } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_long } && ! target { aarch64_sve2 } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" { target { vect_long_long } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" { target { vect_long_long } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" { target { vect_long_long } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
index 8cbbdb825ddb616cc9c3ac7c0b62ad53e0e54045..8928386a5174154719fbc86c6f11d5f886cf1f4a 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
@@ -1,12 +1,17 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_short } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE int16_t
 #define N 16
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_short } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_short } && ! target { aarch64_sve2 } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
index 270c49efbf95ffbc21ff5c3b7ae34280fa1b6059..4ab4b9a446a8f13c052a569aa694016b22bb2b3b 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
@@ -1,12 +1,17 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_int } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE uint32_t
 #define N 16
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_int } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_int } && ! target { aarch64_sve2 } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
index 88144e52014d86842b16520b0940123d5448459c..38aa9c0b9d51d38e5c28c1e81ef082e0c568c8f8 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
@@ -1,12 +1,16 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_long } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE uint64_t
 #define N 16
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_long } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_long } && ! target { aarch64_sve2 } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" { target { vect_long_long } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" { target { vect_long_long } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
index 445af3943d318c4daa69334fa6c1095592e2dec0..8846c9889fb64cdba614553e70052901039f1752 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
@@ -1,12 +1,17 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_short } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE uint16_t
 #define N 16
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail aarch64_sve2 } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_short } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_short } && ! target { aarch64_sve2 } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c b/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c
index a99a9296194472c42fed84376c4a48853073c7fd..658af294f1c81ab28fb961202e165ea8813dff88 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c
@@ -1,5 +1,8 @@ 
 void add90 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i+=2)
     {
       c[i] = a[i] - b[i+1];
@@ -11,6 +14,9 @@  void add90 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 
 void add270 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i+=2)
     {
       c[i] = a[i] + b[i+1];
@@ -22,6 +28,9 @@  void add270 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 
 void addMixed (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i+=4)
     {
       c[i] = a[i] - b[i+1];
@@ -34,6 +43,9 @@  void addMixed (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 void add90HandUnrolled (TYPE a[restrict N], TYPE b[restrict N],
 			TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < (N /2); i+=4)
     {
       c[i] = a[i] - b[i+1];
@@ -48,6 +60,9 @@  void add90HandUnrolled (TYPE a[restrict N], TYPE b[restrict N],
 void add90Hybrid (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N],
 		  TYPE d[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i+=2)
     {
       c[i] = a[i] - b[i+1];
@@ -57,4 +72,4 @@  void add90Hybrid (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N],
     }
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
\ No newline at end of file
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c b/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c
index 32c81e64f627b0f529e6a9129bd7ceeff727a662..f37ab98813faebfbde96fedf647099468609bfd4 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c
@@ -3,6 +3,9 @@ 
 void add0 (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 	   _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = a[i] + b[i];
 }
@@ -10,6 +13,9 @@  void add0 (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void add90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 	       _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = a[i] + (b[i] * I);
 }
@@ -19,6 +25,9 @@  void add90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void add180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 	        _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = a[i] + (b[i] * I * I);
 }
@@ -26,6 +35,9 @@  void add180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void add270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 	        _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = a[i] + (b[i] * I * I * I);
 }
@@ -35,6 +47,9 @@  void add270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void add90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 	       _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = (a[i] * I) + b[i];
 }
@@ -44,6 +59,9 @@  void add90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void add180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 	        _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = (a[i] * I * I) + b[i];
 }
@@ -51,6 +69,9 @@  void add180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void add270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 	        _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = (a[i] * I * I * I) + b[i];
 }
@@ -60,6 +81,9 @@  void add270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void addconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 		 _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = ~a[i] + b[i];
 }
@@ -67,6 +91,9 @@  void addconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void addconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 		 _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = a[i] + ~b[i];
 }
@@ -74,6 +101,9 @@  void addconjsnd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 void addconjboth (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
 		  _Complex TYPE c[restrict N])
 {
+#if defined (UNROLL)
+#pragma GCC unroll 16
+#endif
   for (int i=0; i < N; i++)
     c[i] = ~a[i] + ~b[i];
 }
diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c b/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
index a0348a7041ca384104bc5ab688d941c14e5b7381..14ac512a8efa4d9af8cd274d995a8e642ac9f10f 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
@@ -1,7 +1,7 @@ 
 /* { dg-do run } */
 /* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
 
 #include <stdio.h>
 #include <complex.h>
diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex.exp b/gcc/testsuite/gcc.dg/vect/complex/complex.exp
index f94c7a8ee07c3c39670064e77b94451183871253..ea6bfcdf62f0869674a76fc8bbafab54c91d8280 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/complex.exp
+++ b/gcc/testsuite/gcc.dg/vect/complex/complex.exp
@@ -1,4 +1,4 @@ 
-# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997-2022 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
index 7bbb61adfab06a89ac36a66f848746033158c41c..2e611b77c7631b305d79fe21c4b95c8593dcc369 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
@@ -1,12 +1,16 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_double } */
+/* { dg-require-effective-target vect_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+
+#define UNROLL
 
 #define TYPE double
 #define N 16
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_double } } } } */
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c
index cf99f1de31056bbaca3fe8885643289b770ad76d..1e63a5f2c5e1a478ae9ea1f49c6eb21665cfca8c 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c
@@ -1,11 +1,15 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_float } */
+/* { dg-require-effective-target vect_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+
+#define UNROLL
 
 #define TYPE float
 #define N 16
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
index 9f535dde7c0d131c1a35e5b6b1d27530faaea88f..0ae49c16438c503ad59010a9b170e54764419c36 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
@@ -1,7 +1,8 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_half } */
+/* { dg-require-effective-target float16 } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 16
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
index e121113320ec153a732fe8e1c0b25d06929c126b..3f5619b78ce55c83df07f22dfe58fbb6f56e66ac 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
@@ -1,11 +1,16 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-require-effective-target vect_double } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE double
 #define N 16
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
index 8565833887f026b732b86d2c42c3a3d7a883b8d8..a961a852775f29ade98d61100358cc36c394f3de 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
@@ -1,11 +1,15 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_float } */
+/* { dg-require-effective-target vect_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+
+#define UNROLL
 
 #define TYPE float
 #define N 16
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
index 857ee9de6b48407ebb1c6974d4b05cd661cd4f16..e30df0ff0b03e612ef2491f797a84bcc117df5e1 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
@@ -1,11 +1,16 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_half } */
+/* { dg-require-effective-target float16 } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+
+#define UNROLL
 
 #define TYPE _Float16
 #define N 16
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail arm*-*-* } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { target { vect_complex_add_half } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { target { vect_complex_add_half } && ! target { arm*-*-* } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
index d9d13c29578f905e793e5d80f08ec7b758d09c5f..b77c847403df3253648dc4b2f493364fc1cb6959 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
@@ -1,9 +1,11 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fdump-tree-vect-details" } */
 
 #define TYPE double
 #define N 16
 #include "complex-mla-template.c"
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
index ac680cbca81b3b0bc3a51555236faa7f702e5082..cd68fd190089bc48615e4098a19450c0f374c275 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
@@ -1,8 +1,10 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_float } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fdump-tree-vect-details" } */
+/* { dg-add-options arm_v8_3a_fp16_complex_neon } */
 
 #define TYPE float
 #define N 16
 #include "complex-mla-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
index d0a48d007178a7464ae2e4d00720bb3b3abca18a..510092028d5697b4f48ed4e3d60d586988671d02 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
@@ -1,9 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_half } */
+/* { dg-require-effective-target float16 } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 16
 #include "complex-mla-template.c"
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "slp1" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "slp1"  { xfail *-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c
index d9d13c29578f905e793e5d80f08ec7b758d09c5f..9d9839417a2b09fd7715ce554d9d96827ee3f00c 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-double.c
@@ -1,9 +1,11 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fdump-tree-vect-details" } */
 
 #define TYPE double
 #define N 16
-#include "complex-mla-template.c"
+#include "complex-mls-template.c"
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
index ac680cbca81b3b0bc3a51555236faa7f702e5082..cf540a08acd1a0ffe0b193dd2346a58afc0bfd2a 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
@@ -1,8 +1,11 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_float } */
+/* { dg-additional-options "-fdump-tree-vect-details" } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE float
 #define N 16
-#include "complex-mla-template.c"
+#include "complex-mls-template.c"
+
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
index d0a48d007178a7464ae2e4d00720bb3b3abca18a..217401bae59e658c1f920c4619f0858c95cc3322 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
@@ -1,9 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_half } */
+/* { dg-require-effective-target float16 } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 16
-#include "complex-mla-template.c"
+#include "complex-mls-template.c"
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "slp1"  { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "slp1"  { xfail *-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
index ab8313f01226bfb96b2e304ff7f275cffb665b06..dcac519cd98c6dd5773117134ca1c007ae3e3856 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
@@ -1,9 +1,11 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-fdump-tree-vect-details" } */
 
 #define TYPE double
 #define N 16
 #include "complex-mul-template.c"
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
index 49bf961c7a17d266d45b9112383a89ac406a705c..827687b92fa7a8e68bf3eaa101ab67a5d07901f3 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
@@ -1,8 +1,10 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE float
 #define N 16
 #include "complex-mul-template.c"
+
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
index f5c23fbe20d67e88f870417d9a4bde63c169e301..309b168dfb0813aea39e144813325e4e0910c77c 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
@@ -1,9 +1,12 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_half } */
+/* { dg-require-effective-target float16 } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 16
 #include "complex-mul-template.c"
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "slp1"  { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "slp1"  { xfail *-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
index 0d4d3ce8869cde8e3020b93456421cc268fb8263..f935405e3d942cc68e49b2b21ca543e23076e0c9 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
@@ -1,11 +1,12 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_double } */
+/* { dg-require-effective-target vect_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE double
 #define N 200
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
\ No newline at end of file
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect"  { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
index b9866966be37ed2e2c5210a06f04474171e0d4f3..71f391db7bba8ac7c4ce090f650c32d9180ee4f9 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
@@ -1,11 +1,12 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_float } */
+/* { dg-require-effective-target vect_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE float
 #define N 200
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
\ No newline at end of file
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
index c3dca57b4f49932acf28b19ad86774f171072576..e5b826f1ca77d262c7d0a39b6b8446255a9dea36 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
@@ -1,11 +1,10 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_half } */
+/* { dg-require-effective-target float16 } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 200
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" } } */
\ No newline at end of file
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_half } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 2 "vect" { target { vect_complex_add_half } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
index df4d3f671f40663d779598dcb5b1f94260c6d7e3..5b70d834c2435c316bdbf119a1e2ace15f68b8e7 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
@@ -1,11 +1,13 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_double } */
+/* { dg-require-effective-target vect_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE double
 #define N 200
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
index 6df5c6d18309723d81734429f9034e3f6b10f7fc..3ef05645a2c95ab2269276bd23f2db2afd016c1a 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
@@ -1,11 +1,13 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_float } */
+/* { dg-require-effective-target vect_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE float
 #define N 200
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
index a72511262784b942d51fad9d0da423890bc3cd92..06a9216add747ab2880f92828483333dabb30496 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
@@ -1,12 +1,16 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_half } */
+/* { dg-require-effective-target vect_float } */
+/* { dg-require-effective-target float16 } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 200
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 4 "vect" { target { vect_complex_add_half } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_half } } } } */
 
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
index c85ff07a6cc432051b8dfc70456a31b8e485e024..3ec46e5cf6694e0ccf23d6e7db094a9df996afbd 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
@@ -1,8 +1,9 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE double
 #define N 200
 #include "complex-mla-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
index a17b91b1bd4bb0a26107e973ca1b06f7a9e4c24c..af59323023a6a15340ded60155f130671d840f68 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
@@ -1,8 +1,9 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_complex_add_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE float
 #define N 200
 #include "complex-mla-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
index fa81985b9085ef760737b471591065388d59aed0..34146f3d1e7f123231c7f39ccfa1aba832ee87ca 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
@@ -1,8 +1,8 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_half } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 200
 #include "complex-mla-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
index c85ff07a6cc432051b8dfc70456a31b8e485e024..0982a2b8ead9bec96f6dcbceaeac9c2ebcbda300 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
@@ -1,8 +1,10 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE double
 #define N 200
-#include "complex-mla-template.c"
+#include "complex-mls-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
index a17b91b1bd4bb0a26107e973ca1b06f7a9e4c24c..a069533b22a64f62bd8dd6b6bdd3b771c7b7ea4d 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
@@ -1,8 +1,10 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE float
 #define N 200
-#include "complex-mla-template.c"
+#include "complex-mls-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMA" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
index fa81985b9085ef760737b471591065388d59aed0..89ac54c2a42a114a1afb6dead0504b04c37c3f98 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
@@ -1,8 +1,9 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_half } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 200
-#include "complex-mla-template.c"
+#include "complex-mls-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_FMS" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
index 77c01a82bb25d62d1fcf56d5015d21d8e3417963..56a8ea4ae0232cb3051a780157902fdb03a9e942 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
@@ -1,8 +1,8 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_double } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE double
 #define N 200
 #include "complex-mul-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
index a8b44f2069877d354572148acf2d8efbccdf89c6..969416d7dc7779ee6feaa8e069a1a3687dd53559 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
@@ -1,8 +1,8 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_float } */
 /* { dg-add-options arm_v8_3a_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE float
 #define N 200
 #include "complex-mul-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
index d57df82808d5a08b52ed905048d7a0b46af41a4b..da1b9213a6b3e1df4fdc4ecf6ffbf3645975a5ba 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
@@ -1,8 +1,8 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_half } */
 /* { dg-add-options arm_v8_3a_fp16_complex_neon } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define TYPE _Float16
 #define N 200
 #include "complex-mul-template.c"
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL_CONJ" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_MUL" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c
index 438d2192723a7b15261c346a290ccb0d9e0e02b6..bf7c135fa1a8ccf7cf23c783e8572c8d12f245bd 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c
@@ -1,12 +1,14 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_byte } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
 
 #define TYPE int8_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_byte } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_byte } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c
index 04c27dcf4102e4d53f2cc4f2aebb55a10d1fe5b1..2fd2a9f0617ab1d741826970d0db6ed9a8f393ec 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c
@@ -1,12 +1,14 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_int } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
 
 #define TYPE int32_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_int } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_int } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c
index 27988ad34233f23b359fa4de56cb1d2182496bcc..70977155256bf6e414f2fa5a604b0e301496a2e6 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c
@@ -1,12 +1,15 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_long } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE int64_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_long } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_long } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" { target { vect_long_long } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" { target { vect_long_long } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c
index 88d225d6ff8004eabc679a51b9dc01d69be2c3b0..8cbb8ac0c19061e7fe4d2978bccc24df0990d540 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c
@@ -1,12 +1,14 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_short } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
 
 #define TYPE int16_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_short } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_short } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c
index 59109c008bb28bf65600e0427ca86935db10b55c..9477f0d92d8f8f761d84916677ecce9f2a5c6fee 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c
@@ -1,12 +1,14 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_byte } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
 
 #define TYPE uint8_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_byte } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_byte } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
index 44d96354d6071bcd2d7e61d8e5211692560f6cbe..41f60042ee9a32c26831d1d415f6a2b4a1b20777 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
@@ -1,12 +1,14 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_int } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
 
 #define TYPE uint32_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_int } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_int } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
index 667145751cd9efbdf8019249cffea7722e1c78e5..7708ac495b8b8a626d2974f3e7070892adc0d8b1 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
@@ -1,12 +1,15 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_long } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
+
+#define UNROLL
 
 #define TYPE uint64_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_long } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_long } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" { target { vect_long_long } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" { target { vect_long_long } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
index 841adf830c8e1b2fa9184811b39fb54bfc1af92f..6260be4d12161b9d25d5fecd9fd13b1ba0c76dbd 100644
--- a/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
+++ b/gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
@@ -1,12 +1,14 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_short } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-add-options arm_v8_3a_complex_neon } */
 
 #define TYPE uint16_t
 #define N 200
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_short } } } } */
+/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_short } } } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
+/* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */