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