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)13 foo (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()25 avx2_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