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