]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
testsuite: rework some vect/complex testcases
authorArtemiy Volkov <artemiy.volkov@arm.com>
Fri, 2 Jan 2026 11:18:19 +0000 (11:18 +0000)
committerArtemiy Volkov <artemiy.volkov@arm.com>
Tue, 6 Jan 2026 10:37:17 +0000 (10:37 +0000)
This is the second stab at
https://gcc.gnu.org/pipermail/gcc-patches/2026-January/704823.html, which
concerns cleaning up some testcases in gcc.dg/vect/complex.  The original
commit message reads:

---------------------------------------------------------------------------
Some of the testcases in the gcc.dg/vect/complex directory try to match
"stmt.*$internal_fn" in the slp1/vect logs, which leads to many false
positives; this patch changes this to "add new stmt: \[^\n\r]*$internal_fn",
making sure that the log fragments matched in this way are limited to
single lines and correspond to actual newly created GIMPLE statements.
This main change results in some fallout, necessitating the following
additional tweaks:

- For fast-math testcases, replace the "1"s in scan-tree-dump-times
  directives by appropriate counts.
- XFAIL bb-slp and vect testcases featuring integral types,
  since the cadd{90,270} optabs are not implemented for integral modes.
- Disable some FP16 tests for arm targets due to absence of cadd{90,270}
  for V8HF.
- Replace "target { X } && ! target { Y }" selectors with the correct
  "target { X && { ! Y } }" form.
- In bb-slp-complex-add-pattern-long.c, adjust the testcase header to
  match other tests so that different scan-tree-dump-times directives
  can be switched off selectively.
- In bb-slp-complex-add-pattern-long.c, remove an extraneous scan for
  "Found COMPLEX_ADD_ROT90".
- In bb-slp-complex-add-pattern-int.c, use vect_complex_add_int instead of
  vect_complex_add_byte.
---------------------------------------------------------------------------

Following Tamar's feedback, tweaks 2 and 3 above have been fixed by these
changes since v1:

- Change what dg-add-options does for arm_v8_3a{,_fp16}_complex_neon so
  that the correct flags are returned regardless of configure-time values
  of -mfpu.
- For integer tests, require MVE rather than AdvSIMD from the arm
  backend's side, as only that ISA has cadd{90,270} for integral modes.
- Un-XFAIL testcases that gcc is currently able to vectorize, separately
  for the arm and aarch64 backends.

Re-regtested on aarch64 (with and without SVE2) and arm.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c: Adjust testcase.
* 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/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-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:
* 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.
* lib/target-supports.exp:
(check_effective_target_arm_v8_3a_complex_neon_ok_nocache): Add
explicit "+simd" and tighten check-compile code fragment.
(check_effective_target_arm_v8_3a_fp16_complex_neon_ok_nocache):
Likewise.

29 files changed:
gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
gcc/testsuite/gcc.dg/vect/complex/complex-add-pattern-template.c
gcc/testsuite/gcc.dg/vect/complex/complex-add-template.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-float.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-byte.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-int.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-long.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-short.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-byte.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
gcc/testsuite/lib/target-supports.exp

index cead05f1cc4e02790630a6cbfe8378c2de3778f3..d5550165b8c1d9e4e284986d0b5530ad91af657d 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 /* { dg-additional-options "-fno-tree-loop-vectorize" } */
 
 #define TYPE int32_t
@@ -9,7 +9,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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 "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" "slp1" { target { vect_complex_add_int } xfail { aarch64*-*-* } } } } */
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" "slp1" { target { vect_complex_add_int } xfail { *-*-* } } } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
index 0d21f57666ed9ff918dad343cbe53fbbdd271630..c46e365236c72e480d0d5b8b3dd18f0214bf8f75 100644 (file)
@@ -1,7 +1,8 @@
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_complex_add_long } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define UNROLL
 
@@ -10,8 +11,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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 "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" "slp1" { target { vect_complex_add_long } xfail { *-*-* } } } } */
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" "slp1" { target { vect_complex_add_long } xfail { *-*-* } } } } */
 /* { 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 } } } } */
index 8928386a5174154719fbc86c6f11d5f886cf1f4a..5e16867aafbadd89fa2f1a8b9b4ac256279525b1 100644 (file)
@@ -2,7 +2,7 @@
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-additional-options "-fno-tree-loop-vectorize" } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define UNROLL
 
@@ -11,7 +11,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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 "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" "slp1" { target { vect_complex_add_short } xfail { *-*-* } } } } */
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" "slp1" { target { vect_complex_add_short } xfail { *-*-* } } } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
index 4ab4b9a446a8f13c052a569aa694016b22bb2b3b..a0d199f8e9d40acb85239cbe6237c7779029dcf3 100644 (file)
@@ -2,7 +2,7 @@
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-additional-options "-fno-tree-loop-vectorize" } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define UNROLL
 
@@ -11,7 +11,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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 "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" "slp1" { target { vect_complex_add_int } xfail { aarch64*-*-* } } } }*/
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" "slp1" { target { vect_complex_add_int } xfail { aarch64*-*-* } } } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
index 38aa9c0b9d51d38e5c28c1e81ef082e0c568c8f8..c254721d51949861baea1002262c4c89f581c24f 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-additional-options "-fno-tree-loop-vectorize" } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define UNROLL
 
@@ -10,7 +10,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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 "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" "slp1" { target { vect_complex_add_long } xfail { *-*-* } } } } */
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" "slp1" { target { vect_complex_add_long } xfail { *-*-* } } } } */
 /* { 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 } } } } */
index 8846c9889fb64cdba614553e70052901039f1752..015f4eaa8528def149d6416d036bdcc524718760 100644 (file)
@@ -2,7 +2,7 @@
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-additional-options "-fno-tree-loop-vectorize" } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define UNROLL
 
@@ -11,7 +11,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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 "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" "slp1" { target { vect_complex_add_short } xfail { aarch64*-*-* } } } } */
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" "slp1" { target { vect_complex_add_short } xfail { aarch64*-*-* } } } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
index 658af294f1c81ab28fb961202e165ea8813dff88..9b9f0a4a7d8e57d59c021b0a0cf4059c04d765b5 100644 (file)
@@ -10,7 +10,7 @@ void add90 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
     }
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 1 "vect" } } */
 
 void add270 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 {
@@ -24,7 +24,7 @@ void add270 (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
     }
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" } } */
 
 void addMixed (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N])
 {
@@ -55,7 +55,7 @@ void add90HandUnrolled (TYPE a[restrict N], TYPE b[restrict N],
     }
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 1 "vect" } } */
 
 void add90Hybrid (TYPE a[restrict N], TYPE b[restrict N], TYPE c[restrict N],
                  TYPE d[restrict N])
@@ -72,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" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 2 "vect" } } */
index f37ab98813faebfbde96fedf647099468609bfd4..3870196b9fb2542394fff55a4b7b0720439be856 100644 (file)
@@ -20,7 +20,7 @@ void add90snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
     c[i] = a[i] + (b[i] * I);
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 1 "vect" } } */
 
 void add180snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
                _Complex TYPE c[restrict N])
@@ -42,7 +42,7 @@ void add270snd (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
     c[i] = a[i] + (b[i] * I * I * I);
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" } } */
 
 void add90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
               _Complex TYPE c[restrict N])
@@ -54,7 +54,7 @@ void add90fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
     c[i] = (a[i] * I) + b[i];
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 1 "vect" } } */
 
 void add180fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
                _Complex TYPE c[restrict N])
@@ -76,7 +76,7 @@ void add270fst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
     c[i] = (a[i] * I * I * I) + b[i];
 }
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" } } */
 
 void addconjfst (_Complex TYPE a[restrict N], _Complex TYPE b[restrict N],
                 _Complex TYPE c[restrict N])
index fd5bd9b2da01ebd27e39a51adb645539889a47a6..ec8109c9b510849f716f86f0d16a939e11d40439 100644 (file)
@@ -9,8 +9,8 @@
 #define N 16
 #include "complex-add-template.c"
 
-/* { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 32 "slp1" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 32 "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" } } */
index a859b23303086f4120f158b1c878472276007376..40b79f5c5d92cef9d158bf3f1403a881ebaa1cb7 100644 (file)
@@ -9,7 +9,7 @@
 #define N 16
 #include "complex-add-template.c"
 
-/* { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 16 "slp1" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 16 "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" } } */
index 12df361c06d0e7a2f2a1440bd7ee7bf4d8e67e6f..c486fba13d75998dcb48004f9c0c51987d30eb6c 100644 (file)
@@ -10,5 +10,5 @@
 
 /* Vectorization is failing for these cases.  They should work but for now ignore.  */
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "slp1" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "slp1" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" "slp1" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" "slp1" { xfail *-*-* } } } */
index 2cd7eb25b3ef099896c98f77ec55403b11c6b741..7678e26bec0dc87d302e33e3768a5b682c8d5a4a 100644 (file)
@@ -9,7 +9,7 @@
 #define N 16
 #include "complex-add-pattern-template.c"
 
-/* { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 20 "slp1" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 8 "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" } } */
index 6e560d8778e7966e290d827191cfb75f17f00f1d..65d8c3956d9959d3b5062f81159ee3ca6bc9a3f8 100644 (file)
@@ -9,7 +9,7 @@
 #define N 16
 #include "complex-add-pattern-template.c"
 
-/* { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 10 "slp1" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 4 "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" } } */
index e90d10e584f9c997604531f1ca96c7a760d2ac12..ae1e02e301e3fc0368d47cbf6d68580b8b816ae5 100644 (file)
@@ -10,7 +10,7 @@
 #define N 16
 #include "complex-add-pattern-template.c"
 
-/* { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 5 "slp1" { target { vect_complex_add_half } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 2 "slp1" { target { vect_complex_add_half } } } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "slp1" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "slp1" } } */
index c95c573d560f0acd82731a5ee45418af4e33023f..32ef5faeaa8653325f2efb87191f156536da1045 100644 (file)
@@ -7,7 +7,7 @@
 #define N 200
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_double } } } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect"  { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" } } */
index 954644b82f93f225126c940d26ed2494fea05e1d..e9fd02ea88e859d5f4e5f0c5c2527812bbd963bc 100644 (file)
@@ -7,7 +7,7 @@
 #define N 200
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_float } } } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 2 "vect" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" } } */
index a773e796ddcd757f2cacca161842afbbd913754b..1c8625b0e19f8e553e4f446056a6ef49f41f6bea 100644 (file)
@@ -8,5 +8,5 @@
 #define N 200
 #include "complex-add-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 2 "vect" } } */
index 2dede5c7639c9d981a711076473d4790cbfc4a40..8e98b85f590379a23f4da3689f5da33d609630a4 100644 (file)
@@ -7,7 +7,7 @@
 #define N 200
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 4 "vect" { target { vect_complex_add_double } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" "vect" } } */
index 73f2f07d7df108b006034e258dbbc2b7733f2edf..3415cc2287a032de68533dee9e4508ae1ada5be9 100644 (file)
@@ -7,7 +7,7 @@
 #define N 200
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_float } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" "vect" } } */
index e634da938733e3f3042d7ea23762df6bf94c43e5..18e0800eb85a3585d3e2a900a1b4b8584a18f0e1 100644 (file)
@@ -8,8 +8,8 @@
 #define N 200
 #include "complex-add-pattern-template.c"
 
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT90" 1 "vect" { target { vect_complex_add_half } } } } */
-/* { dg-final { scan-tree-dump-times "stmt.*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_half } && ! target { arm*-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_half } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_half } } } }  */
 
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
index bf7c135fa1a8ccf7cf23c783e8572c8d12f245bd..0f63ff4eea49d396cfee29688e04e252b9c6e9e7 100644 (file)
@@ -1,14 +1,14 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #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" { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_byte } xfail { *-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_byte } xfail { *-*-* } } } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
index 2fd2a9f0617ab1d741826970d0db6ed9a8f393ec..346bd86feafb307df6a4db4be359cb8b971ace8d 100644 (file)
@@ -1,14 +1,14 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #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" { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_int } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" } } */
index 70977155256bf6e414f2fa5a604b0e301496a2e6..c3ab2be225115cc6486345ee7c999ba6755f99bd 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define UNROLL
 
@@ -9,7 +9,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_long } xfail { *-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_long } xfail { *-*-* } } } } */
 /* { 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 } } } } */
index 8cbb8ac0c19061e7fe4d2978bccc24df0990d540..23e63f702d3b3a3e4d161bc815b66b0c6818b460 100644 (file)
@@ -1,14 +1,14 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #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" { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_short } xfail { *-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_short } xfail { *-*-* } } } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT270" "vect" } } */
 /* { dg-final { scan-tree-dump "Found COMPLEX_ADD_ROT90" "vect" } } */
index 9477f0d92d8f8f761d84916677ecce9f2a5c6fee..ca24416cc43bb57b6bd0efd19fffdea649d5504a 100644 (file)
@@ -1,14 +1,14 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #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" { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_byte } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" } } */
index 41f60042ee9a32c26831d1d415f6a2b4a1b20777..260f778a4fe26cdf110fb8ddcf8ba3efa33f4188 100644 (file)
@@ -1,14 +1,14 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #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" { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_int } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" } } */
index 7708ac495b8b8a626d2974f3e7070892adc0d8b1..6a88a82f374b002c329cf9e9f2ba04386d811e0b 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #define UNROLL
 
@@ -9,7 +9,7 @@
 #include <stdint.h>
 #include "complex-add-pattern-template.c"
 
-/* { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_long } xfail { *-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT270" 1 "vect" { target { vect_complex_add_long } xfail { *-*-* } } } } */
 /* { 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 } } } } */
index 6260be4d12161b9d25d5fecd9fd13b1ba0c76dbd..db86837ffe7232a06e45e2bccb098bcc99624aaa 100644 (file)
@@ -1,14 +1,14 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target stdint_types } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options arm_v8_3a_complex_neon } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
 
 #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" { 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-times "add new stmt: \[^\n\r]*COMPLEX_ADD_ROT90" 3 "vect" { target { vect_complex_add_short } } } } */
+/* { dg-final { scan-tree-dump-times "add new stmt: \[^\n\r]*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" } } */
index d335735382c3402f813ae4f052f3d86659ef13fb..dbcba42629fac16a389d9a8007e6304cec72f07c 100644 (file)
@@ -13735,8 +13735,9 @@ proc check_effective_target_arm_v8_3a_complex_neon_ok_nocache { } {
            #if !defined (__ARM_FEATURE_COMPLEX)
            #error "__ARM_FEATURE_COMPLEX not defined"
            #endif
-       } "$flags $cpu_unset -march=armv8.3-a"] } {
-           set et_arm_v8_3a_complex_neon_flags "$flags $cpu_unset -march=armv8.3-a"
+           #include <complex.h>
+       } "$flags $cpu_unset -march=armv8.3-a+simd"] } {
+           set et_arm_v8_3a_complex_neon_flags "$flags $cpu_unset -march=armv8.3-a+simd"
            return 1;
        }
     }
@@ -13782,9 +13783,13 @@ proc check_effective_target_arm_v8_3a_fp16_complex_neon_ok_nocache { } {
            #if !defined (__ARM_FEATURE_COMPLEX)
            #error "__ARM_FEATURE_COMPLEX not defined"
            #endif
-       } "$flags $cpu_unset -march=armv8.3-a+fp16"] } {
+           #if !defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
+           #error "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC not defined"
+           #endif
+           #include <complex.h>
+       } "$flags $cpu_unset -march=armv8.3-a+fp16+simd"] } {
            set et_arm_v8_3a_fp16_complex_neon_flags \
-                       "$flags $cpu_unset -march=armv8.3-a+fp16"
+                       "$flags $cpu_unset -march=armv8.3-a+fp16+simd"
            return 1;
        }
     }