On Fri, 29 Aug 2025 at 11:57, Richard Earnshaw <richard.earns...@arm.com> wrote:
>
> On 18/08/2025 18:32, Christophe Lyon wrote:
> > On Mon, 18 Aug 2025 at 19:24, Christophe Lyon
> > <christophe.l...@linaro.org> wrote:
> >>
> >> A few arm effective-targets call check_effective_target_arm32 even
> >> though they would force a -march=XXX flag which supports Arm and/or
> >> Thumb-2, thus making the arm32 check useless.  This has an impact when
> >> the toolchain is configured with a default -march or -mcpu which
> >> supports Thumb-1 only: in such a case, arm32 is false and we skip many
> >> tests, thus reducing coverage.
> >>
> >> This patch removes the call to check_effective_target_arm32 where it
> >> is useless, enabling about 2000 tests.
> >>
> >> In addition, add an early exit if the target is not an arm one, thus
> >> saving a few compilation cycles where not needed.  In all callers of
> >> arm_neon_ok, remove the now useless "istarget arm*-*-*.
> >>
> >> gcc/testsuite/ChangeLog:
> >>
> >>          * lib/target-supports.exp
> >>          (check_effective_target_arm_neon_ok_nocache): Remove arm32 check.
> >>          Add istarget arm*-*-* check.
> >>          (check_effective_target_arm_neon_fp16_ok_nocache): Likewise.
> >>          (check_effective_target_arm_neon_softfp_fp16_ok_nocache): 
> >> Likewise.
> >>          (check_effective_target_arm_v8_neon_ok_nocache): Likewise.
> >>          (check_effective_target_arm_neonv2_ok_nocache): Likewise.
> >>          (check_effective_target_vect_pack_trunc): Remove istarget arm*-*-*
> >>          check.
> >>          (check_effective_target_vect_unpack): Likewise.
> >>          (check_effective_target_vect_condition): Likewise.
> >>          (check_effective_target_vect_cond_mixed): Likewise.
> >>          (available_vector_sizes): Likewise.
> >> ---
> >>
> >> Changes v2->v1:
> >> * Added istarget arm*-*-* check where we remove the arm32 check.
> >> * Remove now useless istarget arm*-*-* checks
> >>
> >> No change in patch 2/2
> >>
> >
> > Forgot to mention that I also posted it on the experimental forge:
> > https://forge.sourceware.org/gcc/gcc-TEST/pulls/62
>
> Which I think has now become
> https://forge.sourceware.org/gcc/gcc-TEST/pulls/65
>
indeed, I re-posted it because the CI output had become nicer / easy
to read thanks to emojis...

> I left a comment there (if you can find it amongst all the CI bot messages).
... but still quite verbose

I answered there, first using the wrong account so I deleted and
re-posted the same comment with my account.

Thanks,

Christophe

>
> R.
>
> >
> >>   gcc/testsuite/lib/target-supports.exp | 85 ++++++++++++---------------
> >>   1 file changed, 39 insertions(+), 46 deletions(-)
> >>
> >> diff --git a/gcc/testsuite/lib/target-supports.exp 
> >> b/gcc/testsuite/lib/target-supports.exp
> >> index 74355194b76..0a4c59c5697 100644
> >> --- a/gcc/testsuite/lib/target-supports.exp
> >> +++ b/gcc/testsuite/lib/target-supports.exp
> >> @@ -5511,25 +5511,26 @@ proc add_options_for_arm_vfp3 { flags } {
> >>   # best options to add.
> >>
> >>   proc check_effective_target_arm_neon_ok_nocache { } {
> >> +    if { ![istarget arm*-*-*] } {
> >> +       return 0
> >> +    }
> >>       global et_arm_neon_flags
> >>       set et_arm_neon_flags ""
> >> -    if { [check_effective_target_arm32] } {
> >> -       foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon 
> >> -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -mcpu=unset 
> >> -march=armv7-a" "-mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard" 
> >> "-mfpu=neon -mfloat-abi=hard -mcpu=unset -march=armv7-a"} {
> >> -           if { [check_no_compiler_messages_nocache arm_neon_ok object {
> >> -               #include <arm_neon.h>
> >> -               int dummy;
> >> -               #ifndef __ARM_NEON__
> >> -               #error not NEON
> >> -               #endif
> >> -               /* Avoid the case where a test adds -mfpu=neon, but the 
> >> toolchain is
> >> -                  configured for -mcpu=arm926ej-s, for example.  */
> >> -               #if __ARM_ARCH < 7 || __ARM_ARCH_PROFILE == 'M'
> >> -               #error Architecture does not support NEON.
> >> -               #endif
> >> -           } "$flags"] } {
> >> -               set et_arm_neon_flags $flags
> >> -               return 1
> >> -           }
> >> +    foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon 
> >> -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -mcpu=unset 
> >> -march=armv7-a" "-mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard" 
> >> "-mfpu=neon -mfloat-abi=hard -mcpu=unset -march=armv7-a"} {
> >> +       if { [check_no_compiler_messages_nocache arm_neon_ok object {
> >> +           #include <arm_neon.h>
> >> +           int dummy;
> >> +           #ifndef __ARM_NEON__
> >> +           #error not NEON
> >> +           #endif
> >> +           /* Avoid the case where a test adds -mfpu=neon, but the 
> >> toolchain is
> >> +           configured for -mcpu=arm926ej-s, for example.  */
> >> +           #if __ARM_ARCH < 7 || __ARM_ARCH_PROFILE == 'M'
> >> +           #error Architecture does not support NEON.
> >> +           #endif
> >> +       } "$flags"] } {
> >> +           set et_arm_neon_flags $flags
> >> +           return 1
> >>          }
> >>       }
> >>
> >> @@ -5715,8 +5716,7 @@ proc check_effective_target_arm_neon_fp16_ok_nocache 
> >> { } {
> >>       global et_arm_neon_fp16_flags
> >>       global et_arm_neon_flags
> >>       set et_arm_neon_fp16_flags ""
> >> -    if { [check_effective_target_arm32]
> >> -        && [check_effective_target_arm_neon_ok] } {
> >> +    if { [check_effective_target_arm_neon_ok] } {
> >>          foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-fp16"
> >>                         "-mfpu=neon-fp16 -mfloat-abi=softfp"
> >>                         "-mfp16-format=ieee"
> >> @@ -5754,8 +5754,7 @@ proc 
> >> check_effective_target_arm_neon_softfp_fp16_ok_nocache { } {
> >>       global et_arm_neon_softfp_fp16_flags
> >>       global et_arm_neon_flags
> >>       set et_arm_neon_softfp_fp16_flags ""
> >> -    if { [check_effective_target_arm32]
> >> -        && [check_effective_target_arm_neon_ok] } {
> >> +    if { [check_effective_target_arm_neon_ok] } {
> >>          foreach flags {"-mfpu=neon-fp16 -mfloat-abi=softfp"
> >>                         "-mfpu=neon-fp16 -mfloat-abi=softfp 
> >> -mfp16-format=ieee"} {
> >>              if { [check_no_compiler_messages_nocache 
> >> arm_neon_softfp_fp16_ok object {
> >> @@ -5898,22 +5897,20 @@ proc check_effective_target_arm_fp16_none_ok { } {
> >>   proc check_effective_target_arm_v8_neon_ok_nocache { } {
> >>       global et_arm_v8_neon_flags
> >>       set et_arm_v8_neon_flags ""
> >> -    if { [check_effective_target_arm32] } {
> >> -       foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-fp-armv8" 
> >> "-mfpu=neon-fp-armv8 -mfloat-abi=softfp"} {
> >> -           if { [check_no_compiler_messages_nocache arm_v8_neon_ok object 
> >> {
> >> -               #if __ARM_ARCH < 8
> >> -               #error not armv8 or later
> >> -               #endif
> >> -               #include "arm_neon.h"
> >> -               void
> >> -               foo ()
> >> -               {
> >> -                 __asm__ volatile ("vrintn.f32 q0, q0");
> >> -               }
> >> -           } "$flags -mcpu=unset -march=armv8-a"] } {
> >> -               set et_arm_v8_neon_flags $flags
> >> -               return 1
> >> +    foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-fp-armv8" 
> >> "-mfpu=neon-fp-armv8 -mfloat-abi=softfp"} {
> >> +       if { [check_no_compiler_messages_nocache arm_v8_neon_ok object {
> >> +           #if __ARM_ARCH < 8
> >> +           #error not armv8 or later
> >> +           #endif
> >> +           #include "arm_neon.h"
> >> +           void
> >> +           foo ()
> >> +           {
> >> +               __asm__ volatile ("vrintn.f32 q0, q0");
> >>              }
> >> +       } "$flags -mcpu=unset -march=armv8-a"] } {
> >> +           set et_arm_v8_neon_flags $flags
> >> +           return 1
> >>          }
> >>       }
> >>
> >> @@ -5934,8 +5931,7 @@ proc check_effective_target_arm_neonv2_ok_nocache { 
> >> } {
> >>       global et_arm_neonv2_flags
> >>       global et_arm_neon_flags
> >>       set et_arm_neonv2_flags ""
> >> -    if { [check_effective_target_arm32]
> >> -        && [check_effective_target_arm_neon_ok] } {
> >> +    if { [check_effective_target_arm_neon_ok] } {
> >>          foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-vfpv4" 
> >> "-mfpu=neon-vfpv4 -mfloat-abi=softfp"} {
> >>              if { [check_no_compiler_messages_nocache arm_neonv2_ok object 
> >> {
> >>                  #include "arm_neon.h"
> >> @@ -8846,7 +8842,7 @@ proc check_effective_target_vect_pack_trunc { } {
> >>         expr { [istarget powerpc*-*-*]
> >>               || [check_effective_target_x86]
> >>               || [istarget aarch64*-*-*]
> >> -            || ([istarget arm*-*-*] && 
> >> [check_effective_target_arm_neon_ok]
> >> +            || ([check_effective_target_arm_neon_ok]
> >>                   && [check_effective_target_arm_little_endian])
> >>               || ([istarget mips*-*-*]
> >>                   && [et-is-effective-target mips_msa])
> >> @@ -8872,7 +8868,7 @@ proc check_effective_target_vect_unpack { } {
> >>               || [istarget aarch64*-*-*]
> >>               || ([istarget mips*-*-*]
> >>                   && [et-is-effective-target mips_msa])
> >> -            || ([istarget arm*-*-*] && 
> >> [check_effective_target_arm_neon_ok]
> >> +            || ([check_effective_target_arm_neon_ok]
> >>                   && [check_effective_target_arm_little_endian])
> >>               || ([istarget s390*-*-*]
> >>                   && [check_effective_target_s390_vx])
> >> @@ -9559,8 +9555,7 @@ proc check_effective_target_vect_condition { } {
> >>               || [check_effective_target_x86]
> >>               || ([istarget mips*-*-*]
> >>                   && [et-is-effective-target mips_msa])
> >> -            || ([istarget arm*-*-*]
> >> -                && [check_effective_target_arm_neon_ok])
> >> +            || [check_effective_target_arm_neon_ok]
> >>               || ([istarget s390*-*-*]
> >>                   && [check_effective_target_s390_vx])
> >>               || [istarget amdgcn-*-*]
> >> @@ -9578,8 +9573,7 @@ proc check_effective_target_vect_cond_mixed { } {
> >>         expr { [check_effective_target_x86]
> >>               || [istarget aarch64*-*-*]
> >>               || [istarget powerpc*-*-*]
> >> -            || ([istarget arm*-*-*]
> >> -                && [check_effective_target_arm_neon_ok])
> >> +            || [check_effective_target_arm_neon_ok]
> >>               || ([istarget mips*-*-*]
> >>                   && [et-is-effective-target mips_msa])
> >>               || ([istarget s390*-*-*]
> >> @@ -9760,8 +9754,7 @@ proc available_vector_sizes { } {
> >>              lappend result [aarch64_sve_bits]
> >>          }
> >>          lappend result 128 64
> >> -    } elseif { [istarget arm*-*-*]
> >> -               && [check_effective_target_arm_neon_ok] } {
> >> +    } elseif { [check_effective_target_arm_neon_ok] } {
> >>          lappend result 128 64
> >>       } elseif { [check_effective_target_x86] } {
> >>          if { [check_avx_available] && ![check_prefer_avx128] } {
> >> --
> >> 2.34.1
> >>
>

Reply via email to