1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-O2 -mavx512vl -mavx512dq" } */
       3  
       4  typedef int v4si __attribute__((vector_size (16)));
       5  typedef long long v2di __attribute__((vector_size (16)));
       6  
       7  unsigned int
       8  f1 (v4si a)
       9  {
      10    register v4si c __asm ("xmm16") = a;
      11    asm volatile ("" : "+v" (c));
      12    v4si d = c;
      13    return ((unsigned int *) &d)[3];
      14  }
      15  
      16  unsigned long long
      17  f2 (v2di a)
      18  {
      19    register v2di c __asm ("xmm16") = a;
      20    asm volatile ("" : "+v" (c));
      21    v2di d = c;
      22    return ((unsigned long long *) &d)[1];
      23  }
      24  
      25  unsigned long long
      26  f3 (v4si a)
      27  {
      28    register v4si c __asm ("xmm16") = a;
      29    asm volatile ("" : "+v" (c));
      30    v4si d = c;
      31    return ((unsigned int *) &d)[3];
      32  }
      33  
      34  void
      35  f4 (v4si a, unsigned int *p)
      36  {
      37    register v4si c __asm ("xmm16") = a;
      38    asm volatile ("" : "+v" (c));
      39    v4si d = c;
      40    *p = ((unsigned int *) &d)[3];
      41  }
      42  
      43  void
      44  f5 (v2di a, unsigned long long *p)
      45  {
      46    register v2di c __asm ("xmm16") = a;
      47    asm volatile ("" : "+v" (c));
      48    v2di d = c;
      49    *p = ((unsigned long long *) &d)[1];
      50  }
      51  
      52  /* { dg-final { scan-assembler-times "vpextrd\[^\n\r]*xmm16" 3 } } */
      53  /* { dg-final { scan-assembler-times "vpextrq\[^\n\r]*xmm16" 2 } } */