1 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=ALL --check-prefix=AVX1
2 ; RUN: llc < %s -mcpu=x86-64 -mattr=+avx2 -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=ALL --check-prefix=AVX2
4 target triple = "x86_64-unknown-unknown"
6 define <8 x float> @shuffle_v8f32_00000000(<8 x float> %a, <8 x float> %b) {
7 ; AVX1-LABEL: shuffle_v8f32_00000000:
9 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,0]
10 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
13 ; AVX2-LABEL: shuffle_v8f32_00000000:
15 ; AVX2-NEXT: vbroadcastss %xmm0, %ymm0
17 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
18 ret <8 x float> %shuffle
21 define <8 x float> @shuffle_v8f32_00000010(<8 x float> %a, <8 x float> %b) {
22 ; AVX1-LABEL: shuffle_v8f32_00000010:
24 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
25 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
26 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
29 ; AVX2-LABEL: shuffle_v8f32_00000010:
31 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]
32 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
34 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
35 ret <8 x float> %shuffle
38 define <8 x float> @shuffle_v8f32_00000200(<8 x float> %a, <8 x float> %b) {
39 ; AVX1-LABEL: shuffle_v8f32_00000200:
41 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
42 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,2,0,0]
43 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
46 ; AVX2-LABEL: shuffle_v8f32_00000200:
48 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]
49 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
51 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
52 ret <8 x float> %shuffle
55 define <8 x float> @shuffle_v8f32_00003000(<8 x float> %a, <8 x float> %b) {
56 ; AVX1-LABEL: shuffle_v8f32_00003000:
58 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
59 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,0,0,0]
60 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
63 ; AVX2-LABEL: shuffle_v8f32_00003000:
65 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]
66 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
68 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
69 ret <8 x float> %shuffle
72 define <8 x float> @shuffle_v8f32_00040000(<8 x float> %a, <8 x float> %b) {
73 ; AVX1-LABEL: shuffle_v8f32_00040000:
75 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
76 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[0,0,0,0,4,4,4,4]
77 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,3,4,4,4,7]
78 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]
81 ; AVX2-LABEL: shuffle_v8f32_00040000:
83 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,4,0,0,0,0]
84 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
86 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
87 ret <8 x float> %shuffle
90 define <8 x float> @shuffle_v8f32_00500000(<8 x float> %a, <8 x float> %b) {
91 ; AVX1-LABEL: shuffle_v8f32_00500000:
93 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
94 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[u,u,1,u,4,4,4,4]
95 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]
96 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3],ymm1[4,5,6,7]
99 ; AVX2-LABEL: shuffle_v8f32_00500000:
101 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,5,0,0,0,0,0]
102 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
104 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
105 ret <8 x float> %shuffle
108 define <8 x float> @shuffle_v8f32_06000000(<8 x float> %a, <8 x float> %b) {
109 ; AVX1-LABEL: shuffle_v8f32_06000000:
111 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
112 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[u,2,u,u,4,4,4,4]
113 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,0,0,4,5,4,4]
114 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3],ymm1[4,5,6,7]
117 ; AVX2-LABEL: shuffle_v8f32_06000000:
119 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,6,0,0,0,0,0,0]
120 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
122 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
123 ret <8 x float> %shuffle
126 define <8 x float> @shuffle_v8f32_70000000(<8 x float> %a, <8 x float> %b) {
127 ; AVX1-LABEL: shuffle_v8f32_70000000:
129 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
130 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[3,u,u,u,4,4,4,4]
131 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]
132 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3],ymm1[4,5,6,7]
135 ; AVX2-LABEL: shuffle_v8f32_70000000:
137 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
138 ; AVX2-NEXT: movl $7, %eax
139 ; AVX2-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
140 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
141 ; AVX2-NEXT: vinserti128 $0, %xmm1, %ymm2, %ymm1
142 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
144 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
145 ret <8 x float> %shuffle
148 define <8 x float> @shuffle_v8f32_01014545(<8 x float> %a, <8 x float> %b) {
149 ; ALL-LABEL: shuffle_v8f32_01014545:
151 ; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,2,2]
153 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
154 ret <8 x float> %shuffle
157 define <8 x float> @shuffle_v8f32_00112233(<8 x float> %a, <8 x float> %b) {
158 ; AVX1-LABEL: shuffle_v8f32_00112233:
160 ; AVX1-NEXT: vunpcklps {{.*#+}} xmm1 = xmm0[0,0,1,1]
161 ; AVX1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2,2,3,3]
162 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
165 ; AVX2-LABEL: shuffle_v8f32_00112233:
167 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]
168 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
170 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
171 ret <8 x float> %shuffle
174 define <8 x float> @shuffle_v8f32_00001111(<8 x float> %a, <8 x float> %b) {
175 ; AVX1-LABEL: shuffle_v8f32_00001111:
177 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
178 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
179 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
182 ; AVX2-LABEL: shuffle_v8f32_00001111:
184 ; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]
185 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
187 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
188 ret <8 x float> %shuffle
191 define <8 x float> @shuffle_v8f32_81a3c5e7(<8 x float> %a, <8 x float> %b) {
192 ; ALL-LABEL: shuffle_v8f32_81a3c5e7:
194 ; ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
196 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
197 ret <8 x float> %shuffle
200 define <8 x float> @shuffle_v8f32_08080808(<8 x float> %a, <8 x float> %b) {
201 ; AVX1-LABEL: shuffle_v8f32_08080808:
203 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,0,2,0]
204 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1
205 ; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0,0]
206 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
207 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
210 ; AVX2-LABEL: shuffle_v8f32_08080808:
212 ; AVX2-NEXT: vbroadcastss %xmm1, %ymm1
213 ; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0
214 ; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
216 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>
217 ret <8 x float> %shuffle
220 define <8 x float> @shuffle_v8f32_08084c4c(<8 x float> %a, <8 x float> %b) {
221 ; ALL-LABEL: shuffle_v8f32_08084c4c:
223 ; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
224 ; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
226 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>
227 ret <8 x float> %shuffle
230 define <8 x float> @shuffle_v8f32_8823cc67(<8 x float> %a, <8 x float> %b) {
231 ; ALL-LABEL: shuffle_v8f32_8823cc67:
233 ; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
235 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>
236 ret <8 x float> %shuffle
239 define <8 x float> @shuffle_v8f32_9832dc76(<8 x float> %a, <8 x float> %b) {
240 ; ALL-LABEL: shuffle_v8f32_9832dc76:
242 ; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
244 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>
245 ret <8 x float> %shuffle
248 define <8 x float> @shuffle_v8f32_9810dc54(<8 x float> %a, <8 x float> %b) {
249 ; ALL-LABEL: shuffle_v8f32_9810dc54:
251 ; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
253 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>
254 ret <8 x float> %shuffle
257 define <8 x float> @shuffle_v8f32_08194c5d(<8 x float> %a, <8 x float> %b) {
258 ; ALL-LABEL: shuffle_v8f32_08194c5d:
260 ; ALL-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
262 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
263 ret <8 x float> %shuffle
266 define <8 x float> @shuffle_v8f32_2a3b6e7f(<8 x float> %a, <8 x float> %b) {
267 ; ALL-LABEL: shuffle_v8f32_2a3b6e7f:
269 ; ALL-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
271 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
272 ret <8 x float> %shuffle
275 define <8 x float> @shuffle_v8f32_08192a3b(<8 x float> %a, <8 x float> %b) {
276 ; AVX1-LABEL: shuffle_v8f32_08192a3b:
278 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm1[0,0,2,1]
279 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]
280 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
281 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[0,1,1,3]
282 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,1,3,3]
283 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
284 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
287 ; AVX2-LABEL: shuffle_v8f32_08192a3b:
289 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <u,0,u,1,u,2,u,3>
290 ; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm1
291 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <0,u,1,u,2,u,3,u>
292 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
293 ; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
295 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
296 ret <8 x float> %shuffle
299 define <8 x float> @shuffle_v8f32_08991abb(<8 x float> %a, <8 x float> %b) {
300 ; AVX1-LABEL: shuffle_v8f32_08991abb:
302 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[1,1,2,3]
303 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
304 ; AVX1-NEXT: vunpcklps {{.*#+}} xmm2 = xmm1[0,0,1,1]
305 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,2,3,3]
306 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
307 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
310 ; AVX2-LABEL: shuffle_v8f32_08991abb:
312 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
313 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
314 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <u,0,1,1,u,2,3,3>
315 ; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm1
316 ; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
318 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>
319 ret <8 x float> %shuffle
322 define <8 x float> @shuffle_v8f32_091b2d3f(<8 x float> %a, <8 x float> %b) {
323 ; AVX1-LABEL: shuffle_v8f32_091b2d3f:
325 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[0,1,1,3]
326 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,1,3,3]
327 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
328 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
331 ; AVX2-LABEL: shuffle_v8f32_091b2d3f:
333 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <0,u,1,u,2,u,3,u>
334 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
335 ; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
337 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>
338 ret <8 x float> %shuffle
341 define <8 x float> @shuffle_v8f32_09ab1def(<8 x float> %a, <8 x float> %b) {
342 ; AVX1-LABEL: shuffle_v8f32_09ab1def:
344 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[1,1,2,3]
345 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
346 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
349 ; AVX2-LABEL: shuffle_v8f32_09ab1def:
351 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
352 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
353 ; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
355 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>
356 ret <8 x float> %shuffle
359 define <8 x float> @shuffle_v8f32_00014445(<8 x float> %a, <8 x float> %b) {
360 ; ALL-LABEL: shuffle_v8f32_00014445:
362 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]
364 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>
365 ret <8 x float> %shuffle
368 define <8 x float> @shuffle_v8f32_00204464(<8 x float> %a, <8 x float> %b) {
369 ; ALL-LABEL: shuffle_v8f32_00204464:
371 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]
373 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>
374 ret <8 x float> %shuffle
377 define <8 x float> @shuffle_v8f32_03004744(<8 x float> %a, <8 x float> %b) {
378 ; ALL-LABEL: shuffle_v8f32_03004744:
380 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,7,4,4]
382 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>
383 ret <8 x float> %shuffle
386 define <8 x float> @shuffle_v8f32_10005444(<8 x float> %a, <8 x float> %b) {
387 ; ALL-LABEL: shuffle_v8f32_10005444:
389 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,5,4,4,4]
391 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>
392 ret <8 x float> %shuffle
395 define <8 x float> @shuffle_v8f32_22006644(<8 x float> %a, <8 x float> %b) {
396 ; ALL-LABEL: shuffle_v8f32_22006644:
398 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,6,4,4]
400 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>
401 ret <8 x float> %shuffle
404 define <8 x float> @shuffle_v8f32_33307774(<8 x float> %a, <8 x float> %b) {
405 ; ALL-LABEL: shuffle_v8f32_33307774:
407 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,7,7,4]
409 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>
410 ret <8 x float> %shuffle
413 define <8 x float> @shuffle_v8f32_32107654(<8 x float> %a, <8 x float> %b) {
414 ; ALL-LABEL: shuffle_v8f32_32107654:
416 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
418 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
419 ret <8 x float> %shuffle
422 define <8 x float> @shuffle_v8f32_00234467(<8 x float> %a, <8 x float> %b) {
423 ; ALL-LABEL: shuffle_v8f32_00234467:
425 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,4,4,6,7]
427 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>
428 ret <8 x float> %shuffle
431 define <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {
432 ; ALL-LABEL: shuffle_v8f32_00224466:
434 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]
436 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
437 ret <8 x float> %shuffle
440 define <8 x float> @shuffle_v8f32_10325476(<8 x float> %a, <8 x float> %b) {
441 ; ALL-LABEL: shuffle_v8f32_10325476:
443 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]
445 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
446 ret <8 x float> %shuffle
449 define <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {
450 ; ALL-LABEL: shuffle_v8f32_11335577:
452 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
454 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
455 ret <8 x float> %shuffle
458 define <8 x float> @shuffle_v8f32_10235467(<8 x float> %a, <8 x float> %b) {
459 ; ALL-LABEL: shuffle_v8f32_10235467:
461 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,3,5,4,6,7]
463 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
464 ret <8 x float> %shuffle
467 define <8 x float> @shuffle_v8f32_10225466(<8 x float> %a, <8 x float> %b) {
468 ; ALL-LABEL: shuffle_v8f32_10225466:
470 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,2,5,4,6,6]
472 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>
473 ret <8 x float> %shuffle
476 define <8 x float> @shuffle_v8f32_00015444(<8 x float> %a, <8 x float> %b) {
477 ; ALL-LABEL: shuffle_v8f32_00015444:
479 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,5,4,4,4]
481 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>
482 ret <8 x float> %shuffle
485 define <8 x float> @shuffle_v8f32_00204644(<8 x float> %a, <8 x float> %b) {
486 ; ALL-LABEL: shuffle_v8f32_00204644:
488 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,6,4,4]
490 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>
491 ret <8 x float> %shuffle
494 define <8 x float> @shuffle_v8f32_03004474(<8 x float> %a, <8 x float> %b) {
495 ; ALL-LABEL: shuffle_v8f32_03004474:
497 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,4,7,4]
499 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>
500 ret <8 x float> %shuffle
503 define <8 x float> @shuffle_v8f32_10004444(<8 x float> %a, <8 x float> %b) {
504 ; ALL-LABEL: shuffle_v8f32_10004444:
506 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,4,4,4,4]
508 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
509 ret <8 x float> %shuffle
512 define <8 x float> @shuffle_v8f32_22006446(<8 x float> %a, <8 x float> %b) {
513 ; ALL-LABEL: shuffle_v8f32_22006446:
515 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,4,4,6]
517 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>
518 ret <8 x float> %shuffle
521 define <8 x float> @shuffle_v8f32_33307474(<8 x float> %a, <8 x float> %b) {
522 ; ALL-LABEL: shuffle_v8f32_33307474:
524 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,4,7,4]
526 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>
527 ret <8 x float> %shuffle
530 define <8 x float> @shuffle_v8f32_32104567(<8 x float> %a, <8 x float> %b) {
531 ; ALL-LABEL: shuffle_v8f32_32104567:
533 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7]
535 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>
536 ret <8 x float> %shuffle
539 define <8 x float> @shuffle_v8f32_00236744(<8 x float> %a, <8 x float> %b) {
540 ; ALL-LABEL: shuffle_v8f32_00236744:
542 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,6,7,4,4]
544 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>
545 ret <8 x float> %shuffle
548 define <8 x float> @shuffle_v8f32_00226644(<8 x float> %a, <8 x float> %b) {
549 ; ALL-LABEL: shuffle_v8f32_00226644:
551 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,6,6,4,4]
553 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>
554 ret <8 x float> %shuffle
557 define <8 x float> @shuffle_v8f32_10324567(<8 x float> %a, <8 x float> %b) {
558 ; ALL-LABEL: shuffle_v8f32_10324567:
560 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7]
562 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>
563 ret <8 x float> %shuffle
566 define <8 x float> @shuffle_v8f32_11334567(<8 x float> %a, <8 x float> %b) {
567 ; ALL-LABEL: shuffle_v8f32_11334567:
569 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7]
571 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>
572 ret <8 x float> %shuffle
575 define <8 x float> @shuffle_v8f32_01235467(<8 x float> %a, <8 x float> %b) {
576 ; ALL-LABEL: shuffle_v8f32_01235467:
578 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,7]
580 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
581 ret <8 x float> %shuffle
584 define <8 x float> @shuffle_v8f32_01235466(<8 x float> %a, <8 x float> %b) {
585 ; ALL-LABEL: shuffle_v8f32_01235466:
587 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,6]
589 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>
590 ret <8 x float> %shuffle
593 define <8 x float> @shuffle_v8f32_002u6u44(<8 x float> %a, <8 x float> %b) {
594 ; ALL-LABEL: shuffle_v8f32_002u6u44:
596 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,u,6,u,4,4]
598 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 4, i32 4>
599 ret <8 x float> %shuffle
602 define <8 x float> @shuffle_v8f32_00uu66uu(<8 x float> %a, <8 x float> %b) {
603 ; ALL-LABEL: shuffle_v8f32_00uu66uu:
605 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,u,u,6,6,u,u]
607 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 6, i32 6, i32 undef, i32 undef>
608 ret <8 x float> %shuffle
611 define <8 x float> @shuffle_v8f32_103245uu(<8 x float> %a, <8 x float> %b) {
612 ; ALL-LABEL: shuffle_v8f32_103245uu:
614 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,u,u]
616 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 undef, i32 undef>
617 ret <8 x float> %shuffle
620 define <8 x float> @shuffle_v8f32_1133uu67(<8 x float> %a, <8 x float> %b) {
621 ; ALL-LABEL: shuffle_v8f32_1133uu67:
623 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,u,u,6,7]
625 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 undef, i32 undef, i32 6, i32 7>
626 ret <8 x float> %shuffle
629 define <8 x float> @shuffle_v8f32_0uu354uu(<8 x float> %a, <8 x float> %b) {
630 ; ALL-LABEL: shuffle_v8f32_0uu354uu:
632 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,u,u,3,5,4,u,u]
634 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 undef, i32 undef, i32 3, i32 5, i32 4, i32 undef, i32 undef>
635 ret <8 x float> %shuffle
638 define <8 x float> @shuffle_v8f32_uuu3uu66(<8 x float> %a, <8 x float> %b) {
639 ; ALL-LABEL: shuffle_v8f32_uuu3uu66:
641 ; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[u,u,u,3,u,u,6,6]
643 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 3, i32 undef, i32 undef, i32 6, i32 6>
644 ret <8 x float> %shuffle
647 define <8 x float> @shuffle_v8f32_c348cda0(<8 x float> %a, <8 x float> %b) {
648 ; AVX1-LABEL: shuffle_v8f32_c348cda0:
650 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]
651 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm2[0,0],ymm0[4,7],ymm2[4,4]
652 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]
653 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[0,1,2,0,4,5,6,4]
654 ; AVX1-NEXT: vblendpd {{.*#+}} ymm1 = ymm2[0],ymm1[1,2],ymm2[3]
655 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]
658 ; AVX2-LABEL: shuffle_v8f32_c348cda0:
660 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <u,3,4,u,u,u,u,0>
661 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
662 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <4,u,u,0,4,5,2,u>
663 ; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm1
664 ; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]
666 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 12, i32 3, i32 4, i32 8, i32 12, i32 13, i32 10, i32 0>
667 ret <8 x float> %shuffle
670 define <8 x float> @shuffle_v8f32_f511235a(<8 x float> %a, <8 x float> %b) {
671 ; AVX1-LABEL: shuffle_v8f32_f511235a:
673 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]
674 ; AVX1-NEXT: vpermilpd {{.*#+}} ymm2 = ymm2[0,0,3,2]
675 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,1,1,4,5,5,5]
676 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm2[0],ymm0[1],ymm2[2],ymm0[3]
677 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[2,3,0,1]
678 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[3,1,2,2,7,5,6,6]
679 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]
682 ; AVX2-LABEL: shuffle_v8f32_f511235a:
684 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <7,u,u,u,u,u,u,2>
685 ; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm1
686 ; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = <u,5,1,1,2,3,5,u>
687 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
688 ; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]
690 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 15, i32 5, i32 1, i32 1, i32 2, i32 3, i32 5, i32 10>
691 ret <8 x float> %shuffle
694 define <8 x i32> @shuffle_v8i32_00000000(<8 x i32> %a, <8 x i32> %b) {
695 ; AVX1-LABEL: shuffle_v8i32_00000000:
697 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,0]
698 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
701 ; AVX2-LABEL: shuffle_v8i32_00000000:
703 ; AVX2-NEXT: vbroadcastss %xmm0, %ymm0
705 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
706 ret <8 x i32> %shuffle
709 define <8 x i32> @shuffle_v8i32_00000010(<8 x i32> %a, <8 x i32> %b) {
710 ; AVX1-LABEL: shuffle_v8i32_00000010:
712 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
713 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
714 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
717 ; AVX2-LABEL: shuffle_v8i32_00000010:
719 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]
720 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
722 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
723 ret <8 x i32> %shuffle
726 define <8 x i32> @shuffle_v8i32_00000200(<8 x i32> %a, <8 x i32> %b) {
727 ; AVX1-LABEL: shuffle_v8i32_00000200:
729 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
730 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,2,0,0]
731 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
734 ; AVX2-LABEL: shuffle_v8i32_00000200:
736 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]
737 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
739 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
740 ret <8 x i32> %shuffle
743 define <8 x i32> @shuffle_v8i32_00003000(<8 x i32> %a, <8 x i32> %b) {
744 ; AVX1-LABEL: shuffle_v8i32_00003000:
746 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
747 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,0,0,0]
748 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
751 ; AVX2-LABEL: shuffle_v8i32_00003000:
753 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]
754 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
756 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
757 ret <8 x i32> %shuffle
760 define <8 x i32> @shuffle_v8i32_00040000(<8 x i32> %a, <8 x i32> %b) {
761 ; AVX1-LABEL: shuffle_v8i32_00040000:
763 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
764 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[0,0,0,0,4,4,4,4]
765 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,3,4,4,4,7]
766 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]
769 ; AVX2-LABEL: shuffle_v8i32_00040000:
771 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,0,4,0,0,0,0]
772 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
774 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
775 ret <8 x i32> %shuffle
778 define <8 x i32> @shuffle_v8i32_00500000(<8 x i32> %a, <8 x i32> %b) {
779 ; AVX1-LABEL: shuffle_v8i32_00500000:
781 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
782 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[u,u,1,u,4,4,4,4]
783 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]
784 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3],ymm1[4,5,6,7]
787 ; AVX2-LABEL: shuffle_v8i32_00500000:
789 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,5,0,0,0,0,0]
790 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
792 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
793 ret <8 x i32> %shuffle
796 define <8 x i32> @shuffle_v8i32_06000000(<8 x i32> %a, <8 x i32> %b) {
797 ; AVX1-LABEL: shuffle_v8i32_06000000:
799 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
800 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[u,2,u,u,4,4,4,4]
801 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,0,0,4,5,4,4]
802 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3],ymm1[4,5,6,7]
805 ; AVX2-LABEL: shuffle_v8i32_06000000:
807 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,6,0,0,0,0,0,0]
808 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
810 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
811 ret <8 x i32> %shuffle
814 define <8 x i32> @shuffle_v8i32_70000000(<8 x i32> %a, <8 x i32> %b) {
815 ; AVX1-LABEL: shuffle_v8i32_70000000:
817 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
818 ; AVX1-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[3,u,u,u,4,4,4,4]
819 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]
820 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3],ymm1[4,5,6,7]
823 ; AVX2-LABEL: shuffle_v8i32_70000000:
825 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
826 ; AVX2-NEXT: movl $7, %eax
827 ; AVX2-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
828 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
829 ; AVX2-NEXT: vinserti128 $0, %xmm1, %ymm2, %ymm1
830 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
832 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
833 ret <8 x i32> %shuffle
836 define <8 x i32> @shuffle_v8i32_01014545(<8 x i32> %a, <8 x i32> %b) {
837 ; AVX1-LABEL: shuffle_v8i32_01014545:
839 ; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,2,2]
842 ; AVX2-LABEL: shuffle_v8i32_01014545:
844 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]
846 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>
847 ret <8 x i32> %shuffle
850 define <8 x i32> @shuffle_v8i32_00112233(<8 x i32> %a, <8 x i32> %b) {
851 ; AVX1-LABEL: shuffle_v8i32_00112233:
853 ; AVX1-NEXT: vunpcklps {{.*#+}} xmm1 = xmm0[0,0,1,1]
854 ; AVX1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2,2,3,3]
855 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
858 ; AVX2-LABEL: shuffle_v8i32_00112233:
860 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]
861 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
863 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>
864 ret <8 x i32> %shuffle
867 define <8 x i32> @shuffle_v8i32_00001111(<8 x i32> %a, <8 x i32> %b) {
868 ; AVX1-LABEL: shuffle_v8i32_00001111:
870 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
871 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
872 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
875 ; AVX2-LABEL: shuffle_v8i32_00001111:
877 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]
878 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
880 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
881 ret <8 x i32> %shuffle
884 define <8 x i32> @shuffle_v8i32_81a3c5e7(<8 x i32> %a, <8 x i32> %b) {
885 ; AVX1-LABEL: shuffle_v8i32_81a3c5e7:
887 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
890 ; AVX2-LABEL: shuffle_v8i32_81a3c5e7:
892 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
894 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
895 ret <8 x i32> %shuffle
898 define <8 x i32> @shuffle_v8i32_08080808(<8 x i32> %a, <8 x i32> %b) {
899 ; AVX1-LABEL: shuffle_v8i32_08080808:
901 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,0,2,0]
902 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1
903 ; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0,0]
904 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
905 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
908 ; AVX2-LABEL: shuffle_v8i32_08080808:
910 ; AVX2-NEXT: vpbroadcastd %xmm1, %ymm1
911 ; AVX2-NEXT: vpbroadcastq %xmm0, %ymm0
912 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
914 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>
915 ret <8 x i32> %shuffle
918 define <8 x i32> @shuffle_v8i32_08084c4c(<8 x i32> %a, <8 x i32> %b) {
919 ; AVX1-LABEL: shuffle_v8i32_08084c4c:
921 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
922 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
925 ; AVX2-LABEL: shuffle_v8i32_08084c4c:
927 ; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,0,2,0,4,4,6,4]
928 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]
929 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
931 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>
932 ret <8 x i32> %shuffle
935 define <8 x i32> @shuffle_v8i32_8823cc67(<8 x i32> %a, <8 x i32> %b) {
936 ; AVX1-LABEL: shuffle_v8i32_8823cc67:
938 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
941 ; AVX2-LABEL: shuffle_v8i32_8823cc67:
943 ; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,0,2,3,4,4,6,7]
944 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
946 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>
947 ret <8 x i32> %shuffle
950 define <8 x i32> @shuffle_v8i32_9832dc76(<8 x i32> %a, <8 x i32> %b) {
951 ; AVX1-LABEL: shuffle_v8i32_9832dc76:
953 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
956 ; AVX2-LABEL: shuffle_v8i32_9832dc76:
958 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,1,3,2,4,5,7,6]
959 ; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[1,0,2,3,5,4,6,7]
960 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
962 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>
963 ret <8 x i32> %shuffle
966 define <8 x i32> @shuffle_v8i32_9810dc54(<8 x i32> %a, <8 x i32> %b) {
967 ; AVX1-LABEL: shuffle_v8i32_9810dc54:
969 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
972 ; AVX2-LABEL: shuffle_v8i32_9810dc54:
974 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,1,1,0,4,5,5,4]
975 ; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[1,0,2,3,5,4,6,7]
976 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
978 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>
979 ret <8 x i32> %shuffle
982 define <8 x i32> @shuffle_v8i32_08194c5d(<8 x i32> %a, <8 x i32> %b) {
983 ; AVX1-LABEL: shuffle_v8i32_08194c5d:
985 ; AVX1-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
988 ; AVX2-LABEL: shuffle_v8i32_08194c5d:
990 ; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
992 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
993 ret <8 x i32> %shuffle
996 define <8 x i32> @shuffle_v8i32_2a3b6e7f(<8 x i32> %a, <8 x i32> %b) {
997 ; AVX1-LABEL: shuffle_v8i32_2a3b6e7f:
999 ; AVX1-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
1002 ; AVX2-LABEL: shuffle_v8i32_2a3b6e7f:
1004 ; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
1006 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
1007 ret <8 x i32> %shuffle
1010 define <8 x i32> @shuffle_v8i32_08192a3b(<8 x i32> %a, <8 x i32> %b) {
1011 ; AVX1-LABEL: shuffle_v8i32_08192a3b:
1013 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm1[0,0,2,1]
1014 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]
1015 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
1016 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[0,1,1,3]
1017 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,1,3,3]
1018 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
1019 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
1022 ; AVX2-LABEL: shuffle_v8i32_08192a3b:
1024 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = <u,0,u,1,u,2,u,3>
1025 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
1026 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = <0,u,1,u,2,u,3,u>
1027 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
1028 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
1030 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
1031 ret <8 x i32> %shuffle
1034 define <8 x i32> @shuffle_v8i32_08991abb(<8 x i32> %a, <8 x i32> %b) {
1035 ; AVX1-LABEL: shuffle_v8i32_08991abb:
1037 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[1,1,2,3]
1038 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1039 ; AVX1-NEXT: vunpcklps {{.*#+}} xmm2 = xmm1[0,0,1,1]
1040 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm1[0,2,3,3]
1041 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
1042 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1045 ; AVX2-LABEL: shuffle_v8i32_08991abb:
1047 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
1048 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
1049 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = <u,0,1,1,u,2,3,3>
1050 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
1051 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1053 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>
1054 ret <8 x i32> %shuffle
1057 define <8 x i32> @shuffle_v8i32_091b2d3f(<8 x i32> %a, <8 x i32> %b) {
1058 ; AVX1-LABEL: shuffle_v8i32_091b2d3f:
1060 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[0,1,1,3]
1061 ; AVX1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,1,3,3]
1062 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
1063 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
1066 ; AVX2-LABEL: shuffle_v8i32_091b2d3f:
1068 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = <0,u,1,u,2,u,3,u>
1069 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
1070 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
1072 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>
1073 ret <8 x i32> %shuffle
1076 define <8 x i32> @shuffle_v8i32_09ab1def(<8 x i32> %a, <8 x i32> %b) {
1077 ; AVX1-LABEL: shuffle_v8i32_09ab1def:
1079 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[1,1,2,3]
1080 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1081 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1084 ; AVX2-LABEL: shuffle_v8i32_09ab1def:
1086 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
1087 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
1088 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1090 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>
1091 ret <8 x i32> %shuffle
1094 define <8 x i32> @shuffle_v8i32_00014445(<8 x i32> %a, <8 x i32> %b) {
1095 ; AVX1-LABEL: shuffle_v8i32_00014445:
1097 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]
1100 ; AVX2-LABEL: shuffle_v8i32_00014445:
1102 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]
1104 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>
1105 ret <8 x i32> %shuffle
1108 define <8 x i32> @shuffle_v8i32_00204464(<8 x i32> %a, <8 x i32> %b) {
1109 ; AVX1-LABEL: shuffle_v8i32_00204464:
1111 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]
1114 ; AVX2-LABEL: shuffle_v8i32_00204464:
1116 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]
1118 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>
1119 ret <8 x i32> %shuffle
1122 define <8 x i32> @shuffle_v8i32_03004744(<8 x i32> %a, <8 x i32> %b) {
1123 ; AVX1-LABEL: shuffle_v8i32_03004744:
1125 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,7,4,4]
1128 ; AVX2-LABEL: shuffle_v8i32_03004744:
1130 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,3,0,0,4,7,4,4]
1132 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>
1133 ret <8 x i32> %shuffle
1136 define <8 x i32> @shuffle_v8i32_10005444(<8 x i32> %a, <8 x i32> %b) {
1137 ; AVX1-LABEL: shuffle_v8i32_10005444:
1139 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,5,4,4,4]
1142 ; AVX2-LABEL: shuffle_v8i32_10005444:
1144 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[1,0,0,0,5,4,4,4]
1146 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>
1147 ret <8 x i32> %shuffle
1150 define <8 x i32> @shuffle_v8i32_22006644(<8 x i32> %a, <8 x i32> %b) {
1151 ; AVX1-LABEL: shuffle_v8i32_22006644:
1153 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,6,4,4]
1156 ; AVX2-LABEL: shuffle_v8i32_22006644:
1158 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,2,0,0,6,6,4,4]
1160 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>
1161 ret <8 x i32> %shuffle
1164 define <8 x i32> @shuffle_v8i32_33307774(<8 x i32> %a, <8 x i32> %b) {
1165 ; AVX1-LABEL: shuffle_v8i32_33307774:
1167 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,7,7,4]
1170 ; AVX2-LABEL: shuffle_v8i32_33307774:
1172 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[3,3,3,0,7,7,7,4]
1174 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>
1175 ret <8 x i32> %shuffle
1178 define <8 x i32> @shuffle_v8i32_32107654(<8 x i32> %a, <8 x i32> %b) {
1179 ; AVX1-LABEL: shuffle_v8i32_32107654:
1181 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1184 ; AVX2-LABEL: shuffle_v8i32_32107654:
1186 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1188 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
1189 ret <8 x i32> %shuffle
1192 define <8 x i32> @shuffle_v8i32_00234467(<8 x i32> %a, <8 x i32> %b) {
1193 ; AVX1-LABEL: shuffle_v8i32_00234467:
1195 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,4,4,6,7]
1198 ; AVX2-LABEL: shuffle_v8i32_00234467:
1200 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,0,2,3,4,4,6,7]
1202 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>
1203 ret <8 x i32> %shuffle
1206 define <8 x i32> @shuffle_v8i32_00224466(<8 x i32> %a, <8 x i32> %b) {
1207 ; AVX1-LABEL: shuffle_v8i32_00224466:
1209 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]
1212 ; AVX2-LABEL: shuffle_v8i32_00224466:
1214 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]
1216 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
1217 ret <8 x i32> %shuffle
1220 define <8 x i32> @shuffle_v8i32_10325476(<8 x i32> %a, <8 x i32> %b) {
1221 ; AVX1-LABEL: shuffle_v8i32_10325476:
1223 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]
1226 ; AVX2-LABEL: shuffle_v8i32_10325476:
1228 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]
1230 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
1231 ret <8 x i32> %shuffle
1234 define <8 x i32> @shuffle_v8i32_11335577(<8 x i32> %a, <8 x i32> %b) {
1235 ; AVX1-LABEL: shuffle_v8i32_11335577:
1237 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
1240 ; AVX2-LABEL: shuffle_v8i32_11335577:
1242 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
1244 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
1245 ret <8 x i32> %shuffle
1248 define <8 x i32> @shuffle_v8i32_10235467(<8 x i32> %a, <8 x i32> %b) {
1249 ; AVX1-LABEL: shuffle_v8i32_10235467:
1251 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,3,5,4,6,7]
1254 ; AVX2-LABEL: shuffle_v8i32_10235467:
1256 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[1,0,2,3,5,4,6,7]
1258 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
1259 ret <8 x i32> %shuffle
1262 define <8 x i32> @shuffle_v8i32_10225466(<8 x i32> %a, <8 x i32> %b) {
1263 ; AVX1-LABEL: shuffle_v8i32_10225466:
1265 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,2,5,4,6,6]
1268 ; AVX2-LABEL: shuffle_v8i32_10225466:
1270 ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[1,0,2,2,5,4,6,6]
1272 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>
1273 ret <8 x i32> %shuffle
1276 define <8 x i32> @shuffle_v8i32_00015444(<8 x i32> %a, <8 x i32> %b) {
1277 ; AVX1-LABEL: shuffle_v8i32_00015444:
1279 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,5,4,4,4]
1282 ; AVX2-LABEL: shuffle_v8i32_00015444:
1284 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,0,1,5,4,4,4]
1285 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1287 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>
1288 ret <8 x i32> %shuffle
1291 define <8 x i32> @shuffle_v8i32_00204644(<8 x i32> %a, <8 x i32> %b) {
1292 ; AVX1-LABEL: shuffle_v8i32_00204644:
1294 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,6,4,4]
1297 ; AVX2-LABEL: shuffle_v8i32_00204644:
1299 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,2,0,4,6,4,4]
1300 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1302 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>
1303 ret <8 x i32> %shuffle
1306 define <8 x i32> @shuffle_v8i32_03004474(<8 x i32> %a, <8 x i32> %b) {
1307 ; AVX1-LABEL: shuffle_v8i32_03004474:
1309 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,4,7,4]
1312 ; AVX2-LABEL: shuffle_v8i32_03004474:
1314 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,3,0,0,4,4,7,4]
1315 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1317 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>
1318 ret <8 x i32> %shuffle
1321 define <8 x i32> @shuffle_v8i32_10004444(<8 x i32> %a, <8 x i32> %b) {
1322 ; AVX1-LABEL: shuffle_v8i32_10004444:
1324 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,4,4,4,4]
1327 ; AVX2-LABEL: shuffle_v8i32_10004444:
1329 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [1,0,0,0,4,4,4,4]
1330 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1332 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
1333 ret <8 x i32> %shuffle
1336 define <8 x i32> @shuffle_v8i32_22006446(<8 x i32> %a, <8 x i32> %b) {
1337 ; AVX1-LABEL: shuffle_v8i32_22006446:
1339 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,4,4,6]
1342 ; AVX2-LABEL: shuffle_v8i32_22006446:
1344 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [2,2,0,0,6,4,4,6]
1345 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1347 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>
1348 ret <8 x i32> %shuffle
1351 define <8 x i32> @shuffle_v8i32_33307474(<8 x i32> %a, <8 x i32> %b) {
1352 ; AVX1-LABEL: shuffle_v8i32_33307474:
1354 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,4,7,4]
1357 ; AVX2-LABEL: shuffle_v8i32_33307474:
1359 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [3,3,3,0,7,4,7,4]
1360 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1362 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>
1363 ret <8 x i32> %shuffle
1366 define <8 x i32> @shuffle_v8i32_32104567(<8 x i32> %a, <8 x i32> %b) {
1367 ; AVX1-LABEL: shuffle_v8i32_32104567:
1369 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7]
1372 ; AVX2-LABEL: shuffle_v8i32_32104567:
1374 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [3,2,1,0,4,5,6,7]
1375 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1377 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>
1378 ret <8 x i32> %shuffle
1381 define <8 x i32> @shuffle_v8i32_00236744(<8 x i32> %a, <8 x i32> %b) {
1382 ; AVX1-LABEL: shuffle_v8i32_00236744:
1384 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,6,7,4,4]
1387 ; AVX2-LABEL: shuffle_v8i32_00236744:
1389 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,2,3,6,7,4,4]
1390 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1392 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>
1393 ret <8 x i32> %shuffle
1396 define <8 x i32> @shuffle_v8i32_00226644(<8 x i32> %a, <8 x i32> %b) {
1397 ; AVX1-LABEL: shuffle_v8i32_00226644:
1399 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,6,6,4,4]
1402 ; AVX2-LABEL: shuffle_v8i32_00226644:
1404 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,0,2,2,6,6,4,4]
1405 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1407 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>
1408 ret <8 x i32> %shuffle
1411 define <8 x i32> @shuffle_v8i32_10324567(<8 x i32> %a, <8 x i32> %b) {
1412 ; AVX1-LABEL: shuffle_v8i32_10324567:
1414 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7]
1417 ; AVX2-LABEL: shuffle_v8i32_10324567:
1419 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [1,0,3,2,4,5,6,7]
1420 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1422 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>
1423 ret <8 x i32> %shuffle
1426 define <8 x i32> @shuffle_v8i32_11334567(<8 x i32> %a, <8 x i32> %b) {
1427 ; AVX1-LABEL: shuffle_v8i32_11334567:
1429 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7]
1432 ; AVX2-LABEL: shuffle_v8i32_11334567:
1434 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [1,1,3,3,4,5,6,7]
1435 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1437 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>
1438 ret <8 x i32> %shuffle
1441 define <8 x i32> @shuffle_v8i32_01235467(<8 x i32> %a, <8 x i32> %b) {
1442 ; AVX1-LABEL: shuffle_v8i32_01235467:
1444 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,7]
1447 ; AVX2-LABEL: shuffle_v8i32_01235467:
1449 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3,5,4,6,7]
1450 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1452 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>
1453 ret <8 x i32> %shuffle
1456 define <8 x i32> @shuffle_v8i32_01235466(<8 x i32> %a, <8 x i32> %b) {
1457 ; AVX1-LABEL: shuffle_v8i32_01235466:
1459 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,6]
1462 ; AVX2-LABEL: shuffle_v8i32_01235466:
1464 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3,5,4,6,6]
1465 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1467 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>
1468 ret <8 x i32> %shuffle
1471 define <8 x i32> @shuffle_v8i32_002u6u44(<8 x i32> %a, <8 x i32> %b) {
1472 ; AVX1-LABEL: shuffle_v8i32_002u6u44:
1474 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,u,6,u,4,4]
1477 ; AVX2-LABEL: shuffle_v8i32_002u6u44:
1479 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = <0,0,2,u,6,u,4,4>
1480 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1482 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 undef, i32 6, i32 undef, i32 4, i32 4>
1483 ret <8 x i32> %shuffle
1486 define <8 x i32> @shuffle_v8i32_00uu66uu(<8 x i32> %a, <8 x i32> %b) {
1487 ; AVX1-LABEL: shuffle_v8i32_00uu66uu:
1489 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,u,u,6,6,u,u]
1492 ; AVX2-LABEL: shuffle_v8i32_00uu66uu:
1494 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = <0,0,u,u,6,6,u,u>
1495 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1497 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 undef, i32 undef, i32 6, i32 6, i32 undef, i32 undef>
1498 ret <8 x i32> %shuffle
1501 define <8 x i32> @shuffle_v8i32_103245uu(<8 x i32> %a, <8 x i32> %b) {
1502 ; AVX1-LABEL: shuffle_v8i32_103245uu:
1504 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,u,u]
1507 ; AVX2-LABEL: shuffle_v8i32_103245uu:
1509 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = <1,0,3,2,4,5,u,u>
1510 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1512 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 undef, i32 undef>
1513 ret <8 x i32> %shuffle
1516 define <8 x i32> @shuffle_v8i32_1133uu67(<8 x i32> %a, <8 x i32> %b) {
1517 ; AVX1-LABEL: shuffle_v8i32_1133uu67:
1519 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,u,u,6,7]
1522 ; AVX2-LABEL: shuffle_v8i32_1133uu67:
1524 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = <1,1,3,3,u,u,6,7>
1525 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1527 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 undef, i32 undef, i32 6, i32 7>
1528 ret <8 x i32> %shuffle
1531 define <8 x i32> @shuffle_v8i32_0uu354uu(<8 x i32> %a, <8 x i32> %b) {
1532 ; AVX1-LABEL: shuffle_v8i32_0uu354uu:
1534 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,u,u,3,5,4,u,u]
1537 ; AVX2-LABEL: shuffle_v8i32_0uu354uu:
1539 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = <0,u,u,3,5,4,u,u>
1540 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1542 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 undef, i32 undef, i32 3, i32 5, i32 4, i32 undef, i32 undef>
1543 ret <8 x i32> %shuffle
1546 define <8 x i32> @shuffle_v8i32_uuu3uu66(<8 x i32> %a, <8 x i32> %b) {
1547 ; AVX1-LABEL: shuffle_v8i32_uuu3uu66:
1549 ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[u,u,u,3,u,u,6,6]
1552 ; AVX2-LABEL: shuffle_v8i32_uuu3uu66:
1554 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = <u,u,u,3,u,u,6,6>
1555 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1557 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 3, i32 undef, i32 undef, i32 6, i32 6>
1558 ret <8 x i32> %shuffle
1561 define <8 x i32> @shuffle_v8i32_6caa87e5(<8 x i32> %a, <8 x i32> %b) {
1562 ; AVX1-LABEL: shuffle_v8i32_6caa87e5:
1564 ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]
1565 ; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm2[0,0],ymm1[2,2],ymm2[4,4],ymm1[6,6]
1566 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
1567 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
1568 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
1569 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]
1572 ; AVX2-LABEL: shuffle_v8i32_6caa87e5:
1574 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = <u,4,2,2,0,u,6,u>
1575 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
1576 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,1,3,2]
1577 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]
1579 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 6, i32 12, i32 10, i32 10, i32 8, i32 7, i32 14, i32 5>
1580 ret <8 x i32> %shuffle