Skip to content
Snippets Groups Projects
Commit 035c196c authored by Richard Sandiford's avatar Richard Sandiford
Browse files

aarch64: Add a test for zeroing <64bits>x2_t structures

g:8d6c6fbc 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.
parent 3c9338b5
No related branches found
No related tags found
No related merge requests found
/* { 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 } } */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment