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