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