1 /* { dg-do run { target aarch64_sve_hw } } */
2 /* { dg-options "-O2 -ftree-vectorize" } */
3
4 #include "cond_mla_3.c"
5
6 #define FACTOR 17
7 #define N 99
8
9 #define TEST_LOOP(TYPE, NAME, OP) \
10 { \
11 TYPE r[N], a[N], b[N], pred[N]; \
12 for (int i = 0; i < N; ++i) \
13 { \
14 a[i] = (i & 1 ? i : 3 * i); \
15 b[i] = (i >> 4) << (i & 15); \
16 pred[i] = i % 3 < i % 5; \
17 asm volatile ("" ::: "memory"); \
18 } \
19 test_##TYPE##_##NAME (r, a, b, FACTOR, pred, N); \
20 for (int i = 0; i < N; ++i) \
21 { \
22 TYPE expected \
23 = pred[i] != 1 ? a[i] OP b[i] * (TYPE) FACTOR : a[i]; \
24 if (r[i] != expected) \
25 __builtin_abort (); \
26 asm volatile ("" ::: "memory"); \
27 } \
28 }
29
30 int
main(void)31 main (void)
32 {
33 TEST_ALL (TEST_LOOP)
34 return 0;
35 }
36