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)