1 /* { dg-do run { target { aarch64_sve_hw } } } */ 2 /* { dg-options "-O2 -ftree-vectorize" } */ 3 4 #include "reduc_strict_1.c" 5 6 #define TEST_REDUC_PLUS(TYPE) \ 7 { \ 8 TYPE a[NUM_ELEMS (TYPE)]; \ 9 TYPE b[NUM_ELEMS (TYPE)]; \ 10 TYPE r = 0, q = 3; \ 11 for (int i = 0; i < NUM_ELEMS (TYPE); i++) \ 12 { \ 13 a[i] = (i * 0.1) * (i & 1 ? 1 : -1); \ 14 b[i] = (i * 0.3) * (i & 1 ? 1 : -1); \ 15 r += a[i]; \ 16 q -= b[i]; \ 17 asm volatile ("" ::: "memory"); \ 18 } \ 19 TYPE res = reduc_plus_##TYPE (a, b); \ 20 if (res != r * q) \ 21 __builtin_abort (); \ 22 } 23 24 int __attribute__ ((optimize (1))) main()25main () 26 { 27 TEST_ALL (TEST_REDUC_PLUS); 28 return 0; 29 } 30