1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-O2 -mavx512vl -mno-avx512bw -masm=att" } */
       3  
       4  typedef char V1 __attribute__((vector_size (16)));
       5  
       6  void
       7  f1 (V1 x)
       8  {
       9    register V1 a __asm ("xmm16");
      10    a = x;
      11    asm volatile ("" : "+v" (a));
      12    a = __builtin_shuffle (a, (V1) { 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5 });
      13    asm volatile ("" : "+v" (a));
      14  }
      15  
      16  /* { dg-final { scan-assembler-not "vpalignr\[^\n\r]*\\\$6\[^\n\r]*%xmm16\[^\n\r]*%xmm16\[^\n\r]*%xmm16" } } */
      17  
      18  typedef short V2 __attribute__((vector_size (16)));
      19  
      20  void
      21  f2 (V2 x)
      22  {
      23    register V2 a __asm ("xmm16");
      24    a = x;
      25    asm volatile ("" : "+v" (a));
      26    a = __builtin_shuffle (a, (V2) { 5, 6, 7, 0, 1, 2, 3, 4 });
      27    asm volatile ("" : "+v" (a));
      28  }
      29  
      30  /* { dg-final { scan-assembler-not "vpalignr\[^\n\r]*\\\$10\[^\n\r]*%xmm16\[^\n\r]*%xmm16\[^\n\r]*%xmm16" } } */
      31  
      32  typedef int V3 __attribute__((vector_size (16)));
      33  
      34  void
      35  f3 (V3 x)
      36  {
      37    register V3 a __asm ("xmm16");
      38    a = x;
      39    asm volatile ("" : "+v" (a));
      40    a = __builtin_shuffle (a, (V3) { 3, 0, 1, 2 });
      41    asm volatile ("" : "+v" (a));
      42  }
      43  
      44  /* { dg-final { scan-assembler-times "vpshufd\[^\n\r]*\\\$147\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */
      45  
      46  typedef long long V4 __attribute__((vector_size (16)));
      47  
      48  void
      49  f4 (V4 x)
      50  {
      51    register V4 a __asm ("xmm16");
      52    a = x;
      53    asm volatile ("" : "+v" (a));
      54    a = __builtin_shuffle (a, (V4) { 1, 0 });
      55    asm volatile ("" : "+v" (a));
      56  }
      57  
      58  /* { dg-final { scan-assembler-not "vpalignr\[^\n\r]*\\\$8\[^\n\r]*%xmm16\[^\n\r]*%xmm16\[^\n\r]*%xmm16" } } */
      59  
      60  typedef float V5 __attribute__((vector_size (16)));
      61  
      62  void
      63  f5 (V5 x)
      64  {
      65    register V5 a __asm ("xmm16");
      66    a = x;
      67    asm volatile ("" : "+v" (a));
      68    a = __builtin_shuffle (a, (V3) { 3, 0, 1, 2 });
      69    asm volatile ("" : "+v" (a));
      70  }
      71  
      72  /* { dg-final { scan-assembler-times "vpermilps\[^\n\r]*\\\$147\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */
      73  
      74  typedef double V6 __attribute__((vector_size (16)));
      75  
      76  void
      77  f6 (V6 x)
      78  {
      79    register V6 a __asm ("xmm16");
      80    a = x;
      81    asm volatile ("" : "+v" (a));
      82    a = __builtin_shuffle (a, (V4) { 1, 0 });
      83    asm volatile ("" : "+v" (a));
      84  }
      85  
      86  /* { dg-final { scan-assembler-times "vpermilpd\[^\n\r]*\\\$1\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */