https://gcc.gnu.org/g:9793ffce9332349441b5c83f8c1809ac4264a0f2

commit r16-2660-g9793ffce9332349441b5c83f8c1809ac4264a0f2
Author: Spencer Abson <spencer.ab...@arm.com>
Date:   Thu Jul 31 10:01:01 2025 +0000

    aarch64: testsuite: Fix do-assemble tests for SME
    
    GCC doesn't support SME without SVE2, so the -march=armv8-a+<ext> argument 
to
    check_no_compiler_messages causes aarch64_asm_<ext>_ok to return zero for 
SME
    and any <ext> that implies it.  This patch changes the baseline architecure 
to
    armv9-a for these extensions.
    
    The tests for ACLE SME2 intrinsics that require FEAT_FAMINMAX were 
configured
    to do-assemble if aarch64_asm_sme2_ok returned 1 (by default), but they 
really
    need to check if +faminmax is supported too.  The fix above exposed this, so
    we also fix the do-assemble/do-compile choice for those tests here.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c: Gate do-assemble 
on
            assembler support for +faminmax and +sme2.
            * gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c: Likewise.
            * gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c: Likewise.
            * lib/target-supports.exp: Split the extensions that require SME 
into
            a separate set, and use armv9-a as their baseline.

Diff:
---
 .../gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c |  2 ++
 .../gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c |  2 ++
 gcc/testsuite/lib/target-supports.exp              | 28 ++++++++++++++++++----
 13 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c
index 90b5438e1738..b9fd96ac84f3 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x2.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c
index d168ad7ee8e2..70e269761acd 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f16_x4.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c
index 618d50b9b61d..cf57d1b41632 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x2.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c
index 981e78c1b5c7..10d91757066c 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f32_x4.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c
index e93a409475e0..b7918ab44870 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x2.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c
index 2db629e147c5..153a37a005db 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amax_f64_x4.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c
index 74604e14f019..bd6e13b695f3 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x2.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c
index bc3779bca6ca..9f71b1f8ae6c 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f16_x4.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c
index 43e3075d40fc..aaa6a2e8941c 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x2.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c
index 6bd20f8fdd9b..34c1098d2850 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f32_x4.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c
index 3bbef3f27cda..e4138e0cdc9d 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x2.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c 
b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c
index 6f4c9b7787a4..8fbabe78b458 100644
--- a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/amin_f64_x4.c
@@ -1,3 +1,5 @@
+/* { dg-do assemble { target { aarch64_asm_sme2_ok && aarch64_asm_faminmax_ok 
} } } */
+/* { dg-do compile { target { ! { aarch64_asm_sme2_ok && 
aarch64_asm_faminmax_ok } } } } */
 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
 
 #include "test_sme2_acle.h"
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index e375b1ec02b8..74355194b761 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -12522,10 +12522,16 @@ proc 
check_effective_target_aarch64_gas_has_build_attributes { } {
 # various architecture extensions via the .arch_extension pseudo-op.
 
 set exts {
-    "bf16" "cmpbr" "crc" "crypto" "dotprod" "f32mm" "f64mm" "fp" "fp8"
-    "fp8dot2" "fp8dot4" "fp8fma" "i8mm" "ls64" "lse" "lut" "sb" "simd"
-    "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1" "ssve-fp8dot2"
-    "ssve-fp8dot4" "ssve-fp8fma" "sve-b16b16" "sve" "sve2"
+    "bf16" "cmpbr" "crc" "crypto" "dotprod" "f32mm" "f64mm" "faminmax"
+    "fp" "fp8" "fp8dot2" "fp8dot4" "fp8fma" "i8mm" "ls64" "lse" "lut"
+    "sb" "simd" "sve-b16b16" "sve" "sve2"
+}
+
+# We don't support SME without SVE2, so we'll use armv9 as the base
+# archiecture for SME and the features that require it.
+set exts_sve2 {
+    "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1"
+    "ssve-fp8dot2" "ssve-fp8dot4" "ssve-fp8fma"
 }
 
 foreach { aarch64_ext } $exts {
@@ -12542,6 +12548,20 @@ foreach { aarch64_ext } $exts {
     }]
 }
 
+foreach { aarch64_ext } $exts_sve2 {
+    eval [string map [list FUNC $aarch64_ext] {
+       proc check_effective_target_aarch64_asm_FUNC_ok { } {
+         if { [istarget aarch64*-*-*] } {
+               return [check_no_compiler_messages aarch64_FUNC_assembler 
object {
+                       __asm__ (".arch_extension FUNC");
+               } "-march=armv9-a+FUNC"]
+         } else {
+               return 0
+         }
+       }
+    }]
+}
+
 proc check_effective_target_aarch64_asm_sve2p1_ok { } {
     if { [istarget aarch64*-*-*] } {
        return [check_no_compiler_messages aarch64_sve2p1_assembler object {

Reply via email to