1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-O2 -mavx512vl -masm=att" } */
3 
4 typedef char V1 __attribute__((vector_size (32)));
5 typedef short V2 __attribute__((vector_size (32)));
6 
7 void
f1(V1 x,char y)8 f1 (V1 x, char y)
9 {
10   register V1 a __asm ("xmm16");
11   a = x;
12   asm volatile ("" : "+v" (a));
13   a[7] = y;
14   asm volatile ("" : "+v" (a));
15 }
16 
17 void
f2(V1 x,char y)18 f2 (V1 x, char y)
19 {
20   register V1 a __asm ("xmm16");
21   a = x;
22   asm volatile ("" : "+v" (a));
23   a[28] = y;
24   asm volatile ("" : "+v" (a));
25 }
26 
27 void
f3(V2 x,short y)28 f3 (V2 x, short y)
29 {
30   register V2 a __asm ("xmm16");
31   a = x;
32   asm volatile ("" : "+v" (a));
33   a[3] = y;
34   asm volatile ("" : "+v" (a));
35 }
36 
37 void
f4(V2 x,short y)38 f4 (V2 x, short y)
39 {
40   register V2 a __asm ("xmm16");
41   a = x;
42   asm volatile ("" : "+v" (a));
43   a[14] = y;
44   asm volatile ("" : "+v" (a));
45 }
46 
47 /* { dg-final { scan-assembler-times "vinserti32x4\[^\n\r]*0x0\[^\n\r]*%ymm16" 2 } } */
48 /* { dg-final { scan-assembler-times "vinserti32x4\[^\n\r]*0x1\[^\n\r]*%ymm16" 2 } } */
49 /* { dg-final { scan-assembler-times "vextracti32x4\[^\n\r]*0x1\[^\n\r]*%\[yz]mm16" 2 } } */
50