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
      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
      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" } } */