1  /* { dg-do run }  */
       2  /* { dg-require-effective-target avx2 }  */
       3  /* { dg-options "-O3 -mavx2" }  */
       4  
       5  #include "avx2-check.h"
       6  
       7  typedef unsigned int ui;
       8  ui x[32*32];
       9  ui y[32];
      10  ui z[32];
      11  void __attribute__ ((noinline, noclone)) foo (ui n, ui z)
      12  {
      13    ui i, b;
      14    ui v;
      15   for (i = 0; i< n; i++)
      16    {
      17      v = y[i];
      18      if (v) {
      19        for (b = 0; b < 32; b++)
      20  	if ((v >> b) & 1)
      21  	  x[i*32 +b] = z;
      22        y[i] = 0;
      23      }
      24    } 
      25  }
      26  
      27  static void
      28  avx2_test (void)
      29  {
      30    int i;
      31    unsigned int val;
      32    for (i = 0; i<32; i++)
      33      {
      34        val = 1U << i;
      35        y[i] = (i & 1)? 0 : val;
      36        z[i] = i;
      37      }
      38    foo (32, 10);
      39    for (i=0; i<1024; i+=66)
      40      if (x[i] != 10)
      41        __builtin_abort ();
      42  }