1 /* { dg-do run { target { aarch64_sve_hw } } } */
2 /* { dg-options "-O2 -ftree-vectorize -ffast-math" } */
6 #define NUM_ELEMS(TYPE) (73 + sizeof (TYPE))
8 #define INIT_VECTOR(TYPE) \
9 TYPE a[NUM_ELEMS (TYPE) + 1]; \
10 for (int i = 0; i < NUM_ELEMS (TYPE) + 1; i++) \
12 a[i] = ((i * 2) * (i & 1 ? 1 : -1) | 3); \
13 asm volatile ("" ::: "memory"); \
16 #define TEST_REDUC_PLUS(TYPE) \
19 TYPE r1 = reduc_plus_##TYPE (a, NUM_ELEMS (TYPE)); \
20 volatile TYPE r2 = 0; \
21 for (int i = 0; i < NUM_ELEMS (TYPE); ++i) \
27 #define TEST_REDUC_MAXMIN(TYPE, NAME, CMP_OP) \
30 TYPE r1 = reduc_##NAME##_##TYPE (a, NUM_ELEMS (TYPE)); \
31 volatile TYPE r2 = 13; \
32 for (int i = 0; i < NUM_ELEMS (TYPE); ++i) \
33 r2 = a[i] CMP_OP r2 ? a[i] : r2; \
38 #define TEST_REDUC_BITWISE(TYPE, NAME, BIT_OP) \
41 TYPE r1 = reduc_##NAME##_##TYPE (a, NUM_ELEMS (TYPE)); \
42 volatile TYPE r2 = 13; \
43 for (int i = 0; i < NUM_ELEMS (TYPE); ++i) \
51 TEST_PLUS (TEST_REDUC_PLUS
)
52 TEST_MAXMIN (TEST_REDUC_MAXMIN
)
53 TEST_BITWISE (TEST_REDUC_BITWISE
)