Tested on aarch64-linux, aarch64-darwin, OK for trunk?
thanks,
Iain

--- 8< ---

In some cases we want to be able to check whether a given mcmodel
value is accepted by the target (it is not sufficient just to set
-mcmodel=, that will cause the test to fail under those conditions
rather than being UNSUPPORTED).

gcc/testsuite/ChangeLog:

        * lib/target-supports.exp: Provide aarch64_mcmodel_large/tiny.
        * gcc.target/aarch64/pr70120-2.c: Require mcmodel support.
        * gcc.target/aarch64/pr78255.c: Likewise.
        * gcc.target/aarch64/pr78561.c: Likewise.
        * gcc.target/aarch64/pr78733.c: Likewise.
        * gcc.target/aarch64/pr79041-2.c: Likewise.
        * gcc.target/aarch64/pr94530.c: Likewise.
        * gcc.target/aarch64/reload-valid-spoff.c: Likewise.
        * gcc.target/aarch64/symbol-range-tiny.c: Likewise.

Signed-off-by: Iain Sandoe <[email protected]>
---
 gcc/testsuite/gcc.target/aarch64/pr70120-2.c  |  1 +
 gcc/testsuite/gcc.target/aarch64/pr78255.c    |  1 +
 gcc/testsuite/gcc.target/aarch64/pr78561.c    |  1 +
 gcc/testsuite/gcc.target/aarch64/pr78733.c    |  1 +
 gcc/testsuite/gcc.target/aarch64/pr79041-2.c  |  1 +
 gcc/testsuite/gcc.target/aarch64/pr94530.c    |  1 +
 .../gcc.target/aarch64/reload-valid-spoff.c   |  1 +
 .../gcc.target/aarch64/symbol-range-tiny.c    |  1 +
 gcc/testsuite/lib/target-supports.exp         | 34 +++++++++++++++++++
 9 files changed, 42 insertions(+)

diff --git a/gcc/testsuite/gcc.target/aarch64/pr70120-2.c 
b/gcc/testsuite/gcc.target/aarch64/pr70120-2.c
index 8f5cdc93fe3..a35c9064889 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr70120-2.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr70120-2.c
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target lp64 } */
 /* { dg-options "-Og -freorder-functions -g3 -mcmodel=large -fno-pie" } */
+/* { dg-require-effective-target aarch64_mcmodel_large } */
 
 typedef short v32u16 __attribute__ ((vector_size (32)));
 typedef int v32u32 __attribute__ ((vector_size (32)));
diff --git a/gcc/testsuite/gcc.target/aarch64/pr78255.c 
b/gcc/testsuite/gcc.target/aarch64/pr78255.c
index b078cf3e1c1..f9347007e77 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr78255.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr78255.c
@@ -1,5 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mcmodel=tiny" } */
+/* { dg-require-effective-target aarch64_mcmodel_tiny } */
 
 extern int bar (void *);
 
diff --git a/gcc/testsuite/gcc.target/aarch64/pr78561.c 
b/gcc/testsuite/gcc.target/aarch64/pr78561.c
index 048d2d7969f..f5a90c75895 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr78561.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr78561.c
@@ -1,5 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-Og -O3 -mcmodel=tiny" } */
+/* { dg-require-effective-target aarch64_mcmodel_tiny } */
 
 int
 main (__fp16 x)
diff --git a/gcc/testsuite/gcc.target/aarch64/pr78733.c 
b/gcc/testsuite/gcc.target/aarch64/pr78733.c
index 8fc1b422a86..332e52dd573 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr78733.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr78733.c
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mcmodel=large" } */
 /* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target aarch64_mcmodel_large } */
 
 __int128
 t (void)
diff --git a/gcc/testsuite/gcc.target/aarch64/pr79041-2.c 
b/gcc/testsuite/gcc.target/aarch64/pr79041-2.c
index 8fc1b422a86..332e52dd573 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr79041-2.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr79041-2.c
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mcmodel=large" } */
 /* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target aarch64_mcmodel_large } */
 
 __int128
 t (void)
diff --git a/gcc/testsuite/gcc.target/aarch64/pr94530.c 
b/gcc/testsuite/gcc.target/aarch64/pr94530.c
index 9620b63769d..b3a2abb3086 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr94530.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr94530.c
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target lp64 } */
 /* { dg-options "-Os -mcpu=falkor -mpc-relative-literal-loads -mcmodel=large 
-fno-pie -Wno-deprecated" } */
+/* { dg-require-effective-target aarch64_mcmodel_large } */
 
 extern void bar(const char *);
 
diff --git a/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c 
b/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
index 37e00ac9aa1..22d2f98c200 100644
--- a/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
+++ b/gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
@@ -2,6 +2,7 @@
 /* { dg-require-effective-target lp64 } */
 /* { dg-options "-O2 -mcmodel=large -fno-builtin -fno-pie" }  */
 /* { dg-skip-if "-mcmodel=large -fPIC not currently supported" { aarch64-*-* } 
 { "-fPIC" } { "" } } */
+/* { dg-require-effective-target aarch64_mcmodel_large } */
 
 typedef long unsigned int size_t;
 typedef unsigned short int sa_family_t;
diff --git a/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c 
b/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
index fc6a4f3ec78..cab6d712ef7 100644
--- a/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
+++ b/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
@@ -1,5 +1,6 @@
 /* { dg-do link } */
 /* { dg-options "-O3 -save-temps -mcmodel=tiny" } */
+/* { dg-require-effective-target aarch64_mcmodel_tiny } */
 
 char fixed_regs[0x00080000];
 
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index 75afa807703..7ad1e0a8c07 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -13038,6 +13038,23 @@ proc check_effective_target_aarch64_tiny { } {
     }
 }
 
+# True if the compiler will emit tiny code model when provided with the
+# -mcmodel=tiny compiler switch.
+
+proc check_effective_target_aarch64_mcmodel_tiny { } {
+    if { [istarget aarch64*-*-*] } {
+       return [check_no_compiler_messages aarch64_mcmodel_tiny object {
+           #ifdef __AARCH64_CMODEL_TINY__
+           int dummy;
+           #else
+           #error target not AArch64 tiny code model
+           #endif
+       } "-mcmodel=tiny"]
+    } else {
+       return 0
+    }
+}
+
 # Return 1 if Gas supports AEABI build attributes on AArch64 target
 proc check_effective_target_aarch64_gas_has_build_attributes { } {
     if { ![istarget aarch64*-*-*] } {
@@ -13161,6 +13178,23 @@ proc check_effective_target_aarch64_large { } {
     }
 }
 
+# True if the compiler will emit large code model when provided with the
+# -mcmodel=large compiler switch.
+
+proc check_effective_target_aarch64_mcmodel_large { } {
+    if { [istarget aarch64*-*-*] } {
+       return [check_no_compiler_messages aarch64_mcmodel_large object {
+           #ifdef __AARCH64_CMODEL_LARGE__
+           int dummy;
+           #else
+           #error target not AArch64 large code model
+           #endif
+       } "-mcmodel=large"]
+    } else {
+       return 0
+    }
+}
+
 # Return 1 if the assembler accepts the aarch64 .variant_pcs directive.
 
 proc check_effective_target_aarch64_variant_pcs { } {
-- 
2.50.1 (Apple Git-155)

Reply via email to