On Tue, Aug 11, 2026 at 10:55:25AM +0100, Iain Sandoe wrote: > Tested on aarch64-linux, aarch64-darwin, OK for trunk?
Ok, thanks Alice > 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) >
