Depending on if/how the testing flags are overridden, the first value
we try("") might not do what we want.
For instance, if the whole testsuite is executed with
(A) -mthumb -march=armv7-m -mtune=cortex-m3 -mfloat-abi=softfp
bf16_neon_ok is first compiled with
(A) (B)
where B = -mcpu=unset -march=armv8.2-a+bf16
which is accepted, so a testcase like vld2q_lane_bf16_indices_1.c
is compiled with:
(A) (C) (B)
where C = -mfpu=neon -mfloat-abi=softfp -mcpu=unset -march=armv7-a
-mfpu=neon-fp16 -mfp16-format=ieee
because advsimd-intrinsics.exp has set additional_flags to (C)
via arm_neon_fp16_ok
So the testcase is compiled with
[...] -mfpu=neon-fp16 -mcpu=unset -march=armv8.2-a+bf16
(thus -mfpu=neon-fp16) and bf16 support is disabled.
The patch replaces "" with -mfpu=auto which matches the intended
effect of -march=armv8.2-a+bf16 as added by bf16_neon_ok, and the
testcase is now compiled with
(A) (C) -mfpu=auto (B)
However, since this effective-target is also used on aarch64 (which
does not support -mfpu=auto), we do this only on arm.
This patch improves coverage, and makes
v{ld,st}[234]q_lane_bf16_indices_1.c pass when testsuite flags are
overridden as described above (e.g. for M-profile).
gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_arm_v8_2a_bf16_neon_ok_nocache):
Conditionally use -mfpu=auto.
---
gcc/testsuite/lib/target-supports.exp | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/gcc/testsuite/lib/target-supports.exp
b/gcc/testsuite/lib/target-supports.exp
index e2622a445c5..09b16a14024 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -6871,12 +6871,19 @@ proc add_options_for_arm_fp16fml_neon { flags } {
proc check_effective_target_arm_v8_2a_bf16_neon_ok_nocache { } {
global et_arm_v8_2a_bf16_neon_flags
set et_arm_v8_2a_bf16_neon_flags ""
+ set fpu_auto ""
if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
return 0;
}
- foreach flags {"" "-mfloat-abi=softfp -mfpu=neon-fp-armv8"
"-mfloat-abi=hard -mfpu=neon-fp-armv8" } {
+ if { [istarget arm*-*-*] } {
+ set fpu_auto "-mfpu=auto"
+ }
+
+ foreach flags [list "$fpu_auto" \
+ "-mfloat-abi=softfp -mfpu=neon-fp-armv8" \
+ "-mfloat-abi=hard -mfpu=neon-fp-armv8" ] {
if { [check_no_compiler_messages_nocache arm_v8_2a_bf16_neon_ok object {
#include <arm_neon.h>
#if !defined (__ARM_FEATURE_BF16_VECTOR_ARITHMETIC)
--
2.34.1