The vect testsuite adds -mfpu=neon before the arm_v8_3a_complex_neon
flags via check_vect_support_and_set_flags, so before this change
testcases are compiled with -mfpu=neon (and no -march/-mfloat-abi
flag) with an arm-linux-gnueabihf toolchain configured using
--with-float=hard --with-fpu=vfpv3-d16 --with-arch=armv7-a
However, when computing et_arm_v8_3a_complex_neon_flags, -mfpu=neon is
not used, and the first attempt with flags="" uses
-mcpu=unset -march=armv8.3-a, resulting in
error: #error "__ARM_FEATURE_COMPLEX not defined"
The same occurs with -mfloat-abi=softfp -mfpu=auto -mcpu=unset -march=armv8.3-a,
but -mfloat-abi=hard -mfpu=auto -mcpu=unset -march=armv8.3-a fails with:
error: '-mfloat-abi=hard': selected architecture lacks an FPU
So finally et_arm_v8_3a_complex_neon_flags is empty and
check_effective_target_arm_v8_3a_complex_neon_ok_nocache returns 0,
leading to the behavior described in the first paragraph.
Since -march=armv8.3-a alone does not enable any FPU, it looks like an
oversight and +simd should be added (this also gives some sense to the
-mfpu=auto option which is used along -mfloat-abi=XXX, and to _neon_
in the effective-target name).
Adding +simd thus means that trying with flags="" will still fail (now
using -mcpu=unset -march=armv8.3-a+simd):
error: #error "__ARM_FEATURE_COMPLEX not defined"
but -mfloat-abi=softfp -mfpu=auto -mcpu=unset -march=armv8.3-a+simd
succeeds and testcases are now compiled with
-mfpu=neon -mfloat-abi=softfp -mfpu=auto -mcpu=unset -march=armv8.3-a+simd
leading to compilation errors when they #include <complex.h> or <stdint.h>:
error: gnu/stubs-soft.h: No such file or directory
Adding #include <stdint.h> to the sample code for the
effective-targets solves this problem and we now compile the tests
with
-mfpu=neon -mfloat-abi=hard -mfpu=auto -mcpu=unset -march=armv8.3-a+simd
This patch does not enable more tests, but now we have
FAIL: gcc.dg/vect/complex/fast-math-complex-mls-float.c scan-tree-dump vect
"Found COMPLEX_ADD_ROT270"
which used to pass with -mfpu=neon, instead of the now implied
neon-fp-armv8, but that looks like a bug?
gcc/testsuite/ChangeLog:
* lib/target-supports.exp
(check_effective_target_arm_v8_3a_complex_neon_ok_nocache): Add
+simd, include stdint.h.
---
gcc/testsuite/lib/target-supports.exp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/gcc/testsuite/lib/target-supports.exp
b/gcc/testsuite/lib/target-supports.exp
index 9f4e2700dd2..59eb38344ed 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -13256,8 +13256,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 -mcpu=unset -march=armv8.3-a"] } {
- set et_arm_v8_3a_complex_neon_flags "$flags -mcpu=unset
-march=armv8.3-a"
+ #include <stdint.h>
+ } "$flags -mcpu=unset -march=armv8.3-a+simd"] } {
+ set et_arm_v8_3a_complex_neon_flags "$flags -mcpu=unset
-march=armv8.3-a+simd"
return 1;
}
}
--
2.34.1