| /* PR target/70021 */ |
| /* { dg-do run } */ |
| /* { dg-require-effective-target avx2 } */ |
| /* { dg-options "-O2 -ftree-vectorize -mavx2 -fdump-tree-vect-details -mtune=skylake" } */ |
| |
| #include "avx2-check.h" |
| |
| #define N 160 |
| int a[N]; |
| unsigned long long int b[N], c[N], d[N], e[N]; |
| |
| __attribute__((noinline, noclone)) void |
| foo (void) |
| { |
| int i; |
| for (i = 0; i < N; i += 4) |
| { |
| unsigned long long int f = (_Bool) b[i]; |
| unsigned long long int g = c[i] != d[i]; |
| e[i] = g ^ (a[i] & (g << f)); |
| } |
| } |
| |
| void |
| avx2_test () |
| { |
| int i; |
| for (i = 0; i < N; ++i) |
| { |
| a[i] = 1618000128; |
| b[i] = 10919594786573202791ULL; |
| c[i] = 2593730175074624973ULL; |
| d[i] = 7447894520878803661ULL; |
| e[i] = 14234165565810642243ULL; |
| } |
| foo (); |
| for (i = 0; i < N; ++i) |
| if (e[i] != ((i & 3) ? 14234165565810642243ULL : 1ULL)) |
| __builtin_abort (); |
| } |
| |
| /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */ |