1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512bw -mavx512vl -mavx512dq -O2" } */
       3  /* { dg-final { scan-assembler-not "vmov" } } */
       4  /* { dg-final { scan-assembler-times "vpmovzxbw" "3" } } */
       5  /* { dg-final { scan-assembler-times "vpmovzxwd" "3" } } */
       6  /* { dg-final { scan-assembler-times "vpmovzxdq" "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  v32hi
      22  foo_zxwd_512 (v16hi x)
      23  {
      24    return __builtin_shufflevector (x, (v16hi) {},
      25  				  0, 16, 1, 17, 2, 18, 3, 19,
      26  				  4, 20, 5, 21, 6, 22, 7, 23,
      27  				  8, 24, 9, 25, 10, 26, 11, 27,
      28  				  12, 28, 13, 29, 14, 30, 15, 31);
      29  }
      30  
      31  v16hi
      32  foo_zxwd_256 (v8hi x)
      33  {
      34    return __builtin_shufflevector (x, (v8hi) {},
      35  				  0, 8, 1, 9, 2, 10, 3, 11,
      36  				  4, 12, 5, 13, 6, 14, 7, 15);
      37  }
      38  
      39  v8hi
      40  foo_zxwd_128 (v4hi x)
      41  {
      42    return __builtin_shufflevector (x, (v4hi) {}, 0, 4, 1, 5, 2, 6, 3, 7);
      43  }
      44  
      45  v16si
      46  foo_zxdq_512 (v8si x)
      47  {
      48    return __builtin_shufflevector (x, (v8si) {},
      49  				  0, 8, 1, 9, 2, 10, 3, 11,
      50  				  4, 12, 5, 13, 6, 14, 7, 15);
      51  }
      52  
      53  v8si
      54  foo_zxdq_256 (v4si x)
      55  {
      56    return __builtin_shufflevector (x, (v4si) {}, 0, 4, 1, 5, 2, 6, 3, 7);
      57  }
      58  
      59  v4si
      60  foo_zxdq_128 (v2si x)
      61  {
      62    return __builtin_shufflevector (x, (v2si) {}, 0, 2, 1, 3);
      63  }
      64  
      65  v64qi
      66  foo_zxbw_512 (v32qi x)
      67  {
      68    return __builtin_shufflevector (x, (v32qi) {},
      69  				  0, 32, 1, 33, 2, 34, 3, 35,
      70  				  4, 36, 5, 37, 6, 38, 7, 39,
      71  				  8, 40, 9, 41, 10, 42, 11, 43,
      72  				  12, 44, 13, 45, 14, 46, 15, 47,
      73  				  16, 48, 17, 49, 18, 50, 19, 51,
      74  				  20, 52, 21, 53, 22, 54, 23, 55,
      75  				  24, 56, 25, 57, 26, 58, 27, 59,
      76  				  28, 60, 29, 61, 30, 62, 31, 63);
      77  }
      78  
      79  v32qi
      80  foo_zxbw_256 (v16qi x)
      81  {
      82    return __builtin_shufflevector (x, (v16qi) {},
      83  				  0, 16, 1, 17, 2, 18, 3, 19,
      84  				  4, 20, 5, 21, 6, 22, 7, 23,
      85  				  8, 24, 9, 25, 10, 26, 11, 27,
      86  				  12, 28, 13, 29, 14, 30, 15, 31);
      87  }
      88  
      89  v16qi
      90  foo_zxbw_128 (v8qi x)
      91  {
      92    return __builtin_shufflevector (x, (v8qi) {},
      93  				  0, 8, 1, 9, 2, 10, 3, 11,
      94  				  4, 12, 5, 13, 6, 14, 7, 15);
      95  }