1 /* { dg-do run } */ 2 /* { dg-require-effective-target avx2 } */ 3 /* { dg-options "-O3 -mavx2 -fno-common -mtune=skylake" } */ 4 5 #include "avx2-check.h" 6 7 #define N 1024 8 float vf1[N+16], vf2[N], vf3[N]; 9 int k[N]; 10 11 __attribute__((noinline, noclone)) void foo(void)12foo (void) 13 { 14 int i; 15 for (i = 0; i < N; i++) 16 { 17 float f; 18 if (vf3[i] < 0.0f) 19 f = vf1[k[i]]; 20 else 21 f = 7.0f; 22 vf2[i] = f; 23 } 24 } 25 26 static void avx2_test(void)27avx2_test (void) 28 { 29 int i; 30 for (i = 0; i < N + 16; i++) 31 { 32 vf1[i] = 5.5f * i; 33 if (i >= N) 34 continue; 35 vf2[i] = 2.0f; 36 vf3[i] = (i & 1) ? i : -i - 1; 37 k[i] = (i & 1) ? ((i & 2) ? -i : N / 2 + i) : (i * 7) % N; 38 asm (""); 39 } 40 foo (); 41 for (i = 0; i < N; i++) 42 if (vf1[i] != 5.5 * i 43 || vf2[i] != ((i & 1) ? 7.0f : 5.5f * ((i * 7) % N)) 44 || vf3[i] != ((i & 1) ? i : -i - 1) 45 || k[i] != ((i & 1) ? ((i & 2) ? -i : N / 2 + i) : ((i * 7) % N))) 46 abort (); 47 } 48