1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-O2 -mavx512vl -masm=att" } */
4 typedef float V1
__attribute__((vector_size (16)));
5 typedef float V2
__attribute__((vector_size (32)));
6 typedef int V4
__attribute__((vector_size (16)));
7 typedef int V5
__attribute__((vector_size (32)));
12 register V1 a
__asm ("xmm16");
14 asm volatile ("" : "+v" (a
));
15 a
= __builtin_shuffle (a
, (V4
) { 0, 0, 0, 0 });
16 asm volatile ("" : "+v" (a
));
22 register V1 a
__asm ("xmm16");
24 asm volatile ("" : "+v" (a
));
25 a
= __builtin_shuffle (a
, (V4
) { 1, 1, 1, 1 });
26 asm volatile ("" : "+v" (a
));
32 register V1 a
__asm ("xmm16");
34 asm volatile ("" : "+v" (a
));
35 a
= __builtin_shuffle (a
, (V4
) { 2, 2, 2, 2 });
36 asm volatile ("" : "+v" (a
));
42 register V1 a
__asm ("xmm16");
44 asm volatile ("" : "+v" (a
));
45 a
= __builtin_shuffle (a
, (V4
) { 3, 3, 3, 3 });
46 asm volatile ("" : "+v" (a
));
52 register V1 a
__asm ("xmm16");
53 a
= __builtin_shuffle (*x
, (V4
) { 0, 0, 0, 0 });
54 asm volatile ("" : "+v" (a
));
60 register V1 a
__asm ("xmm16");
61 a
= __builtin_shuffle (*x
, (V4
) { 1, 1, 1, 1 });
62 asm volatile ("" : "+v" (a
));
68 register V1 a
__asm ("xmm16");
69 a
= __builtin_shuffle (*x
, (V4
) { 2, 2, 2, 2 });
70 asm volatile ("" : "+v" (a
));
76 register V1 a
__asm ("xmm16");
77 a
= __builtin_shuffle (*x
, (V4
) { 3, 3, 3, 3 });
78 asm volatile ("" : "+v" (a
));
84 register V2 a
__asm ("xmm16");
86 asm volatile ("" : "+v" (a
));
87 a
= __builtin_shuffle (a
, (V5
) { 0, 0, 0, 0, 0, 0, 0, 0 });
88 asm volatile ("" : "+v" (a
));
94 register V2 a
__asm ("xmm16");
96 asm volatile ("" : "+v" (a
));
97 a
= __builtin_shuffle (a
, (V5
) { 1, 1, 1, 1, 1, 1, 1, 1 });
98 asm volatile ("" : "+v" (a
));
104 register V2 a
__asm ("xmm16");
106 asm volatile ("" : "+v" (a
));
107 a
= __builtin_shuffle (a
, (V5
) { 4, 4, 4, 4, 4, 4, 4, 4 });
108 asm volatile ("" : "+v" (a
));
114 register V2 a
__asm ("xmm16");
116 asm volatile ("" : "+v" (a
));
117 a
= __builtin_shuffle (a
, (V5
) { 5, 5, 5, 5, 5, 5, 5, 5 });
118 asm volatile ("" : "+v" (a
));
124 register V2 a
__asm ("xmm16");
125 a
= __builtin_shuffle (*x
, (V5
) { 0, 0, 0, 0, 0, 0, 0, 0 });
126 asm volatile ("" : "+v" (a
));
132 register V2 a
__asm ("xmm16");
133 a
= __builtin_shuffle (*x
, (V5
) { 1, 1, 1, 1, 1, 1, 1, 1 });
134 asm volatile ("" : "+v" (a
));
140 register V2 a
__asm ("xmm16");
141 a
= __builtin_shuffle (*x
, (V5
) { 4, 4, 4, 4, 4, 4, 4, 4 });
142 asm volatile ("" : "+v" (a
));
148 register V2 a
__asm ("xmm16");
149 a
= __builtin_shuffle (*x
, (V5
) { 5, 5, 5, 5, 5, 5, 5, 5 });
150 asm volatile ("" : "+v" (a
));
153 /* { dg-final { scan-assembler-times "vbroadcastss\[^\n\r]*%\[re\]di\[^\n\r]*%xmm16" 4 } } */
154 /* { dg-final { scan-assembler-times "vbroadcastss\[^\n\r]*%xmm16\[^\n\r]*%ymm16" 3 } } */
155 /* { dg-final { scan-assembler-times "vbroadcastss\[^\n\r]*%\[re\]di\[^\n\r]*%ymm16" 3 } } */
156 /* { dg-final { scan-assembler-times "vpermilps\[^\n\r]*\\\$0\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */
157 /* { dg-final { scan-assembler-times "vpermilps\[^\n\r]*\\\$85\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */
158 /* { dg-final { scan-assembler-times "vpermilps\[^\n\r]*\\\$170\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */
159 /* { dg-final { scan-assembler-times "vpermilps\[^\n\r]*\\\$255\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */
160 /* { dg-final { scan-assembler-times "vpermilps\[^\n\r]*\\\$0\[^\n\r]*%ymm16\[^\n\r]*%ymm16" 1 } } */
161 /* { dg-final { scan-assembler-times "vpermilps\[^\n\r]*\\\$85\[^\n\r]*%ymm16\[^\n\r]*%ymm16" 2 } } */
162 /* { dg-final { scan-assembler-times "vshuff32x4\[^\n\r]*\\\$3\[^\n\r]*%ymm16\[^\n\r]*%ymm16\[^\n\r]*%ymm16" 2 } } */