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 ; ALL-LABEL: @shuffle_v8f32_00000000
9 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
10 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
12 %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>
13 ret <8 x float> %shuffle
16 define <8 x float> @shuffle_v8f32_00000010(<8 x float> %a, <8 x float> %b) {
17 ; ALL-LABEL: @shuffle_v8f32_00000010
19 ; ALL-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
20 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,1,0]
21 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
23 %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>
24 ret <8 x float> %shuffle
27 define <8 x float> @shuffle_v8f32_00000200(<8 x float> %a, <8 x float> %b) {
28 ; ALL-LABEL: @shuffle_v8f32_00000200
30 ; ALL-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
31 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,2,0,0]
32 ; ALL-NEXT: vinsertf128 $1, %xmm0, %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 2, i32 0, i32 0>
35 ret <8 x float> %shuffle
38 define <8 x float> @shuffle_v8f32_00003000(<8 x float> %a, <8 x float> %b) {
39 ; ALL-LABEL: @shuffle_v8f32_00003000
41 ; ALL-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
42 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[3,0,0,0]
43 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
45 %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>
46 ret <8 x float> %shuffle
49 define <8 x float> @shuffle_v8f32_00040000(<8 x float> %a, <8 x float> %b) {
50 ; ALL-LABEL: @shuffle_v8f32_00040000
52 ; ALL-NEXT: vextractf128 $1, %ymm0, %xmm1
53 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm1[0,0],xmm0[0,0]
54 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm0[0,0],xmm1[2,0]
55 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
56 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
58 %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>
59 ret <8 x float> %shuffle
62 define <8 x float> @shuffle_v8f32_00500000(<8 x float> %a, <8 x float> %b) {
63 ; ALL-LABEL: @shuffle_v8f32_00500000
65 ; ALL-NEXT: vextractf128 $1, %ymm0, %xmm1
66 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm1[1,0],xmm0[0,0]
67 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm0[0,0],xmm1[0,2]
68 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
69 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
71 %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>
72 ret <8 x float> %shuffle
75 define <8 x float> @shuffle_v8f32_06000000(<8 x float> %a, <8 x float> %b) {
76 ; ALL-LABEL: @shuffle_v8f32_06000000
78 ; ALL-NEXT: vextractf128 $1, %ymm0, %xmm1
79 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm1[2,0],xmm0[0,0]
80 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm1[2,0],xmm0[0,0]
81 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
82 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
84 %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>
85 ret <8 x float> %shuffle
88 define <8 x float> @shuffle_v8f32_70000000(<8 x float> %a, <8 x float> %b) {
89 ; ALL-LABEL: @shuffle_v8f32_70000000
91 ; ALL-NEXT: vextractf128 $1, %ymm0, %xmm1
92 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm1[3,0],xmm0[0,0]
93 ; ALL-NEXT: vshufps {{.*}} # xmm1 = xmm1[0,2],xmm0[0,0]
94 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
95 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
97 %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>
98 ret <8 x float> %shuffle
101 define <8 x float> @shuffle_v8f32_01014545(<8 x float> %a, <8 x float> %b) {
102 ; ALL-LABEL: @shuffle_v8f32_01014545
104 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
106 %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>
107 ret <8 x float> %shuffle
110 define <8 x float> @shuffle_v8f32_00112233(<8 x float> %a, <8 x float> %b) {
111 ; ALL-LABEL: @shuffle_v8f32_00112233
113 ; ALL-NEXT: vunpcklps {{.*}} # xmm1 = xmm0[0,0,1,1]
114 ; ALL-NEXT: vunpckhps {{.*}} # xmm0 = xmm0[2,2,3,3]
115 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
117 %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>
118 ret <8 x float> %shuffle
121 define <8 x float> @shuffle_v8f32_00001111(<8 x float> %a, <8 x float> %b) {
122 ; ALL-LABEL: @shuffle_v8f32_00001111
124 ; ALL-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
125 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[1,1,1,1]
126 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
128 %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>
129 ret <8 x float> %shuffle
132 define <8 x float> @shuffle_v8f32_81a3c5e7(<8 x float> %a, <8 x float> %b) {
133 ; ALL-LABEL: @shuffle_v8f32_81a3c5e7
135 ; ALL-NEXT: vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
137 %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>
138 ret <8 x float> %shuffle
141 define <8 x float> @shuffle_v8f32_08080808(<8 x float> %a, <8 x float> %b) {
142 ; ALL-LABEL: @shuffle_v8f32_08080808
144 ; ALL-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,0,2,0]
145 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,0,3]
146 ; ALL-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
147 ; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
149 %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>
150 ret <8 x float> %shuffle
153 define <8 x float> @shuffle_v8f32_08084c4c(<8 x float> %a, <8 x float> %b) {
154 ; ALL-LABEL: @shuffle_v8f32_08084c4c
156 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
157 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,2,1,3,4,6,5,7]
159 %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>
160 ret <8 x float> %shuffle
163 define <8 x float> @shuffle_v8f32_8823cc67(<8 x float> %a, <8 x float> %b) {
164 ; ALL-LABEL: @shuffle_v8f32_8823cc67
166 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
168 %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>
169 ret <8 x float> %shuffle
172 define <8 x float> @shuffle_v8f32_9832dc76(<8 x float> %a, <8 x float> %b) {
173 ; ALL-LABEL: @shuffle_v8f32_9832dc76
175 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
177 %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>
178 ret <8 x float> %shuffle
181 define <8 x float> @shuffle_v8f32_9810dc54(<8 x float> %a, <8 x float> %b) {
182 ; ALL-LABEL: @shuffle_v8f32_9810dc54
184 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
186 %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>
187 ret <8 x float> %shuffle
190 define <8 x float> @shuffle_v8f32_08194c5d(<8 x float> %a, <8 x float> %b) {
191 ; ALL-LABEL: @shuffle_v8f32_08194c5d
193 ; ALL-NEXT: vunpcklps {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
195 %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>
196 ret <8 x float> %shuffle
199 define <8 x float> @shuffle_v8f32_2a3b6e7f(<8 x float> %a, <8 x float> %b) {
200 ; ALL-LABEL: @shuffle_v8f32_2a3b6e7f
202 ; ALL-NEXT: vunpckhps {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
204 %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>
205 ret <8 x float> %shuffle
208 define <8 x float> @shuffle_v8f32_08192a3b(<8 x float> %a, <8 x float> %b) {
209 ; ALL-LABEL: @shuffle_v8f32_08192a3b
211 ; ALL-NEXT: vpermilps {{.*}} # xmm2 = xmm1[0,2,2,3]
212 ; ALL-NEXT: vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
213 ; ALL-NEXT: vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
214 ; ALL-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,0,2,1]
215 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
216 ; ALL-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
217 ; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
219 %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>
220 ret <8 x float> %shuffle
223 define <8 x float> @shuffle_v8f32_08991abb(<8 x float> %a, <8 x float> %b) {
224 ; ALL-LABEL: @shuffle_v8f32_08991abb
226 ; ALL-NEXT: vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
227 ; ALL-NEXT: vpermilps {{.*}} # xmm3 = xmm1[0,2,3,3]
228 ; ALL-NEXT: vblendps {{.*}} # xmm2 = xmm2[0],xmm3[1,2,3]
229 ; ALL-NEXT: vunpcklps {{.*}} # xmm1 = xmm1[0,0,1,1]
230 ; ALL-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
231 ; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
233 %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>
234 ret <8 x float> %shuffle
237 define <8 x float> @shuffle_v8f32_091b2d3f(<8 x float> %a, <8 x float> %b) {
238 ; ALL-LABEL: @shuffle_v8f32_091b2d3f
240 ; ALL-NEXT: vextractf128 $1, %ymm1, %xmm2
241 ; ALL-NEXT: vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
242 ; ALL-NEXT: vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
243 ; ALL-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
244 ; ALL-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
245 ; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
247 %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>
248 ret <8 x float> %shuffle
251 define <8 x float> @shuffle_v8f32_09ab1def(<8 x float> %a, <8 x float> %b) {
252 ; ALL-LABEL: @shuffle_v8f32_09ab1def
254 ; ALL-NEXT: vextractf128 $1, %ymm1, %xmm2
255 ; ALL-NEXT: vpermilps {{.*}} # xmm3 = xmm0[1,1,2,3]
256 ; ALL-NEXT: vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1,2,3]
257 ; ALL-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
258 ; ALL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
260 %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>
261 ret <8 x float> %shuffle
264 define <8 x float> @shuffle_v8f32_00014445(<8 x float> %a, <8 x float> %b) {
265 ; ALL-LABEL: @shuffle_v8f32_00014445
267 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
269 %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>
270 ret <8 x float> %shuffle
273 define <8 x float> @shuffle_v8f32_00204464(<8 x float> %a, <8 x float> %b) {
274 ; ALL-LABEL: @shuffle_v8f32_00204464
276 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
278 %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>
279 ret <8 x float> %shuffle
282 define <8 x float> @shuffle_v8f32_03004744(<8 x float> %a, <8 x float> %b) {
283 ; ALL-LABEL: @shuffle_v8f32_03004744
285 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
287 %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>
288 ret <8 x float> %shuffle
291 define <8 x float> @shuffle_v8f32_10005444(<8 x float> %a, <8 x float> %b) {
292 ; ALL-LABEL: @shuffle_v8f32_10005444
294 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
296 %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>
297 ret <8 x float> %shuffle
300 define <8 x float> @shuffle_v8f32_22006644(<8 x float> %a, <8 x float> %b) {
301 ; ALL-LABEL: @shuffle_v8f32_22006644
303 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
305 %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>
306 ret <8 x float> %shuffle
309 define <8 x float> @shuffle_v8f32_33307774(<8 x float> %a, <8 x float> %b) {
310 ; ALL-LABEL: @shuffle_v8f32_33307774
312 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
314 %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>
315 ret <8 x float> %shuffle
318 define <8 x float> @shuffle_v8f32_32107654(<8 x float> %a, <8 x float> %b) {
319 ; ALL-LABEL: @shuffle_v8f32_32107654
321 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
323 %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>
324 ret <8 x float> %shuffle
327 define <8 x float> @shuffle_v8f32_00234467(<8 x float> %a, <8 x float> %b) {
328 ; ALL-LABEL: @shuffle_v8f32_00234467
330 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
332 %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>
333 ret <8 x float> %shuffle
336 define <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {
337 ; ALL-LABEL: @shuffle_v8f32_00224466
339 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
341 %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>
342 ret <8 x float> %shuffle
345 define <8 x float> @shuffle_v8f32_10325476(<8 x float> %a, <8 x float> %b) {
346 ; ALL-LABEL: @shuffle_v8f32_10325476
348 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
350 %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>
351 ret <8 x float> %shuffle
354 define <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {
355 ; ALL-LABEL: @shuffle_v8f32_11335577
357 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
359 %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>
360 ret <8 x float> %shuffle
363 define <8 x float> @shuffle_v8f32_10235467(<8 x float> %a, <8 x float> %b) {
364 ; ALL-LABEL: @shuffle_v8f32_10235467
366 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
368 %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>
369 ret <8 x float> %shuffle
372 define <8 x float> @shuffle_v8f32_10225466(<8 x float> %a, <8 x float> %b) {
373 ; ALL-LABEL: @shuffle_v8f32_10225466
375 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
377 %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>
378 ret <8 x float> %shuffle
381 define <8 x float> @shuffle_v8f32_00015444(<8 x float> %a, <8 x float> %b) {
382 ; ALL-LABEL: @shuffle_v8f32_00015444
384 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,5,4,4,4]
386 %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>
387 ret <8 x float> %shuffle
390 define <8 x float> @shuffle_v8f32_00204644(<8 x float> %a, <8 x float> %b) {
391 ; ALL-LABEL: @shuffle_v8f32_00204644
393 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,6,4,4]
395 %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>
396 ret <8 x float> %shuffle
399 define <8 x float> @shuffle_v8f32_03004474(<8 x float> %a, <8 x float> %b) {
400 ; ALL-LABEL: @shuffle_v8f32_03004474
402 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,4,7,4]
404 %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>
405 ret <8 x float> %shuffle
408 define <8 x float> @shuffle_v8f32_10004444(<8 x float> %a, <8 x float> %b) {
409 ; ALL-LABEL: @shuffle_v8f32_10004444
411 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,4,4,4,4]
413 %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>
414 ret <8 x float> %shuffle
417 define <8 x float> @shuffle_v8f32_22006446(<8 x float> %a, <8 x float> %b) {
418 ; ALL-LABEL: @shuffle_v8f32_22006446
420 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,4,4,6]
422 %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>
423 ret <8 x float> %shuffle
426 define <8 x float> @shuffle_v8f32_33307474(<8 x float> %a, <8 x float> %b) {
427 ; ALL-LABEL: @shuffle_v8f32_33307474
429 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,4,7,4]
431 %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>
432 ret <8 x float> %shuffle
435 define <8 x float> @shuffle_v8f32_32104567(<8 x float> %a, <8 x float> %b) {
436 ; ALL-LABEL: @shuffle_v8f32_32104567
438 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,4,5,6,7]
440 %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>
441 ret <8 x float> %shuffle
444 define <8 x float> @shuffle_v8f32_00236744(<8 x float> %a, <8 x float> %b) {
445 ; ALL-LABEL: @shuffle_v8f32_00236744
447 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,6,7,4,4]
449 %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>
450 ret <8 x float> %shuffle
453 define <8 x float> @shuffle_v8f32_00226644(<8 x float> %a, <8 x float> %b) {
454 ; ALL-LABEL: @shuffle_v8f32_00226644
456 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,6,6,4,4]
458 %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>
459 ret <8 x float> %shuffle
462 define <8 x float> @shuffle_v8f32_10324567(<8 x float> %a, <8 x float> %b) {
463 ; ALL-LABEL: @shuffle_v8f32_10324567
465 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,6,7]
467 %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>
468 ret <8 x float> %shuffle
471 define <8 x float> @shuffle_v8f32_11334567(<8 x float> %a, <8 x float> %b) {
472 ; ALL-LABEL: @shuffle_v8f32_11334567
474 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,4,5,6,7]
476 %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>
477 ret <8 x float> %shuffle
480 define <8 x float> @shuffle_v8f32_01235467(<8 x float> %a, <8 x float> %b) {
481 ; ALL-LABEL: @shuffle_v8f32_01235467
483 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,7]
485 %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>
486 ret <8 x float> %shuffle
489 define <8 x float> @shuffle_v8f32_01235466(<8 x float> %a, <8 x float> %b) {
490 ; ALL-LABEL: @shuffle_v8f32_01235466
492 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,6]
494 %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>
495 ret <8 x float> %shuffle
498 define <8 x float> @shuffle_v8f32_002u6u44(<8 x float> %a, <8 x float> %b) {
499 ; ALL-LABEL: @shuffle_v8f32_002u6u44
501 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,u,6,u,4,4]
503 %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>
504 ret <8 x float> %shuffle
507 define <8 x float> @shuffle_v8f32_00uu66uu(<8 x float> %a, <8 x float> %b) {
508 ; ALL-LABEL: @shuffle_v8f32_00uu66uu
510 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,u,u,6,6,u,u]
512 %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>
513 ret <8 x float> %shuffle
516 define <8 x float> @shuffle_v8f32_103245uu(<8 x float> %a, <8 x float> %b) {
517 ; ALL-LABEL: @shuffle_v8f32_103245uu
519 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,u,u]
521 %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>
522 ret <8 x float> %shuffle
525 define <8 x float> @shuffle_v8f32_1133uu67(<8 x float> %a, <8 x float> %b) {
526 ; ALL-LABEL: @shuffle_v8f32_1133uu67
528 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,u,u,6,7]
530 %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>
531 ret <8 x float> %shuffle
534 define <8 x float> @shuffle_v8f32_0uu354uu(<8 x float> %a, <8 x float> %b) {
535 ; ALL-LABEL: @shuffle_v8f32_0uu354uu
537 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,u,u,3,5,4,u,u]
539 %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>
540 ret <8 x float> %shuffle
543 define <8 x float> @shuffle_v8f32_uuu3uu66(<8 x float> %a, <8 x float> %b) {
544 ; ALL-LABEL: @shuffle_v8f32_uuu3uu66
546 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[u,u,u,3,u,u,6,6]
548 %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>
549 ret <8 x float> %shuffle
552 define <8 x i32> @shuffle_v8i32_00000000(<8 x i32> %a, <8 x i32> %b) {
553 ; AVX1-LABEL: @shuffle_v8i32_00000000
555 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
556 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
559 ; AVX2-LABEL: @shuffle_v8i32_00000000
561 ; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1
562 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
564 %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>
565 ret <8 x i32> %shuffle
568 define <8 x i32> @shuffle_v8i32_00000010(<8 x i32> %a, <8 x i32> %b) {
569 ; AVX1-LABEL: @shuffle_v8i32_00000010
571 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
572 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,1,0]
573 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
576 ; AVX2-LABEL: @shuffle_v8i32_00000010
578 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,0,0,1,0]
579 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
581 %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>
582 ret <8 x i32> %shuffle
585 define <8 x i32> @shuffle_v8i32_00000200(<8 x i32> %a, <8 x i32> %b) {
586 ; AVX1-LABEL: @shuffle_v8i32_00000200
588 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
589 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,2,0,0]
590 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
593 ; AVX2-LABEL: @shuffle_v8i32_00000200
595 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,0,2,0,0]
596 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
598 %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>
599 ret <8 x i32> %shuffle
602 define <8 x i32> @shuffle_v8i32_00003000(<8 x i32> %a, <8 x i32> %b) {
603 ; AVX1-LABEL: @shuffle_v8i32_00003000
605 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
606 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[3,0,0,0]
607 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
610 ; AVX2-LABEL: @shuffle_v8i32_00003000
612 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,3,0,0,0]
613 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
615 %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>
616 ret <8 x i32> %shuffle
619 define <8 x i32> @shuffle_v8i32_00040000(<8 x i32> %a, <8 x i32> %b) {
620 ; AVX1-LABEL: @shuffle_v8i32_00040000
622 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
623 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm1[0,0],xmm0[0,0]
624 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm0[0,0],xmm1[2,0]
625 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
626 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
629 ; AVX2-LABEL: @shuffle_v8i32_00040000
631 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,4,0,0,0,0]
632 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
634 %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>
635 ret <8 x i32> %shuffle
638 define <8 x i32> @shuffle_v8i32_00500000(<8 x i32> %a, <8 x i32> %b) {
639 ; AVX1-LABEL: @shuffle_v8i32_00500000
641 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
642 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm1[1,0],xmm0[0,0]
643 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm0[0,0],xmm1[0,2]
644 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
645 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
648 ; AVX2-LABEL: @shuffle_v8i32_00500000
650 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,5,0,0,0,0,0]
651 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
653 %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>
654 ret <8 x i32> %shuffle
657 define <8 x i32> @shuffle_v8i32_06000000(<8 x i32> %a, <8 x i32> %b) {
658 ; AVX1-LABEL: @shuffle_v8i32_06000000
660 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
661 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm1[2,0],xmm0[0,0]
662 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm1[2,0],xmm0[0,0]
663 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
664 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
667 ; AVX2-LABEL: @shuffle_v8i32_06000000
669 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,6,0,0,0,0,0,0]
670 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
672 %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>
673 ret <8 x i32> %shuffle
676 define <8 x i32> @shuffle_v8i32_70000000(<8 x i32> %a, <8 x i32> %b) {
677 ; AVX1-LABEL: @shuffle_v8i32_70000000
679 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
680 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm1[3,0],xmm0[0,0]
681 ; AVX1-NEXT: vshufps {{.*}} # xmm1 = xmm1[0,2],xmm0[0,0]
682 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
683 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
686 ; AVX2-LABEL: @shuffle_v8i32_70000000
688 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
689 ; AVX2-NEXT: movl $7, %eax
690 ; AVX2-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
691 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
692 ; AVX2-NEXT: vinserti128 $0, %xmm1, %ymm2, %ymm1
693 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
695 %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>
696 ret <8 x i32> %shuffle
699 define <8 x i32> @shuffle_v8i32_01014545(<8 x i32> %a, <8 x i32> %b) {
700 ; AVX1-LABEL: @shuffle_v8i32_01014545
702 ; AVX1-NEXT: vpermilpd {{.*}} # ymm0 = ymm0[0,0,2,2]
705 ; AVX2-LABEL: @shuffle_v8i32_01014545
707 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
709 %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>
710 ret <8 x i32> %shuffle
713 define <8 x i32> @shuffle_v8i32_00112233(<8 x i32> %a, <8 x i32> %b) {
714 ; AVX1-LABEL: @shuffle_v8i32_00112233
716 ; AVX1-NEXT: vunpcklps {{.*}} # xmm1 = xmm0[0,0,1,1]
717 ; AVX1-NEXT: vunpckhps {{.*}} # xmm0 = xmm0[2,2,3,3]
718 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
721 ; AVX2-LABEL: @shuffle_v8i32_00112233
723 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,1,1,2,2,3,3]
724 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
726 %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>
727 ret <8 x i32> %shuffle
730 define <8 x i32> @shuffle_v8i32_00001111(<8 x i32> %a, <8 x i32> %b) {
731 ; AVX1-LABEL: @shuffle_v8i32_00001111
733 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
734 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[1,1,1,1]
735 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
738 ; AVX2-LABEL: @shuffle_v8i32_00001111
740 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,1,1,1,1]
741 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
743 %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>
744 ret <8 x i32> %shuffle
747 define <8 x i32> @shuffle_v8i32_81a3c5e7(<8 x i32> %a, <8 x i32> %b) {
748 ; AVX1-LABEL: @shuffle_v8i32_81a3c5e7
750 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
753 ; AVX2-LABEL: @shuffle_v8i32_81a3c5e7
755 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
757 %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>
758 ret <8 x i32> %shuffle
761 define <8 x i32> @shuffle_v8i32_08080808(<8 x i32> %a, <8 x i32> %b) {
762 ; AVX1-LABEL: @shuffle_v8i32_08080808
764 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,0,2,0]
765 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,0,3]
766 ; AVX1-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
767 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
770 ; AVX2-LABEL: @shuffle_v8i32_08080808
772 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
773 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
774 ; AVX2-NEXT: vpermq {{.*}} # ymm0 = ymm0[0,0,0,0]
775 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
777 %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>
778 ret <8 x i32> %shuffle
781 define <8 x i32> @shuffle_v8i32_08084c4c(<8 x i32> %a, <8 x i32> %b) {
782 ; AVX1-LABEL: @shuffle_v8i32_08084c4c
784 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
785 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,2,1,3,4,6,5,7]
788 ; AVX2-LABEL: @shuffle_v8i32_08084c4c
790 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[0,0,2,0,4,4,6,4]
791 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
792 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
794 %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>
795 ret <8 x i32> %shuffle
798 define <8 x i32> @shuffle_v8i32_8823cc67(<8 x i32> %a, <8 x i32> %b) {
799 ; AVX1-LABEL: @shuffle_v8i32_8823cc67
801 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
804 ; AVX2-LABEL: @shuffle_v8i32_8823cc67
806 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[0,0,2,3,4,4,6,7]
807 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
809 %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>
810 ret <8 x i32> %shuffle
813 define <8 x i32> @shuffle_v8i32_9832dc76(<8 x i32> %a, <8 x i32> %b) {
814 ; AVX1-LABEL: @shuffle_v8i32_9832dc76
816 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
819 ; AVX2-LABEL: @shuffle_v8i32_9832dc76
821 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,3,2,4,5,7,6]
822 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[1,0,2,3,5,4,6,7]
823 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
825 %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>
826 ret <8 x i32> %shuffle
829 define <8 x i32> @shuffle_v8i32_9810dc54(<8 x i32> %a, <8 x i32> %b) {
830 ; AVX1-LABEL: @shuffle_v8i32_9810dc54
832 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
835 ; AVX2-LABEL: @shuffle_v8i32_9810dc54
837 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,1,0,4,5,5,4]
838 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[1,0,2,3,5,4,6,7]
839 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
841 %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>
842 ret <8 x i32> %shuffle
845 define <8 x i32> @shuffle_v8i32_08194c5d(<8 x i32> %a, <8 x i32> %b) {
846 ; AVX1-LABEL: @shuffle_v8i32_08194c5d
848 ; AVX1-NEXT: vunpcklps {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
851 ; AVX2-LABEL: @shuffle_v8i32_08194c5d
853 ; AVX2-NEXT: vpunpckldq {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
855 %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>
856 ret <8 x i32> %shuffle
859 define <8 x i32> @shuffle_v8i32_2a3b6e7f(<8 x i32> %a, <8 x i32> %b) {
860 ; AVX1-LABEL: @shuffle_v8i32_2a3b6e7f
862 ; AVX1-NEXT: vunpckhps {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
865 ; AVX2-LABEL: @shuffle_v8i32_2a3b6e7f
867 ; AVX2-NEXT: vpunpckhdq {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
869 %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>
870 ret <8 x i32> %shuffle
873 define <8 x i32> @shuffle_v8i32_08192a3b(<8 x i32> %a, <8 x i32> %b) {
874 ; AVX1-LABEL: @shuffle_v8i32_08192a3b
876 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm1[0,2,2,3]
877 ; AVX1-NEXT: vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
878 ; AVX1-NEXT: vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
879 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,0,2,1]
880 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
881 ; AVX1-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
882 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
885 ; AVX2-LABEL: @shuffle_v8i32_08192a3b
887 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <u,0,u,1,u,2,u,3>
888 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
889 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,1,u,2,u,3,u>
890 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
891 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
893 %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>
894 ret <8 x i32> %shuffle
897 define <8 x i32> @shuffle_v8i32_08991abb(<8 x i32> %a, <8 x i32> %b) {
898 ; AVX1-LABEL: @shuffle_v8i32_08991abb
900 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
901 ; AVX1-NEXT: vpermilps {{.*}} # xmm3 = xmm1[0,2,3,3]
902 ; AVX1-NEXT: vblendps {{.*}} # xmm2 = xmm2[0],xmm3[1,2,3]
903 ; AVX1-NEXT: vunpcklps {{.*}} # xmm1 = xmm1[0,0,1,1]
904 ; AVX1-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
905 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
908 ; AVX2-LABEL: @shuffle_v8i32_08991abb
910 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,u,u,1,u,u,u>
911 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
912 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <u,0,1,1,u,2,3,3>
913 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
914 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
916 %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>
917 ret <8 x i32> %shuffle
920 define <8 x i32> @shuffle_v8i32_091b2d3f(<8 x i32> %a, <8 x i32> %b) {
921 ; AVX1-LABEL: @shuffle_v8i32_091b2d3f
923 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
924 ; AVX1-NEXT: vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
925 ; AVX1-NEXT: vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
926 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
927 ; AVX1-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
928 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
931 ; AVX2-LABEL: @shuffle_v8i32_091b2d3f
933 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,1,u,2,u,3,u>
934 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
935 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
937 %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>
938 ret <8 x i32> %shuffle
941 define <8 x i32> @shuffle_v8i32_09ab1def(<8 x i32> %a, <8 x i32> %b) {
942 ; AVX1-LABEL: @shuffle_v8i32_09ab1def
944 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
945 ; AVX1-NEXT: vpermilps {{.*}} # xmm3 = xmm0[1,1,2,3]
946 ; AVX1-NEXT: vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1,2,3]
947 ; AVX1-NEXT: vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
948 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
951 ; AVX2-LABEL: @shuffle_v8i32_09ab1def
953 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,u,u,1,u,u,u>
954 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
955 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
957 %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>
958 ret <8 x i32> %shuffle
961 define <8 x i32> @shuffle_v8i32_00014445(<8 x i32> %a, <8 x i32> %b) {
962 ; AVX1-LABEL: @shuffle_v8i32_00014445
964 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
967 ; AVX2-LABEL: @shuffle_v8i32_00014445
969 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
971 %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>
972 ret <8 x i32> %shuffle
975 define <8 x i32> @shuffle_v8i32_00204464(<8 x i32> %a, <8 x i32> %b) {
976 ; AVX1-LABEL: @shuffle_v8i32_00204464
978 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
981 ; AVX2-LABEL: @shuffle_v8i32_00204464
983 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
985 %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>
986 ret <8 x i32> %shuffle
989 define <8 x i32> @shuffle_v8i32_03004744(<8 x i32> %a, <8 x i32> %b) {
990 ; AVX1-LABEL: @shuffle_v8i32_03004744
992 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
995 ; AVX2-LABEL: @shuffle_v8i32_03004744
997 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
999 %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>
1000 ret <8 x i32> %shuffle
1003 define <8 x i32> @shuffle_v8i32_10005444(<8 x i32> %a, <8 x i32> %b) {
1004 ; AVX1-LABEL: @shuffle_v8i32_10005444
1006 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
1009 ; AVX2-LABEL: @shuffle_v8i32_10005444
1011 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
1013 %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>
1014 ret <8 x i32> %shuffle
1017 define <8 x i32> @shuffle_v8i32_22006644(<8 x i32> %a, <8 x i32> %b) {
1018 ; AVX1-LABEL: @shuffle_v8i32_22006644
1020 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
1023 ; AVX2-LABEL: @shuffle_v8i32_22006644
1025 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
1027 %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>
1028 ret <8 x i32> %shuffle
1031 define <8 x i32> @shuffle_v8i32_33307774(<8 x i32> %a, <8 x i32> %b) {
1032 ; AVX1-LABEL: @shuffle_v8i32_33307774
1034 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
1037 ; AVX2-LABEL: @shuffle_v8i32_33307774
1039 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
1041 %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>
1042 ret <8 x i32> %shuffle
1045 define <8 x i32> @shuffle_v8i32_32107654(<8 x i32> %a, <8 x i32> %b) {
1046 ; AVX1-LABEL: @shuffle_v8i32_32107654
1048 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
1051 ; AVX2-LABEL: @shuffle_v8i32_32107654
1053 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
1055 %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>
1056 ret <8 x i32> %shuffle
1059 define <8 x i32> @shuffle_v8i32_00234467(<8 x i32> %a, <8 x i32> %b) {
1060 ; AVX1-LABEL: @shuffle_v8i32_00234467
1062 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1065 ; AVX2-LABEL: @shuffle_v8i32_00234467
1067 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1069 %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>
1070 ret <8 x i32> %shuffle
1073 define <8 x i32> @shuffle_v8i32_00224466(<8 x i32> %a, <8 x i32> %b) {
1074 ; AVX1-LABEL: @shuffle_v8i32_00224466
1076 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
1079 ; AVX2-LABEL: @shuffle_v8i32_00224466
1081 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
1083 %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>
1084 ret <8 x i32> %shuffle
1087 define <8 x i32> @shuffle_v8i32_10325476(<8 x i32> %a, <8 x i32> %b) {
1088 ; AVX1-LABEL: @shuffle_v8i32_10325476
1090 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
1093 ; AVX2-LABEL: @shuffle_v8i32_10325476
1095 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
1097 %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>
1098 ret <8 x i32> %shuffle
1101 define <8 x i32> @shuffle_v8i32_11335577(<8 x i32> %a, <8 x i32> %b) {
1102 ; AVX1-LABEL: @shuffle_v8i32_11335577
1104 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
1107 ; AVX2-LABEL: @shuffle_v8i32_11335577
1109 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
1111 %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>
1112 ret <8 x i32> %shuffle
1115 define <8 x i32> @shuffle_v8i32_10235467(<8 x i32> %a, <8 x i32> %b) {
1116 ; AVX1-LABEL: @shuffle_v8i32_10235467
1118 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
1121 ; AVX2-LABEL: @shuffle_v8i32_10235467
1123 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
1125 %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>
1126 ret <8 x i32> %shuffle
1129 define <8 x i32> @shuffle_v8i32_10225466(<8 x i32> %a, <8 x i32> %b) {
1130 ; AVX1-LABEL: @shuffle_v8i32_10225466
1132 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
1135 ; AVX2-LABEL: @shuffle_v8i32_10225466
1137 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
1139 %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>
1140 ret <8 x i32> %shuffle
1143 define <8 x i32> @shuffle_v8i32_00015444(<8 x i32> %a, <8 x i32> %b) {
1144 ; AVX1-LABEL: @shuffle_v8i32_00015444
1146 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,5,4,4,4]
1149 ; AVX2-LABEL: @shuffle_v8i32_00015444
1151 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,1,5,4,4,4]
1152 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1154 %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>
1155 ret <8 x i32> %shuffle
1158 define <8 x i32> @shuffle_v8i32_00204644(<8 x i32> %a, <8 x i32> %b) {
1159 ; AVX1-LABEL: @shuffle_v8i32_00204644
1161 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,6,4,4]
1164 ; AVX2-LABEL: @shuffle_v8i32_00204644
1166 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,2,0,4,6,4,4]
1167 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1169 %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>
1170 ret <8 x i32> %shuffle
1173 define <8 x i32> @shuffle_v8i32_03004474(<8 x i32> %a, <8 x i32> %b) {
1174 ; AVX1-LABEL: @shuffle_v8i32_03004474
1176 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,4,7,4]
1179 ; AVX2-LABEL: @shuffle_v8i32_03004474
1181 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,3,0,0,4,4,7,4]
1182 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1184 %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>
1185 ret <8 x i32> %shuffle
1188 define <8 x i32> @shuffle_v8i32_10004444(<8 x i32> %a, <8 x i32> %b) {
1189 ; AVX1-LABEL: @shuffle_v8i32_10004444
1191 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,4,4,4,4]
1194 ; AVX2-LABEL: @shuffle_v8i32_10004444
1196 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [1,0,0,0,4,4,4,4]
1197 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1199 %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>
1200 ret <8 x i32> %shuffle
1203 define <8 x i32> @shuffle_v8i32_22006446(<8 x i32> %a, <8 x i32> %b) {
1204 ; AVX1-LABEL: @shuffle_v8i32_22006446
1206 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,4,4,6]
1209 ; AVX2-LABEL: @shuffle_v8i32_22006446
1211 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [2,2,0,0,6,4,4,6]
1212 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1214 %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>
1215 ret <8 x i32> %shuffle
1218 define <8 x i32> @shuffle_v8i32_33307474(<8 x i32> %a, <8 x i32> %b) {
1219 ; AVX1-LABEL: @shuffle_v8i32_33307474
1221 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,4,7,4]
1224 ; AVX2-LABEL: @shuffle_v8i32_33307474
1226 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [3,3,3,0,7,4,7,4]
1227 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1229 %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>
1230 ret <8 x i32> %shuffle
1233 define <8 x i32> @shuffle_v8i32_32104567(<8 x i32> %a, <8 x i32> %b) {
1234 ; AVX1-LABEL: @shuffle_v8i32_32104567
1236 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,4,5,6,7]
1239 ; AVX2-LABEL: @shuffle_v8i32_32104567
1241 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [3,2,1,0,4,5,6,7]
1242 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1244 %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>
1245 ret <8 x i32> %shuffle
1248 define <8 x i32> @shuffle_v8i32_00236744(<8 x i32> %a, <8 x i32> %b) {
1249 ; AVX1-LABEL: @shuffle_v8i32_00236744
1251 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,6,7,4,4]
1254 ; AVX2-LABEL: @shuffle_v8i32_00236744
1256 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,2,3,6,7,4,4]
1257 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1259 %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>
1260 ret <8 x i32> %shuffle
1263 define <8 x i32> @shuffle_v8i32_00226644(<8 x i32> %a, <8 x i32> %b) {
1264 ; AVX1-LABEL: @shuffle_v8i32_00226644
1266 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,6,6,4,4]
1269 ; AVX2-LABEL: @shuffle_v8i32_00226644
1271 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,2,2,6,6,4,4]
1272 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1274 %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>
1275 ret <8 x i32> %shuffle
1278 define <8 x i32> @shuffle_v8i32_10324567(<8 x i32> %a, <8 x i32> %b) {
1279 ; AVX1-LABEL: @shuffle_v8i32_10324567
1281 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,6,7]
1284 ; AVX2-LABEL: @shuffle_v8i32_10324567
1286 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [1,0,3,2,4,5,6,7]
1287 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1289 %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>
1290 ret <8 x i32> %shuffle
1293 define <8 x i32> @shuffle_v8i32_11334567(<8 x i32> %a, <8 x i32> %b) {
1294 ; AVX1-LABEL: @shuffle_v8i32_11334567
1296 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,4,5,6,7]
1299 ; AVX2-LABEL: @shuffle_v8i32_11334567
1301 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [1,1,3,3,4,5,6,7]
1302 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1304 %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>
1305 ret <8 x i32> %shuffle
1308 define <8 x i32> @shuffle_v8i32_01235467(<8 x i32> %a, <8 x i32> %b) {
1309 ; AVX1-LABEL: @shuffle_v8i32_01235467
1311 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,7]
1314 ; AVX2-LABEL: @shuffle_v8i32_01235467
1316 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,1,2,3,5,4,6,7]
1317 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1319 %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>
1320 ret <8 x i32> %shuffle
1323 define <8 x i32> @shuffle_v8i32_01235466(<8 x i32> %a, <8 x i32> %b) {
1324 ; AVX1-LABEL: @shuffle_v8i32_01235466
1326 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,6]
1329 ; AVX2-LABEL: @shuffle_v8i32_01235466
1331 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,1,2,3,5,4,6,6]
1332 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1334 %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>
1335 ret <8 x i32> %shuffle
1338 define <8 x i32> @shuffle_v8i32_002u6u44(<8 x i32> %a, <8 x i32> %b) {
1339 ; AVX1-LABEL: @shuffle_v8i32_002u6u44
1341 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,u,6,u,4,4]
1344 ; AVX2-LABEL: @shuffle_v8i32_002u6u44
1346 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <0,0,2,u,6,u,4,4>
1347 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1349 %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>
1350 ret <8 x i32> %shuffle
1353 define <8 x i32> @shuffle_v8i32_00uu66uu(<8 x i32> %a, <8 x i32> %b) {
1354 ; AVX1-LABEL: @shuffle_v8i32_00uu66uu
1356 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,u,u,6,6,u,u]
1359 ; AVX2-LABEL: @shuffle_v8i32_00uu66uu
1361 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <0,0,u,u,6,6,u,u>
1362 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1364 %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>
1365 ret <8 x i32> %shuffle
1368 define <8 x i32> @shuffle_v8i32_103245uu(<8 x i32> %a, <8 x i32> %b) {
1369 ; AVX1-LABEL: @shuffle_v8i32_103245uu
1371 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,u,u]
1374 ; AVX2-LABEL: @shuffle_v8i32_103245uu
1376 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <1,0,3,2,4,5,u,u>
1377 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1379 %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>
1380 ret <8 x i32> %shuffle
1383 define <8 x i32> @shuffle_v8i32_1133uu67(<8 x i32> %a, <8 x i32> %b) {
1384 ; AVX1-LABEL: @shuffle_v8i32_1133uu67
1386 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,u,u,6,7]
1389 ; AVX2-LABEL: @shuffle_v8i32_1133uu67
1391 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <1,1,3,3,u,u,6,7>
1392 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1394 %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>
1395 ret <8 x i32> %shuffle
1398 define <8 x i32> @shuffle_v8i32_0uu354uu(<8 x i32> %a, <8 x i32> %b) {
1399 ; AVX1-LABEL: @shuffle_v8i32_0uu354uu
1401 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,u,u,3,5,4,u,u]
1404 ; AVX2-LABEL: @shuffle_v8i32_0uu354uu
1406 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <0,u,u,3,5,4,u,u>
1407 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1409 %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>
1410 ret <8 x i32> %shuffle
1413 define <8 x i32> @shuffle_v8i32_uuu3uu66(<8 x i32> %a, <8 x i32> %b) {
1414 ; AVX1-LABEL: @shuffle_v8i32_uuu3uu66
1416 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[u,u,u,3,u,u,6,6]
1419 ; AVX2-LABEL: @shuffle_v8i32_uuu3uu66
1421 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <u,u,u,3,u,u,6,6>
1422 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1424 %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>
1425 ret <8 x i32> %shuffle