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: vxorps %ymm1, %ymm1, %ymm1
16 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
18 %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>
19 ret <8 x float> %shuffle
22 define <8 x float> @shuffle_v8f32_00000010(<8 x float> %a, <8 x float> %b) {
23 ; AVX1-LABEL: @shuffle_v8f32_00000010
25 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
26 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,1,0]
27 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
30 ; AVX2-LABEL: @shuffle_v8f32_00000010
32 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,0,0,0,0,0,1,0]
33 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
35 %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>
36 ret <8 x float> %shuffle
39 define <8 x float> @shuffle_v8f32_00000200(<8 x float> %a, <8 x float> %b) {
40 ; AVX1-LABEL: @shuffle_v8f32_00000200
42 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
43 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,2,0,0]
44 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
47 ; AVX2-LABEL: @shuffle_v8f32_00000200
49 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,0,0,0,0,2,0,0]
50 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
52 %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>
53 ret <8 x float> %shuffle
56 define <8 x float> @shuffle_v8f32_00003000(<8 x float> %a, <8 x float> %b) {
57 ; AVX1-LABEL: @shuffle_v8f32_00003000
59 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
60 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[3,0,0,0]
61 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
64 ; AVX2-LABEL: @shuffle_v8f32_00003000
66 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,0,0,0,3,0,0,0]
67 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
69 %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>
70 ret <8 x float> %shuffle
73 define <8 x float> @shuffle_v8f32_00040000(<8 x float> %a, <8 x float> %b) {
74 ; AVX1-LABEL: @shuffle_v8f32_00040000
76 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
77 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[0,0,0,0,4,4,4,4]
78 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,3,4,4,4,7]
79 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]
82 ; AVX2-LABEL: @shuffle_v8f32_00040000
84 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,0,0,4,0,0,0,0]
85 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
87 %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>
88 ret <8 x float> %shuffle
91 define <8 x float> @shuffle_v8f32_00500000(<8 x float> %a, <8 x float> %b) {
92 ; AVX1-LABEL: @shuffle_v8f32_00500000
94 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
95 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[u,u,1,u,4,4,4,4]
96 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
97 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0,1],ymm1[2],ymm0[3],ymm1[4,5,6,7]
100 ; AVX2-LABEL: @shuffle_v8f32_00500000
102 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,0,5,0,0,0,0,0]
103 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
105 %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>
106 ret <8 x float> %shuffle
109 define <8 x float> @shuffle_v8f32_06000000(<8 x float> %a, <8 x float> %b) {
110 ; AVX1-LABEL: @shuffle_v8f32_06000000
112 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
113 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[u,2,u,u,4,4,4,4]
114 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,0,0,4,5,4,4]
115 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2,3],ymm1[4,5,6,7]
118 ; AVX2-LABEL: @shuffle_v8f32_06000000
120 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,6,0,0,0,0,0,0]
121 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
123 %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>
124 ret <8 x float> %shuffle
127 define <8 x float> @shuffle_v8f32_70000000(<8 x float> %a, <8 x float> %b) {
128 ; AVX1-LABEL: @shuffle_v8f32_70000000
130 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
131 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[3,u,u,u,4,4,4,4]
132 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,0,4,4,4,4]
133 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1,2,3],ymm1[4,5,6,7]
136 ; AVX2-LABEL: @shuffle_v8f32_70000000
138 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
139 ; AVX2-NEXT: movl $7, %eax
140 ; AVX2-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
141 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
142 ; AVX2-NEXT: vinserti128 $0, %xmm1, %ymm2, %ymm1
143 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
145 %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>
146 ret <8 x float> %shuffle
149 define <8 x float> @shuffle_v8f32_01014545(<8 x float> %a, <8 x float> %b) {
150 ; ALL-LABEL: @shuffle_v8f32_01014545
152 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
154 %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>
155 ret <8 x float> %shuffle
158 define <8 x float> @shuffle_v8f32_00112233(<8 x float> %a, <8 x float> %b) {
159 ; AVX1-LABEL: @shuffle_v8f32_00112233
161 ; AVX1-NEXT: vunpcklps {{.*}} # xmm1 = xmm0[0,0,1,1]
162 ; AVX1-NEXT: vunpckhps {{.*}} # xmm0 = xmm0[2,2,3,3]
163 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
166 ; AVX2-LABEL: @shuffle_v8f32_00112233
168 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,0,1,1,2,2,3,3]
169 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
171 %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>
172 ret <8 x float> %shuffle
175 define <8 x float> @shuffle_v8f32_00001111(<8 x float> %a, <8 x float> %b) {
176 ; AVX1-LABEL: @shuffle_v8f32_00001111
178 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
179 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[1,1,1,1]
180 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
183 ; AVX2-LABEL: @shuffle_v8f32_00001111
185 ; AVX2-NEXT: vmovaps {{.*}} # ymm1 = [0,0,0,0,1,1,1,1]
186 ; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0
188 %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>
189 ret <8 x float> %shuffle
192 define <8 x float> @shuffle_v8f32_81a3c5e7(<8 x float> %a, <8 x float> %b) {
193 ; ALL-LABEL: @shuffle_v8f32_81a3c5e7
195 ; ALL-NEXT: vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
197 %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>
198 ret <8 x float> %shuffle
201 define <8 x float> @shuffle_v8f32_08080808(<8 x float> %a, <8 x float> %b) {
202 ; AVX1-LABEL: @shuffle_v8f32_08080808
204 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,0,2,0]
205 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1
206 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,0,3]
207 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
208 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
211 ; AVX2-LABEL: @shuffle_v8f32_08080808
213 ; AVX2-NEXT: vxorps %ymm2, %ymm2, %ymm2
214 ; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm1
215 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
216 ; AVX2-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
218 %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>
219 ret <8 x float> %shuffle
222 define <8 x float> @shuffle_v8f32_08084c4c(<8 x float> %a, <8 x float> %b) {
223 ; ALL-LABEL: @shuffle_v8f32_08084c4c
225 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
226 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,2,1,3,4,6,5,7]
228 %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>
229 ret <8 x float> %shuffle
232 define <8 x float> @shuffle_v8f32_8823cc67(<8 x float> %a, <8 x float> %b) {
233 ; ALL-LABEL: @shuffle_v8f32_8823cc67
235 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
237 %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>
238 ret <8 x float> %shuffle
241 define <8 x float> @shuffle_v8f32_9832dc76(<8 x float> %a, <8 x float> %b) {
242 ; ALL-LABEL: @shuffle_v8f32_9832dc76
244 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
246 %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>
247 ret <8 x float> %shuffle
250 define <8 x float> @shuffle_v8f32_9810dc54(<8 x float> %a, <8 x float> %b) {
251 ; ALL-LABEL: @shuffle_v8f32_9810dc54
253 ; ALL-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
255 %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>
256 ret <8 x float> %shuffle
259 define <8 x float> @shuffle_v8f32_08194c5d(<8 x float> %a, <8 x float> %b) {
260 ; ALL-LABEL: @shuffle_v8f32_08194c5d
262 ; ALL-NEXT: vunpcklps {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
264 %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>
265 ret <8 x float> %shuffle
268 define <8 x float> @shuffle_v8f32_2a3b6e7f(<8 x float> %a, <8 x float> %b) {
269 ; ALL-LABEL: @shuffle_v8f32_2a3b6e7f
271 ; ALL-NEXT: vunpckhps {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
273 %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>
274 ret <8 x float> %shuffle
277 define <8 x float> @shuffle_v8f32_08192a3b(<8 x float> %a, <8 x float> %b) {
278 ; AVX1-LABEL: @shuffle_v8f32_08192a3b
280 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm1[0,0,2,1]
281 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,2,2,3]
282 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
283 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[0,1,1,3]
284 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[2,1,3,3]
285 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
286 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
289 ; AVX2-LABEL: @shuffle_v8f32_08192a3b
291 ; AVX2-NEXT: vmovaps {{.*}} # ymm2 = <u,0,u,1,u,2,u,3>
292 ; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm1
293 ; AVX2-NEXT: vmovaps {{.*}} # ymm2 = <0,u,1,u,2,u,3,u>
294 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
295 ; AVX2-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
297 %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>
298 ret <8 x float> %shuffle
301 define <8 x float> @shuffle_v8f32_08991abb(<8 x float> %a, <8 x float> %b) {
302 ; AVX1-LABEL: @shuffle_v8f32_08991abb
304 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
305 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
306 ; AVX1-NEXT: vunpcklps {{.*}} # xmm2 = xmm1[0,0,1,1]
307 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,2,3,3]
308 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
309 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
312 ; AVX2-LABEL: @shuffle_v8f32_08991abb
314 ; AVX2-NEXT: vmovaps {{.*}} # ymm2 = <0,u,u,u,1,u,u,u>
315 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
316 ; AVX2-NEXT: vmovaps {{.*}} # ymm2 = <u,0,1,1,u,2,3,3>
317 ; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm1
318 ; AVX2-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
320 %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>
321 ret <8 x float> %shuffle
324 define <8 x float> @shuffle_v8f32_091b2d3f(<8 x float> %a, <8 x float> %b) {
325 ; AVX1-LABEL: @shuffle_v8f32_091b2d3f
327 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[0,1,1,3]
328 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[2,1,3,3]
329 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
330 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
333 ; AVX2-LABEL: @shuffle_v8f32_091b2d3f
335 ; AVX2-NEXT: vmovaps {{.*}} # ymm2 = <0,u,1,u,2,u,3,u>
336 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
337 ; AVX2-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
339 %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>
340 ret <8 x float> %shuffle
343 define <8 x float> @shuffle_v8f32_09ab1def(<8 x float> %a, <8 x float> %b) {
344 ; AVX1-LABEL: @shuffle_v8f32_09ab1def
346 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
347 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
348 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
351 ; AVX2-LABEL: @shuffle_v8f32_09ab1def
353 ; AVX2-NEXT: vmovaps {{.*}} # ymm2 = <0,u,u,u,1,u,u,u>
354 ; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm0
355 ; AVX2-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
357 %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>
358 ret <8 x float> %shuffle
361 define <8 x float> @shuffle_v8f32_00014445(<8 x float> %a, <8 x float> %b) {
362 ; ALL-LABEL: @shuffle_v8f32_00014445
364 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
366 %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>
367 ret <8 x float> %shuffle
370 define <8 x float> @shuffle_v8f32_00204464(<8 x float> %a, <8 x float> %b) {
371 ; ALL-LABEL: @shuffle_v8f32_00204464
373 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
375 %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>
376 ret <8 x float> %shuffle
379 define <8 x float> @shuffle_v8f32_03004744(<8 x float> %a, <8 x float> %b) {
380 ; ALL-LABEL: @shuffle_v8f32_03004744
382 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
384 %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>
385 ret <8 x float> %shuffle
388 define <8 x float> @shuffle_v8f32_10005444(<8 x float> %a, <8 x float> %b) {
389 ; ALL-LABEL: @shuffle_v8f32_10005444
391 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
393 %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>
394 ret <8 x float> %shuffle
397 define <8 x float> @shuffle_v8f32_22006644(<8 x float> %a, <8 x float> %b) {
398 ; ALL-LABEL: @shuffle_v8f32_22006644
400 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
402 %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>
403 ret <8 x float> %shuffle
406 define <8 x float> @shuffle_v8f32_33307774(<8 x float> %a, <8 x float> %b) {
407 ; ALL-LABEL: @shuffle_v8f32_33307774
409 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
411 %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>
412 ret <8 x float> %shuffle
415 define <8 x float> @shuffle_v8f32_32107654(<8 x float> %a, <8 x float> %b) {
416 ; ALL-LABEL: @shuffle_v8f32_32107654
418 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
420 %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>
421 ret <8 x float> %shuffle
424 define <8 x float> @shuffle_v8f32_00234467(<8 x float> %a, <8 x float> %b) {
425 ; ALL-LABEL: @shuffle_v8f32_00234467
427 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
429 %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>
430 ret <8 x float> %shuffle
433 define <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {
434 ; ALL-LABEL: @shuffle_v8f32_00224466
436 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
438 %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>
439 ret <8 x float> %shuffle
442 define <8 x float> @shuffle_v8f32_10325476(<8 x float> %a, <8 x float> %b) {
443 ; ALL-LABEL: @shuffle_v8f32_10325476
445 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
447 %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>
448 ret <8 x float> %shuffle
451 define <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {
452 ; ALL-LABEL: @shuffle_v8f32_11335577
454 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
456 %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>
457 ret <8 x float> %shuffle
460 define <8 x float> @shuffle_v8f32_10235467(<8 x float> %a, <8 x float> %b) {
461 ; ALL-LABEL: @shuffle_v8f32_10235467
463 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
465 %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>
466 ret <8 x float> %shuffle
469 define <8 x float> @shuffle_v8f32_10225466(<8 x float> %a, <8 x float> %b) {
470 ; ALL-LABEL: @shuffle_v8f32_10225466
472 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
474 %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>
475 ret <8 x float> %shuffle
478 define <8 x float> @shuffle_v8f32_00015444(<8 x float> %a, <8 x float> %b) {
479 ; ALL-LABEL: @shuffle_v8f32_00015444
481 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,5,4,4,4]
483 %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>
484 ret <8 x float> %shuffle
487 define <8 x float> @shuffle_v8f32_00204644(<8 x float> %a, <8 x float> %b) {
488 ; ALL-LABEL: @shuffle_v8f32_00204644
490 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,6,4,4]
492 %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>
493 ret <8 x float> %shuffle
496 define <8 x float> @shuffle_v8f32_03004474(<8 x float> %a, <8 x float> %b) {
497 ; ALL-LABEL: @shuffle_v8f32_03004474
499 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,4,7,4]
501 %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>
502 ret <8 x float> %shuffle
505 define <8 x float> @shuffle_v8f32_10004444(<8 x float> %a, <8 x float> %b) {
506 ; ALL-LABEL: @shuffle_v8f32_10004444
508 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,4,4,4,4]
510 %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>
511 ret <8 x float> %shuffle
514 define <8 x float> @shuffle_v8f32_22006446(<8 x float> %a, <8 x float> %b) {
515 ; ALL-LABEL: @shuffle_v8f32_22006446
517 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,4,4,6]
519 %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>
520 ret <8 x float> %shuffle
523 define <8 x float> @shuffle_v8f32_33307474(<8 x float> %a, <8 x float> %b) {
524 ; ALL-LABEL: @shuffle_v8f32_33307474
526 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,4,7,4]
528 %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>
529 ret <8 x float> %shuffle
532 define <8 x float> @shuffle_v8f32_32104567(<8 x float> %a, <8 x float> %b) {
533 ; ALL-LABEL: @shuffle_v8f32_32104567
535 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,4,5,6,7]
537 %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>
538 ret <8 x float> %shuffle
541 define <8 x float> @shuffle_v8f32_00236744(<8 x float> %a, <8 x float> %b) {
542 ; ALL-LABEL: @shuffle_v8f32_00236744
544 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,6,7,4,4]
546 %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>
547 ret <8 x float> %shuffle
550 define <8 x float> @shuffle_v8f32_00226644(<8 x float> %a, <8 x float> %b) {
551 ; ALL-LABEL: @shuffle_v8f32_00226644
553 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,6,6,4,4]
555 %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>
556 ret <8 x float> %shuffle
559 define <8 x float> @shuffle_v8f32_10324567(<8 x float> %a, <8 x float> %b) {
560 ; ALL-LABEL: @shuffle_v8f32_10324567
562 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,6,7]
564 %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>
565 ret <8 x float> %shuffle
568 define <8 x float> @shuffle_v8f32_11334567(<8 x float> %a, <8 x float> %b) {
569 ; ALL-LABEL: @shuffle_v8f32_11334567
571 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,4,5,6,7]
573 %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>
574 ret <8 x float> %shuffle
577 define <8 x float> @shuffle_v8f32_01235467(<8 x float> %a, <8 x float> %b) {
578 ; ALL-LABEL: @shuffle_v8f32_01235467
580 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,7]
582 %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>
583 ret <8 x float> %shuffle
586 define <8 x float> @shuffle_v8f32_01235466(<8 x float> %a, <8 x float> %b) {
587 ; ALL-LABEL: @shuffle_v8f32_01235466
589 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,6]
591 %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>
592 ret <8 x float> %shuffle
595 define <8 x float> @shuffle_v8f32_002u6u44(<8 x float> %a, <8 x float> %b) {
596 ; ALL-LABEL: @shuffle_v8f32_002u6u44
598 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,u,6,u,4,4]
600 %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>
601 ret <8 x float> %shuffle
604 define <8 x float> @shuffle_v8f32_00uu66uu(<8 x float> %a, <8 x float> %b) {
605 ; ALL-LABEL: @shuffle_v8f32_00uu66uu
607 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,u,u,6,6,u,u]
609 %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>
610 ret <8 x float> %shuffle
613 define <8 x float> @shuffle_v8f32_103245uu(<8 x float> %a, <8 x float> %b) {
614 ; ALL-LABEL: @shuffle_v8f32_103245uu
616 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,u,u]
618 %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>
619 ret <8 x float> %shuffle
622 define <8 x float> @shuffle_v8f32_1133uu67(<8 x float> %a, <8 x float> %b) {
623 ; ALL-LABEL: @shuffle_v8f32_1133uu67
625 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,u,u,6,7]
627 %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>
628 ret <8 x float> %shuffle
631 define <8 x float> @shuffle_v8f32_0uu354uu(<8 x float> %a, <8 x float> %b) {
632 ; ALL-LABEL: @shuffle_v8f32_0uu354uu
634 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,u,u,3,5,4,u,u]
636 %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>
637 ret <8 x float> %shuffle
640 define <8 x float> @shuffle_v8f32_uuu3uu66(<8 x float> %a, <8 x float> %b) {
641 ; ALL-LABEL: @shuffle_v8f32_uuu3uu66
643 ; ALL-NEXT: vpermilps {{.*}} # ymm0 = ymm0[u,u,u,3,u,u,6,6]
645 %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>
646 ret <8 x float> %shuffle
649 define <8 x i32> @shuffle_v8i32_00000000(<8 x i32> %a, <8 x i32> %b) {
650 ; AVX1-LABEL: @shuffle_v8i32_00000000
652 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
653 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
656 ; AVX2-LABEL: @shuffle_v8i32_00000000
658 ; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1
659 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
661 %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>
662 ret <8 x i32> %shuffle
665 define <8 x i32> @shuffle_v8i32_00000010(<8 x i32> %a, <8 x i32> %b) {
666 ; AVX1-LABEL: @shuffle_v8i32_00000010
668 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
669 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,0,1,0]
670 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
673 ; AVX2-LABEL: @shuffle_v8i32_00000010
675 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,0,0,1,0]
676 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
678 %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>
679 ret <8 x i32> %shuffle
682 define <8 x i32> @shuffle_v8i32_00000200(<8 x i32> %a, <8 x i32> %b) {
683 ; AVX1-LABEL: @shuffle_v8i32_00000200
685 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
686 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,2,0,0]
687 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
690 ; AVX2-LABEL: @shuffle_v8i32_00000200
692 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,0,2,0,0]
693 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
695 %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>
696 ret <8 x i32> %shuffle
699 define <8 x i32> @shuffle_v8i32_00003000(<8 x i32> %a, <8 x i32> %b) {
700 ; AVX1-LABEL: @shuffle_v8i32_00003000
702 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
703 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[3,0,0,0]
704 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
707 ; AVX2-LABEL: @shuffle_v8i32_00003000
709 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,3,0,0,0]
710 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
712 %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>
713 ret <8 x i32> %shuffle
716 define <8 x i32> @shuffle_v8i32_00040000(<8 x i32> %a, <8 x i32> %b) {
717 ; AVX1-LABEL: @shuffle_v8i32_00040000
719 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
720 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[0,0,0,0,4,4,4,4]
721 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,3,4,4,4,7]
722 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]
725 ; AVX2-LABEL: @shuffle_v8i32_00040000
727 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,4,0,0,0,0]
728 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
730 %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>
731 ret <8 x i32> %shuffle
734 define <8 x i32> @shuffle_v8i32_00500000(<8 x i32> %a, <8 x i32> %b) {
735 ; AVX1-LABEL: @shuffle_v8i32_00500000
737 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
738 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[u,u,1,u,4,4,4,4]
739 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
740 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0,1],ymm1[2],ymm0[3],ymm1[4,5,6,7]
743 ; AVX2-LABEL: @shuffle_v8i32_00500000
745 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,5,0,0,0,0,0]
746 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
748 %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>
749 ret <8 x i32> %shuffle
752 define <8 x i32> @shuffle_v8i32_06000000(<8 x i32> %a, <8 x i32> %b) {
753 ; AVX1-LABEL: @shuffle_v8i32_06000000
755 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
756 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[u,2,u,u,4,4,4,4]
757 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,0,0,4,5,4,4]
758 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2,3],ymm1[4,5,6,7]
761 ; AVX2-LABEL: @shuffle_v8i32_06000000
763 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,6,0,0,0,0,0,0]
764 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
766 %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>
767 ret <8 x i32> %shuffle
770 define <8 x i32> @shuffle_v8i32_70000000(<8 x i32> %a, <8 x i32> %b) {
771 ; AVX1-LABEL: @shuffle_v8i32_70000000
773 ; AVX1-NEXT: vperm2f128 {{.*}} # ymm1 = ymm0[2,3,0,1]
774 ; AVX1-NEXT: vpermilps {{.*}} # ymm1 = ymm1[3,u,u,u,4,4,4,4]
775 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,0,4,4,4,4]
776 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1,2,3],ymm1[4,5,6,7]
779 ; AVX2-LABEL: @shuffle_v8i32_70000000
781 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
782 ; AVX2-NEXT: movl $7, %eax
783 ; AVX2-NEXT: vpinsrd $0, %eax, %xmm1, %xmm1
784 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
785 ; AVX2-NEXT: vinserti128 $0, %xmm1, %ymm2, %ymm1
786 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
788 %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>
789 ret <8 x i32> %shuffle
792 define <8 x i32> @shuffle_v8i32_01014545(<8 x i32> %a, <8 x i32> %b) {
793 ; AVX1-LABEL: @shuffle_v8i32_01014545
795 ; AVX1-NEXT: vpermilpd {{.*}} # ymm0 = ymm0[0,0,2,2]
798 ; AVX2-LABEL: @shuffle_v8i32_01014545
800 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
802 %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>
803 ret <8 x i32> %shuffle
806 define <8 x i32> @shuffle_v8i32_00112233(<8 x i32> %a, <8 x i32> %b) {
807 ; AVX1-LABEL: @shuffle_v8i32_00112233
809 ; AVX1-NEXT: vunpcklps {{.*}} # xmm1 = xmm0[0,0,1,1]
810 ; AVX1-NEXT: vunpckhps {{.*}} # xmm0 = xmm0[2,2,3,3]
811 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
814 ; AVX2-LABEL: @shuffle_v8i32_00112233
816 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,1,1,2,2,3,3]
817 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
819 %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>
820 ret <8 x i32> %shuffle
823 define <8 x i32> @shuffle_v8i32_00001111(<8 x i32> %a, <8 x i32> %b) {
824 ; AVX1-LABEL: @shuffle_v8i32_00001111
826 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
827 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[1,1,1,1]
828 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
831 ; AVX2-LABEL: @shuffle_v8i32_00001111
833 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,0,1,1,1,1]
834 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
836 %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>
837 ret <8 x i32> %shuffle
840 define <8 x i32> @shuffle_v8i32_81a3c5e7(<8 x i32> %a, <8 x i32> %b) {
841 ; AVX1-LABEL: @shuffle_v8i32_81a3c5e7
843 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
846 ; AVX2-LABEL: @shuffle_v8i32_81a3c5e7
848 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
850 %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>
851 ret <8 x i32> %shuffle
854 define <8 x i32> @shuffle_v8i32_08080808(<8 x i32> %a, <8 x i32> %b) {
855 ; AVX1-LABEL: @shuffle_v8i32_08080808
857 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,0,2,0]
858 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1
859 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[0,1,0,3]
860 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
861 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
864 ; AVX2-LABEL: @shuffle_v8i32_08080808
866 ; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
867 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
868 ; AVX2-NEXT: vpermq {{.*}} # ymm0 = ymm0[0,0,0,0]
869 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
871 %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>
872 ret <8 x i32> %shuffle
875 define <8 x i32> @shuffle_v8i32_08084c4c(<8 x i32> %a, <8 x i32> %b) {
876 ; AVX1-LABEL: @shuffle_v8i32_08084c4c
878 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
879 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm0[0,2,1,3,4,6,5,7]
882 ; AVX2-LABEL: @shuffle_v8i32_08084c4c
884 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[0,0,2,0,4,4,6,4]
885 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
886 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
888 %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>
889 ret <8 x i32> %shuffle
892 define <8 x i32> @shuffle_v8i32_8823cc67(<8 x i32> %a, <8 x i32> %b) {
893 ; AVX1-LABEL: @shuffle_v8i32_8823cc67
895 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
898 ; AVX2-LABEL: @shuffle_v8i32_8823cc67
900 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[0,0,2,3,4,4,6,7]
901 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
903 %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>
904 ret <8 x i32> %shuffle
907 define <8 x i32> @shuffle_v8i32_9832dc76(<8 x i32> %a, <8 x i32> %b) {
908 ; AVX1-LABEL: @shuffle_v8i32_9832dc76
910 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
913 ; AVX2-LABEL: @shuffle_v8i32_9832dc76
915 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,3,2,4,5,7,6]
916 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[1,0,2,3,5,4,6,7]
917 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
919 %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>
920 ret <8 x i32> %shuffle
923 define <8 x i32> @shuffle_v8i32_9810dc54(<8 x i32> %a, <8 x i32> %b) {
924 ; AVX1-LABEL: @shuffle_v8i32_9810dc54
926 ; AVX1-NEXT: vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
929 ; AVX2-LABEL: @shuffle_v8i32_9810dc54
931 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,1,1,0,4,5,5,4]
932 ; AVX2-NEXT: vpshufd {{.*}} # ymm1 = ymm1[1,0,2,3,5,4,6,7]
933 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
935 %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>
936 ret <8 x i32> %shuffle
939 define <8 x i32> @shuffle_v8i32_08194c5d(<8 x i32> %a, <8 x i32> %b) {
940 ; AVX1-LABEL: @shuffle_v8i32_08194c5d
942 ; AVX1-NEXT: vunpcklps {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
945 ; AVX2-LABEL: @shuffle_v8i32_08194c5d
947 ; AVX2-NEXT: vpunpckldq {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
949 %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>
950 ret <8 x i32> %shuffle
953 define <8 x i32> @shuffle_v8i32_2a3b6e7f(<8 x i32> %a, <8 x i32> %b) {
954 ; AVX1-LABEL: @shuffle_v8i32_2a3b6e7f
956 ; AVX1-NEXT: vunpckhps {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
959 ; AVX2-LABEL: @shuffle_v8i32_2a3b6e7f
961 ; AVX2-NEXT: vpunpckhdq {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
963 %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>
964 ret <8 x i32> %shuffle
967 define <8 x i32> @shuffle_v8i32_08192a3b(<8 x i32> %a, <8 x i32> %b) {
968 ; AVX1-LABEL: @shuffle_v8i32_08192a3b
970 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm1[0,0,2,1]
971 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,2,2,3]
972 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
973 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[0,1,1,3]
974 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[2,1,3,3]
975 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
976 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
979 ; AVX2-LABEL: @shuffle_v8i32_08192a3b
981 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <u,0,u,1,u,2,u,3>
982 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
983 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,1,u,2,u,3,u>
984 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
985 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
987 %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>
988 ret <8 x i32> %shuffle
991 define <8 x i32> @shuffle_v8i32_08991abb(<8 x i32> %a, <8 x i32> %b) {
992 ; AVX1-LABEL: @shuffle_v8i32_08991abb
994 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
995 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
996 ; AVX1-NEXT: vunpcklps {{.*}} # xmm2 = xmm1[0,0,1,1]
997 ; AVX1-NEXT: vpermilps {{.*}} # xmm1 = xmm1[0,2,3,3]
998 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
999 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1002 ; AVX2-LABEL: @shuffle_v8i32_08991abb
1004 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,u,u,1,u,u,u>
1005 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
1006 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <u,0,1,1,u,2,3,3>
1007 ; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
1008 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1010 %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>
1011 ret <8 x i32> %shuffle
1014 define <8 x i32> @shuffle_v8i32_091b2d3f(<8 x i32> %a, <8 x i32> %b) {
1015 ; AVX1-LABEL: @shuffle_v8i32_091b2d3f
1017 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[0,1,1,3]
1018 ; AVX1-NEXT: vpermilps {{.*}} # xmm0 = xmm0[2,1,3,3]
1019 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
1020 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
1023 ; AVX2-LABEL: @shuffle_v8i32_091b2d3f
1025 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,1,u,2,u,3,u>
1026 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
1027 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
1029 %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>
1030 ret <8 x i32> %shuffle
1033 define <8 x i32> @shuffle_v8i32_09ab1def(<8 x i32> %a, <8 x i32> %b) {
1034 ; AVX1-LABEL: @shuffle_v8i32_09ab1def
1036 ; AVX1-NEXT: vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
1037 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1038 ; AVX1-NEXT: vblendps {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1041 ; AVX2-LABEL: @shuffle_v8i32_09ab1def
1043 ; AVX2-NEXT: vmovdqa {{.*}} # ymm2 = <0,u,u,u,1,u,u,u>
1044 ; AVX2-NEXT: vpermd %ymm0, %ymm2, %ymm0
1045 ; AVX2-NEXT: vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1047 %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>
1048 ret <8 x i32> %shuffle
1051 define <8 x i32> @shuffle_v8i32_00014445(<8 x i32> %a, <8 x i32> %b) {
1052 ; AVX1-LABEL: @shuffle_v8i32_00014445
1054 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
1057 ; AVX2-LABEL: @shuffle_v8i32_00014445
1059 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
1061 %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>
1062 ret <8 x i32> %shuffle
1065 define <8 x i32> @shuffle_v8i32_00204464(<8 x i32> %a, <8 x i32> %b) {
1066 ; AVX1-LABEL: @shuffle_v8i32_00204464
1068 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
1071 ; AVX2-LABEL: @shuffle_v8i32_00204464
1073 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
1075 %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>
1076 ret <8 x i32> %shuffle
1079 define <8 x i32> @shuffle_v8i32_03004744(<8 x i32> %a, <8 x i32> %b) {
1080 ; AVX1-LABEL: @shuffle_v8i32_03004744
1082 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
1085 ; AVX2-LABEL: @shuffle_v8i32_03004744
1087 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
1089 %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>
1090 ret <8 x i32> %shuffle
1093 define <8 x i32> @shuffle_v8i32_10005444(<8 x i32> %a, <8 x i32> %b) {
1094 ; AVX1-LABEL: @shuffle_v8i32_10005444
1096 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
1099 ; AVX2-LABEL: @shuffle_v8i32_10005444
1101 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
1103 %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>
1104 ret <8 x i32> %shuffle
1107 define <8 x i32> @shuffle_v8i32_22006644(<8 x i32> %a, <8 x i32> %b) {
1108 ; AVX1-LABEL: @shuffle_v8i32_22006644
1110 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
1113 ; AVX2-LABEL: @shuffle_v8i32_22006644
1115 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
1117 %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>
1118 ret <8 x i32> %shuffle
1121 define <8 x i32> @shuffle_v8i32_33307774(<8 x i32> %a, <8 x i32> %b) {
1122 ; AVX1-LABEL: @shuffle_v8i32_33307774
1124 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
1127 ; AVX2-LABEL: @shuffle_v8i32_33307774
1129 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
1131 %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>
1132 ret <8 x i32> %shuffle
1135 define <8 x i32> @shuffle_v8i32_32107654(<8 x i32> %a, <8 x i32> %b) {
1136 ; AVX1-LABEL: @shuffle_v8i32_32107654
1138 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
1141 ; AVX2-LABEL: @shuffle_v8i32_32107654
1143 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
1145 %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>
1146 ret <8 x i32> %shuffle
1149 define <8 x i32> @shuffle_v8i32_00234467(<8 x i32> %a, <8 x i32> %b) {
1150 ; AVX1-LABEL: @shuffle_v8i32_00234467
1152 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1155 ; AVX2-LABEL: @shuffle_v8i32_00234467
1157 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1159 %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>
1160 ret <8 x i32> %shuffle
1163 define <8 x i32> @shuffle_v8i32_00224466(<8 x i32> %a, <8 x i32> %b) {
1164 ; AVX1-LABEL: @shuffle_v8i32_00224466
1166 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
1169 ; AVX2-LABEL: @shuffle_v8i32_00224466
1171 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
1173 %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>
1174 ret <8 x i32> %shuffle
1177 define <8 x i32> @shuffle_v8i32_10325476(<8 x i32> %a, <8 x i32> %b) {
1178 ; AVX1-LABEL: @shuffle_v8i32_10325476
1180 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
1183 ; AVX2-LABEL: @shuffle_v8i32_10325476
1185 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
1187 %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>
1188 ret <8 x i32> %shuffle
1191 define <8 x i32> @shuffle_v8i32_11335577(<8 x i32> %a, <8 x i32> %b) {
1192 ; AVX1-LABEL: @shuffle_v8i32_11335577
1194 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
1197 ; AVX2-LABEL: @shuffle_v8i32_11335577
1199 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
1201 %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>
1202 ret <8 x i32> %shuffle
1205 define <8 x i32> @shuffle_v8i32_10235467(<8 x i32> %a, <8 x i32> %b) {
1206 ; AVX1-LABEL: @shuffle_v8i32_10235467
1208 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
1211 ; AVX2-LABEL: @shuffle_v8i32_10235467
1213 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
1215 %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>
1216 ret <8 x i32> %shuffle
1219 define <8 x i32> @shuffle_v8i32_10225466(<8 x i32> %a, <8 x i32> %b) {
1220 ; AVX1-LABEL: @shuffle_v8i32_10225466
1222 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
1225 ; AVX2-LABEL: @shuffle_v8i32_10225466
1227 ; AVX2-NEXT: vpshufd {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
1229 %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>
1230 ret <8 x i32> %shuffle
1233 define <8 x i32> @shuffle_v8i32_00015444(<8 x i32> %a, <8 x i32> %b) {
1234 ; AVX1-LABEL: @shuffle_v8i32_00015444
1236 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,5,4,4,4]
1239 ; AVX2-LABEL: @shuffle_v8i32_00015444
1241 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,0,1,5,4,4,4]
1242 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1244 %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>
1245 ret <8 x i32> %shuffle
1248 define <8 x i32> @shuffle_v8i32_00204644(<8 x i32> %a, <8 x i32> %b) {
1249 ; AVX1-LABEL: @shuffle_v8i32_00204644
1251 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,6,4,4]
1254 ; AVX2-LABEL: @shuffle_v8i32_00204644
1256 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,2,0,4,6,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 0, i32 4, i32 6, i32 4, i32 4>
1260 ret <8 x i32> %shuffle
1263 define <8 x i32> @shuffle_v8i32_03004474(<8 x i32> %a, <8 x i32> %b) {
1264 ; AVX1-LABEL: @shuffle_v8i32_03004474
1266 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,4,7,4]
1269 ; AVX2-LABEL: @shuffle_v8i32_03004474
1271 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,3,0,0,4,4,7,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 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>
1275 ret <8 x i32> %shuffle
1278 define <8 x i32> @shuffle_v8i32_10004444(<8 x i32> %a, <8 x i32> %b) {
1279 ; AVX1-LABEL: @shuffle_v8i32_10004444
1281 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,4,4,4,4]
1284 ; AVX2-LABEL: @shuffle_v8i32_10004444
1286 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [1,0,0,0,4,4,4,4]
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 0, i32 0, i32 4, i32 4, i32 4, i32 4>
1290 ret <8 x i32> %shuffle
1293 define <8 x i32> @shuffle_v8i32_22006446(<8 x i32> %a, <8 x i32> %b) {
1294 ; AVX1-LABEL: @shuffle_v8i32_22006446
1296 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,4,4,6]
1299 ; AVX2-LABEL: @shuffle_v8i32_22006446
1301 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [2,2,0,0,6,4,4,6]
1302 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1304 %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>
1305 ret <8 x i32> %shuffle
1308 define <8 x i32> @shuffle_v8i32_33307474(<8 x i32> %a, <8 x i32> %b) {
1309 ; AVX1-LABEL: @shuffle_v8i32_33307474
1311 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,4,7,4]
1314 ; AVX2-LABEL: @shuffle_v8i32_33307474
1316 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [3,3,3,0,7,4,7,4]
1317 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1319 %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>
1320 ret <8 x i32> %shuffle
1323 define <8 x i32> @shuffle_v8i32_32104567(<8 x i32> %a, <8 x i32> %b) {
1324 ; AVX1-LABEL: @shuffle_v8i32_32104567
1326 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,4,5,6,7]
1329 ; AVX2-LABEL: @shuffle_v8i32_32104567
1331 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [3,2,1,0,4,5,6,7]
1332 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1334 %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>
1335 ret <8 x i32> %shuffle
1338 define <8 x i32> @shuffle_v8i32_00236744(<8 x i32> %a, <8 x i32> %b) {
1339 ; AVX1-LABEL: @shuffle_v8i32_00236744
1341 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,6,7,4,4]
1344 ; AVX2-LABEL: @shuffle_v8i32_00236744
1346 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,2,3,6,7,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 3, i32 6, i32 7, i32 4, i32 4>
1350 ret <8 x i32> %shuffle
1353 define <8 x i32> @shuffle_v8i32_00226644(<8 x i32> %a, <8 x i32> %b) {
1354 ; AVX1-LABEL: @shuffle_v8i32_00226644
1356 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,6,6,4,4]
1359 ; AVX2-LABEL: @shuffle_v8i32_00226644
1361 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,0,2,2,6,6,4,4]
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 2, i32 2, i32 6, i32 6, i32 4, i32 4>
1365 ret <8 x i32> %shuffle
1368 define <8 x i32> @shuffle_v8i32_10324567(<8 x i32> %a, <8 x i32> %b) {
1369 ; AVX1-LABEL: @shuffle_v8i32_10324567
1371 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,6,7]
1374 ; AVX2-LABEL: @shuffle_v8i32_10324567
1376 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [1,0,3,2,4,5,6,7]
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 6, i32 7>
1380 ret <8 x i32> %shuffle
1383 define <8 x i32> @shuffle_v8i32_11334567(<8 x i32> %a, <8 x i32> %b) {
1384 ; AVX1-LABEL: @shuffle_v8i32_11334567
1386 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,4,5,6,7]
1389 ; AVX2-LABEL: @shuffle_v8i32_11334567
1391 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [1,1,3,3,4,5,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 4, i32 5, i32 6, i32 7>
1395 ret <8 x i32> %shuffle
1398 define <8 x i32> @shuffle_v8i32_01235467(<8 x i32> %a, <8 x i32> %b) {
1399 ; AVX1-LABEL: @shuffle_v8i32_01235467
1401 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,7]
1404 ; AVX2-LABEL: @shuffle_v8i32_01235467
1406 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,1,2,3,5,4,6,7]
1407 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1409 %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>
1410 ret <8 x i32> %shuffle
1413 define <8 x i32> @shuffle_v8i32_01235466(<8 x i32> %a, <8 x i32> %b) {
1414 ; AVX1-LABEL: @shuffle_v8i32_01235466
1416 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,6]
1419 ; AVX2-LABEL: @shuffle_v8i32_01235466
1421 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = [0,1,2,3,5,4,6,6]
1422 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1424 %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>
1425 ret <8 x i32> %shuffle
1428 define <8 x i32> @shuffle_v8i32_002u6u44(<8 x i32> %a, <8 x i32> %b) {
1429 ; AVX1-LABEL: @shuffle_v8i32_002u6u44
1431 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,2,u,6,u,4,4]
1434 ; AVX2-LABEL: @shuffle_v8i32_002u6u44
1436 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <0,0,2,u,6,u,4,4>
1437 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1439 %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>
1440 ret <8 x i32> %shuffle
1443 define <8 x i32> @shuffle_v8i32_00uu66uu(<8 x i32> %a, <8 x i32> %b) {
1444 ; AVX1-LABEL: @shuffle_v8i32_00uu66uu
1446 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,0,u,u,6,6,u,u]
1449 ; AVX2-LABEL: @shuffle_v8i32_00uu66uu
1451 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <0,0,u,u,6,6,u,u>
1452 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1454 %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>
1455 ret <8 x i32> %shuffle
1458 define <8 x i32> @shuffle_v8i32_103245uu(<8 x i32> %a, <8 x i32> %b) {
1459 ; AVX1-LABEL: @shuffle_v8i32_103245uu
1461 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,u,u]
1464 ; AVX2-LABEL: @shuffle_v8i32_103245uu
1466 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <1,0,3,2,4,5,u,u>
1467 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1469 %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>
1470 ret <8 x i32> %shuffle
1473 define <8 x i32> @shuffle_v8i32_1133uu67(<8 x i32> %a, <8 x i32> %b) {
1474 ; AVX1-LABEL: @shuffle_v8i32_1133uu67
1476 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,u,u,6,7]
1479 ; AVX2-LABEL: @shuffle_v8i32_1133uu67
1481 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <1,1,3,3,u,u,6,7>
1482 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1484 %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>
1485 ret <8 x i32> %shuffle
1488 define <8 x i32> @shuffle_v8i32_0uu354uu(<8 x i32> %a, <8 x i32> %b) {
1489 ; AVX1-LABEL: @shuffle_v8i32_0uu354uu
1491 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[0,u,u,3,5,4,u,u]
1494 ; AVX2-LABEL: @shuffle_v8i32_0uu354uu
1496 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <0,u,u,3,5,4,u,u>
1497 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1499 %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>
1500 ret <8 x i32> %shuffle
1503 define <8 x i32> @shuffle_v8i32_uuu3uu66(<8 x i32> %a, <8 x i32> %b) {
1504 ; AVX1-LABEL: @shuffle_v8i32_uuu3uu66
1506 ; AVX1-NEXT: vpermilps {{.*}} # ymm0 = ymm0[u,u,u,3,u,u,6,6]
1509 ; AVX2-LABEL: @shuffle_v8i32_uuu3uu66
1511 ; AVX2-NEXT: vmovdqa {{.*}} # ymm1 = <u,u,u,3,u,u,6,6>
1512 ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
1514 %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>
1515 ret <8 x i32> %shuffle