1 /* PR target/70021 */ 2 /* { dg-do run } */ 3 /* { dg-require-effective-target avx2 } */ 4 /* { dg-options "-O2 -ftree-vectorize -mavx2 -fdump-tree-vect-details -mtune=skylake" } */ 5 6 #include "avx2-check.h" 7 8 #define N 160 9 int a[N]; 10 unsigned long long int b[N], c[N], d[N], e[N]; 11 12 __attribute__((noinline, noclone)) void foo(void)13foo (void) 14 { 15 int i; 16 for (i = 0; i < N; i += 4) 17 { 18 unsigned long long int f = (_Bool) b[i]; 19 unsigned long long int g = c[i] != d[i]; 20 e[i] = g ^ (a[i] & (g << f)); 21 } 22 } 23 24 void avx2_test()25avx2_test () 26 { 27 int i; 28 for (i = 0; i < N; ++i) 29 { 30 a[i] = 1618000128; 31 b[i] = 10919594786573202791ULL; 32 c[i] = 2593730175074624973ULL; 33 d[i] = 7447894520878803661ULL; 34 e[i] = 14234165565810642243ULL; 35 } 36 foo (); 37 for (i = 0; i < N; ++i) 38 if (e[i] != ((i & 3) ? 14234165565810642243ULL : 1ULL)) 39 __builtin_abort (); 40 } 41 42 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */ 43