diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2024-08-28 16:41:08 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2024-08-28 16:41:08 +0100 |
commit | 035c196cb9be2f1aee142240d506dde474cbe64e (patch) | |
tree | cd926b30eecf4cf547bcbb9234a2c83c01e08241 | |
parent | 3c9338b532fd609f5cc1c50d6a4e77e0e1ab3bc5 (diff) | |
download | gcc-035c196cb9be2f1aee142240d506dde474cbe64e.zip gcc-035c196cb9be2f1aee142240d506dde474cbe64e.tar.gz gcc-035c196cb9be2f1aee142240d506dde474cbe64e.tar.bz2 |
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.
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/struct_zero.c | 21 |
1 files changed, 21 insertions, 0 deletions
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 0000000..13f7236 --- /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 } } */ |