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

Reply via email to