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 } } */

Reply via email to