https://gcc.gnu.org/g:035c196cb9be2f1aee142240d506dde474cbe64e
commit r15-3259-g035c196cb9be2f1aee142240d506dde474cbe64e Author: Richard Sandiford <richard.sandif...@arm.com> Date: Wed Aug 28 16:41:08 2024 +0100 aarch64: Add a test for zeroing <64bits>x2_t structures g:8d6c6fbc5271dde433998c09407b30e2cf195420 improved the code generated for functions like: void test_s8 (int8x8x2_t *ptr) { *ptr = (int8x8x2_t) {}; } Previously we would load zero from the constant pool, whereas now we just use "stp xzr, xzr". This patch adds a test for this improvement. gcc/testsuite/ * gcc.target/aarch64/struct_zero.c: New test. Diff: --- gcc/testsuite/gcc.target/aarch64/struct_zero.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gcc/testsuite/gcc.target/aarch64/struct_zero.c b/gcc/testsuite/gcc.target/aarch64/struct_zero.c new file mode 100644 index 000000000000..13f7236a4d27 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/struct_zero.c @@ -0,0 +1,21 @@ +/* { dg-options "-O2" } */ + +#include <arm_neon.h> + +void test_s8 (int8x8x2_t *ptr) { *ptr = (int8x8x2_t) {}; } +void test_u8 (uint8x8x2_t *ptr) { *ptr = (uint8x8x2_t) {}; } +void test_p8 (poly8x8x2_t *ptr) { *ptr = (poly8x8x2_t) {}; } +void test_s16 (int16x4x2_t *ptr) { *ptr = (int16x4x2_t) {}; } +void test_u16 (uint16x4x2_t *ptr) { *ptr = (uint16x4x2_t) {}; } +void test_p16 (poly16x4x2_t *ptr) { *ptr = (poly16x4x2_t) {}; } +void test_bf16 (bfloat16x4x2_t *ptr) { *ptr = (bfloat16x4x2_t) {}; } +void test_f16 (float16x4x2_t *ptr) { *ptr = (float16x4x2_t) {}; } +void test_s32 (int32x2x2_t *ptr) { *ptr = (int32x2x2_t) {}; } +void test_u32 (uint32x2x2_t *ptr) { *ptr = (uint32x2x2_t) {}; } +void test_f32 (float32x2x2_t *ptr) { *ptr = (float32x2x2_t) {}; } +void test_s64 (int64x1x2_t *ptr) { *ptr = (int64x1x2_t) {}; } +void test_u64 (uint64x1x2_t *ptr) { *ptr = (uint64x1x2_t) {}; } +void test_p64 (poly64x1x2_t *ptr) { *ptr = (poly64x1x2_t) {}; } +void test_f64 (float64x1x2_t *ptr) { *ptr = (float64x1x2_t) {}; } + +/* { dg-final { scan-assembler-times {\tstp\txzr, xzr, \[x0\]\n} 15 } } */