1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512vl -mavx512vbmi -O2" } */
       3  /* { dg-final { scan-assembler-times "vpermi2b" "3" } } */
       4  
       5  typedef char v16qi __attribute__((vector_size (16)));
       6  typedef char v32qi __attribute__((vector_size (32)));
       7  typedef char v64qi __attribute__((vector_size (64)));
       8  
       9  
      10  v64qi
      11  foob_512 (v64qi x, v64qi y)
      12  {
      13    return __builtin_shufflevector (x, y,
      14  				  0, 2, 4, 6, 8, 10, 12, 14,
      15  				  16, 18, 20, 22, 24, 26, 28, 30,
      16  				  32, 34, 36, 38, 40, 42, 44, 46,
      17  				  48, 50, 52, 54, 56, 58, 60, 62,
      18  				  64, 65, 66, 67, 68, 69, 70, 71,
      19  				  72, 73, 74, 77, 79, 74, 72, 70,
      20  				  89, 88, 78, 86, 85, 75, 83, 82,
      21  				  112, 108, 101, 100, 86, 96, 97, 95);
      22  }
      23  
      24  v32qi
      25  foob_256 (v32qi x, v32qi y)
      26  {
      27    return __builtin_shufflevector (x, y,
      28  				  0, 2, 4, 6, 8, 10, 12, 14,
      29  				  16, 18, 20, 22, 24, 26, 28, 30,
      30  				  32, 34, 36, 38, 40, 42, 44, 46,
      31  				  48, 50, 52, 54, 56, 58, 60, 62);
      32  }
      33  
      34  v16qi
      35  foob_128 (v16qi x, v16qi y)
      36  {
      37    return __builtin_shufflevector (x, y,
      38  				  0, 2, 4, 6, 8, 10, 12, 14,
      39  				  16, 18, 20, 22, 24, 26, 28, 30);
      40  }