On 07/10/2026 15:10, Christophe Lyon wrote:
> The test checks that we don't accidentally vectorize when fp16 is NOT
> enabled, so the test would fail when using
> e.g. -march=armv8.1-m.main+mve.fp.
> 
> Introduce arm_mve_fp effective-target, similar to arm_mve, but check
> if MVE floating-point is supported.
> 
> Skip the test in that case.
> 
> Tested on:
> -mthumb/-march=armv8.1-m.main+mve.fp+fp.dp/-mtune=cortex-m55/-mfloat-abi=hard/-mfpu=auto
> 
> gcc/ChangeLog:
> 
>       * doc/sourcebuild.texi: Document new arm_mve_fp effective-target.
> 
> gcc/testsuite/ChangeLog:
> 
>       * lib/target-supports.exp: Add arm_mve_fp effective-target.
>       * gcc.target/arm/vect-half-floats.c: Add dg-skip-if for
>       arm_mve_fp.
> ---
>  gcc/doc/sourcebuild.texi                        |  5 +++++
>  gcc/testsuite/gcc.target/arm/vect-half-floats.c |  1 +
>  gcc/testsuite/lib/target-supports.exp           | 16 ++++++++++++++++
>  3 files changed, 22 insertions(+)
> 
> diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
> index 3aa9fcbb577..9302259960a 100644
> --- a/gcc/doc/sourcebuild.texi
> +++ b/gcc/doc/sourcebuild.texi
> @@ -2360,6 +2360,11 @@ ARM target supports the @code{-mfloat-abi=hard} option.
>  @anchor{arm_mve}
>  ARM target supports generating MVE instructions.
>  
> +@item arm_mve_fp
> +@anchor{arm_mve_fp}
> +ARM target supports generating MVE instructions with floating-point
> +support.
> +
>  @item arm_v8_1_lob_ok
>  @anchor{arm_v8_1_lob_ok}
>  ARM Target supports executing the Armv8.1-M Mainline Low Overhead Loop
> diff --git a/gcc/testsuite/gcc.target/arm/vect-half-floats.c 
> b/gcc/testsuite/gcc.target/arm/vect-half-floats.c
> index 49ca2e9b083..dc14688e9c1 100644
> --- a/gcc/testsuite/gcc.target/arm/vect-half-floats.c
> +++ b/gcc/testsuite/gcc.target/arm/vect-half-floats.c
> @@ -1,4 +1,5 @@
>  /* { dg-do compile }  */
> +/* { dg-skip-if "mve.fp supports fp16 vectorization" { arm_mve_fp } } */

This doesn't feel right.  We already test float16 and arm_fp16_ok below, but 
shouldn't the check be a generic arm_fp16_vect that handles both MVE and neon 
variants that also support fp16 vectorized operations?

R.

>  /* { dg-options "-Ofast -ftree-vectorize -fdump-tree-vect-all -std=c11" } */
>  /* { dg-require-effective-target float16 } */ 
>  /* { dg-require-effective-target arm_fp16_ok } */
> diff --git a/gcc/testsuite/lib/target-supports.exp 
> b/gcc/testsuite/lib/target-supports.exp
> index ae04b6a8daa..803376006ae 100644
> --- a/gcc/testsuite/lib/target-supports.exp
> +++ b/gcc/testsuite/lib/target-supports.exp
> @@ -7019,6 +7019,22 @@ proc check_effective_target_arm_mve { } {
>      }]
>  }
>  
> +# Return 1 if this is an ARM target supporting MVE with floating-point
> +# instructions.
> +proc check_effective_target_arm_mve_fp { } {
> +    if { ![istarget arm*-*-*] } {
> +     return 0
> +    }
> +    return [check_no_compiler_messages arm_mve_fp assembly {
> +     #if !defined (__ARM_FEATURE_MVE)
> +     #error "__ARM_FEATURE_MVE not defined"
> +     #endif
> +     #if !(__ARM_FEATURE_MVE & 2)
> +     #error "__ARM_FEATURE_MVE for floating point not defined"
> +     #endif
> +    }]
> +}
> +
>  # Return 1 if the target supports ARMv8.1-M MVE with floating point
>  # instructions, 0 otherwise.  The test is valid for ARM.
>  # Record the command line options needed.

Reply via email to