https://gcc.gnu.org/g:e901cc8f287256ce87151420e3ae17d62acf9189
commit r16-5415-ge901cc8f287256ce87151420e3ae17d62acf9189 Author: Christophe Lyon <[email protected]> Date: Mon Nov 17 11:05:10 2025 +0000 arm: testsuite: fix vgetq_lane tests for c++ 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. 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. Diff: --- .../gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c | 9 +++++- .../gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c | 9 +++++- .../gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c | 9 +++++- .../gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c | 9 +++++- .../gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c | 37 ++++++++++++++++++---- .../gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c | 9 +++++- .../gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c | 9 +++++- .../gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c | 9 +++++- .../gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c | 37 ++++++++++++++++++---- .../gcc.target/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 b0811372dc71..4bcc2abb84bf 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 c923b9ecf260..18d2dfd5a588 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 4a8963744f8f..e8744b8c109a 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 3a504e84382e..e6ac370fe966 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 63b25088eeea..857ed76655b1 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 cd014b288774..b342af57d243 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 74b734051d41..4b420116d7f2 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 c4460e44b9ab..05e0bda8f235 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 a4b900fc66bf..7c708d541e38 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 f3abf1e9c566..b86764fe9781 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
