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)
> 

Reply via email to