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
f1(v4si a)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
f2(v2di a)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
f3(v4si a)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
f4(v4si a,unsigned int * p)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
f5(v2di a,unsigned long long * p)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 } } */
54