On 17/11/2025 16:19, Christophe Lyon wrote:
> Surpringly these tests were lacking the extern "C" that other MVE
> intrinsics have, making them fail when tested in C++ mode.
> 
> While fixing that:
> - remove useless dg-skip-if
> - remove hardcoded -mfloat-abi=hard from s64 and u64 versions
> - add check-function-bodies to s64 and u64 versions, such that these
>   tests no longer appear as duplicates.
> 
> I was about to commit this as obvious, but I'm suprised Richard didn't
> notice this while fixing all the other vgetq_lane tests in
> r16-4045-gab6879f3e997aa ?
> 
> OK for trunk?

OK.

I've mainly been fixing issues as I came across them.  This one hadn't hit my 
radar.

R.

> 
> Thanks,
> 
> Christophe
> 
> gcc/testsuite/ChangeLog:
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c: Add missing
>       extern "C". Remove dg-skip-if.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c: Likewise. Add
>       check-function-bodies.
>       * gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c: Likewise.
> ---
>  .../arm/mve/intrinsics/vgetq_lane_f16.c       |  9 ++++-
>  .../arm/mve/intrinsics/vgetq_lane_f32.c       |  9 ++++-
>  .../arm/mve/intrinsics/vgetq_lane_s16.c       |  9 ++++-
>  .../arm/mve/intrinsics/vgetq_lane_s32.c       |  9 ++++-
>  .../arm/mve/intrinsics/vgetq_lane_s64.c       | 37 ++++++++++++++++---
>  .../arm/mve/intrinsics/vgetq_lane_s8.c        |  9 ++++-
>  .../arm/mve/intrinsics/vgetq_lane_u16.c       |  9 ++++-
>  .../arm/mve/intrinsics/vgetq_lane_u32.c       |  9 ++++-
>  .../arm/mve/intrinsics/vgetq_lane_u64.c       | 37 ++++++++++++++++---
>  .../arm/mve/intrinsics/vgetq_lane_u8.c        |  9 ++++-
>  10 files changed, 126 insertions(+), 20 deletions(-)
> 
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c
> index b0811372dc7..4bcc2abb84b 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
>  /* { dg-add-options arm_v8_1m_mve_fp } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  float16_t
>  foo (float16x8_t a)
>  {
> @@ -45,3 +48,7 @@ foo1 (float16x8_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c
> index c923b9ecf26..18d2dfd5a58 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
>  /* { dg-add-options arm_v8_1m_mve_fp } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  float32_t
>  foo (float32x4_t a)
>  {
> @@ -45,3 +48,7 @@ foo1 (float32x4_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c
> index 4a8963744f8..e8744b8c109 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  int16_t
>  foo (int16x8_t a)
>  {
> @@ -43,3 +46,7 @@ foo1 (int16x8_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c
> index 3a504e84382..e6ac370fe96 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  int32_t
>  foo (int32x4_t a)
>  {
> @@ -43,3 +46,7 @@ foo1 (int32x4_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c
> index 63b25088eee..857ed76655b 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c
> @@ -1,23 +1,48 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
> -/* { dg-require-effective-target arm_hard_ok } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
> -/* { dg-additional-options "-mfloat-abi=hard -O2" } */
> +/* { dg-additional-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" "" } } */
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  int64_t
>  foo (int64x2_t a)
>  {
>    return vgetq_lane_s64 (a, 0);
>  }
> -
> -/* { dg-final { scan-assembler {vmov\tr0, r1, d0}  }  } */
> +/*
> +** foo:
> +** (
> +     -mfloat-abi=softfp
> +     no operation needed
> +** |
> +     -mfloat-abi=hard
> +**   vmov\tr0, r1, d0\t@ int
> +** )
> +**   bx\tlr
> +*/
>  
>  int64_t
>  foo1 (int64x2_t a)
>  {
>    return vgetq_lane (a, 0);
>  }
> +/*
> +** foo1:
> +** (
> +     -mfloat-abi=softfp
> +     no operation needed
> +** |
> +     -mfloat-abi=hard
> +**   vmov\tr0, r1, d0\t@ int
> +** )
> +**   bx\tlr
> +*/
>  
> -/* { dg-final { scan-assembler {vmov\tr0, r1, d0}  }  } */
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c
> index cd014b28877..b342af57d24 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  int8_t
>  foo (int8x16_t a)
>  {
> @@ -43,3 +46,7 @@ foo1 (int8x16_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c
> index 74b734051d4..4b420116d7f 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  uint16_t
>  foo (uint16x8_t a)
>  {
> @@ -43,3 +46,7 @@ foo1 (uint16x8_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c
> index c4460e44b9a..05e0bda8f23 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  uint32_t
>  foo (uint32x4_t a)
>  {
> @@ -43,3 +46,7 @@ foo1 (uint32x4_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c
> index a4b900fc66b..7c708d541e3 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c
> @@ -1,23 +1,48 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
> -/* { dg-require-effective-target arm_hard_ok } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
> -/* { dg-additional-options "-mfloat-abi=hard -O2" } */
> +/* { dg-additional-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" "" } } */
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  uint64_t
>  foo (uint64x2_t a)
>  {
>    return vgetq_lane_u64 (a, 0);
>  }
> -
> -/* { dg-final { scan-assembler {vmov\tr0, r1, d0}  }  } */
> +/*
> +** foo:
> +** (
> +     -mfloat-abi=softfp
> +     no operation needed
> +** |
> +     -mfloat-abi=hard
> +**   vmov\tr0, r1, d0\t@ int
> +** )
> +**   bx\tlr
> +*/
>  
>  uint64_t
>  foo1 (uint64x2_t a)
>  {
>    return vgetq_lane (a, 0);
>  }
> +/*
> +** foo1:
> +** (
> +     -mfloat-abi=softfp
> +     no operation needed
> +** |
> +     -mfloat-abi=hard
> +**   vmov\tr0, r1, d0\t@ int
> +** )
> +**   bx\tlr
> +*/
>  
> -/* { dg-final { scan-assembler {vmov\tr0, r1, d0}  }  } */
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c 
> b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c
> index f3abf1e9c56..b86764fe978 100644
> --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c
> +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c
> @@ -1,4 +1,3 @@
> -/* { dg-skip-if "Incompatible float ABI" { *-*-* } { "-mfloat-abi=soft" } 
> {""} } */
>  /* { dg-require-effective-target arm_v8_1m_mve_ok } */
>  /* { dg-add-options arm_v8_1m_mve } */
>  /* { dg-additional-options "-O2" } */
> @@ -6,6 +5,10 @@
>  
>  #include "arm_mve.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  uint8_t
>  foo (uint8x16_t a)
>  {
> @@ -43,3 +46,7 @@ foo1 (uint8x16_t a)
>  ** )
>  **   bx\tlr
>  */
> +
> +#ifdef __cplusplus
> +}
> +#endif

Reply via email to