1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512vl -mavx512vbmi -O2" } */
       3  /* { dg-additional-options "-fno-PIE" { target ia32 } } */
       4  /* { dg-final { scan-assembler-times "vpmovwb" "3" } } */
       5  /* { dg-final { scan-assembler-times "vpmovdw" "3" } } */
       6  /* { dg-final { scan-assembler-times "vpmovqd" "3" } } */
       7  
       8  typedef short v4hi __attribute__((vector_size (8)));
       9  typedef short v8hi __attribute__((vector_size (16)));
      10  typedef short v16hi __attribute__((vector_size (32)));
      11  typedef short v32hi __attribute__((vector_size (64)));
      12  typedef char v8qi __attribute__((vector_size (8)));
      13  typedef char v16qi __attribute__((vector_size (16)));
      14  typedef char v32qi __attribute__((vector_size (32)));
      15  typedef char v64qi __attribute__((vector_size (64)));
      16  typedef int v2si __attribute__((vector_size (8)));
      17  typedef int v4si __attribute__((vector_size (16)));
      18  typedef int v8si __attribute__((vector_size (32)));
      19  typedef int v16si __attribute__((vector_size (64)));
      20  
      21  v16hi
      22  foo_dw_512 (v32hi x)
      23  {
      24    return __builtin_shufflevector (x, x,
      25  				  0, 2, 4, 6, 8, 10, 12, 14,
      26  				  16, 18, 20, 22, 24, 26, 28, 30);
      27  }
      28  
      29  v8hi
      30  foo_dw_256 (v16hi x)
      31  {
      32    return __builtin_shufflevector (x, x, 0, 2, 4, 6, 8, 10, 12, 14);
      33  }
      34  
      35  v4hi
      36  foo_dw_128 (v8hi x)
      37  {
      38    return __builtin_shufflevector (x, x, 0, 2, 4, 6);
      39  }
      40  
      41  v8si
      42  foo_qd_512 (v16si x)
      43  {
      44    return __builtin_shufflevector (x, x, 0, 2, 4, 6, 8, 10, 12, 14);
      45  }
      46  
      47  v4si
      48  foo_qd_256 (v8si x)
      49  {
      50    return __builtin_shufflevector (x, x, 0, 2, 4, 6);
      51  }
      52  
      53  v2si
      54  foo_qd_128 (v4si x)
      55  {
      56    return __builtin_shufflevector (x, x, 0, 2);
      57  }
      58  
      59  v32qi
      60  foo_wb_512 (v64qi x)
      61  {
      62    return __builtin_shufflevector (x, x,
      63  				  0, 2, 4, 6, 8, 10, 12, 14,
      64  				  16, 18, 20, 22, 24, 26, 28, 30,
      65  				  32, 34, 36, 38, 40, 42, 44, 46,
      66  				  48, 50, 52, 54, 56, 58, 60, 62);
      67  }
      68  
      69  v16qi
      70  foo_wb_256 (v32qi x)
      71  {
      72    return __builtin_shufflevector (x, x,
      73  				  0, 2, 4, 6, 8, 10, 12, 14,
      74  				  16, 18, 20, 22, 24, 26, 28, 30);
      75  }
      76  
      77  v8qi
      78  foo_wb_128 (v16qi x)
      79  {
      80    return __builtin_shufflevector (x, x,
      81  				  0, 2, 4, 6, 8, 10, 12, 14);
      82  }