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" } } */
> 
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Ivo Totev; HRB 36809 (AG Nuernberg)

Reply via email to