1 /* { dg-do run { target aarch64_sve_hw } } */
2 /* { dg-options "-O2 -ftree-vectorize" } */
8 #define TEST_VCOND_VAR(DATA_TYPE, CMP_TYPE, COND, SUFFIX) \
10 DATA_TYPE x[N], y[N], r[N]; \
11 CMP_TYPE a[N], b[N]; \
12 for (int i = 0; i < N; ++i) \
17 b[i] = N - N / 3 - i; \
18 asm volatile ("" ::: "memory"); \
20 vcond_var_##CMP_TYPE##_##SUFFIX (r, x, y, a, b, N); \
21 for (int i = 0; i < N; ++i) \
22 if (r[i] != (a[i] COND b[i] ? x[i] : y[i])) \
26 #define TEST_VCOND_IMM(DATA_TYPE, CMP_TYPE, COND, IMM, SUFFIX) \
28 DATA_TYPE x[N], y[N], r[N]; \
30 for (int i = 0; i < N; ++i) \
34 a[i] = IMM - N / 3 + i; \
35 asm volatile ("" ::: "memory"); \
37 vcond_imm_##CMP_TYPE##_##SUFFIX (r, x, y, a, N); \
38 for (int i = 0; i < N; ++i) \
39 if (r[i] != (a[i] COND (CMP_TYPE) IMM ? x[i] : y[i])) \
43 int __attribute__ ((optimize (1)))
44 main (int argc
, char **argv
)
46 TEST_VAR_ALL (TEST_VCOND_VAR
)
47 TEST_IMM_ALL (TEST_VCOND_IMM
)