[x86] Teach the new vector shuffle lowering to lower v8i32 shuffles with
[oota-llvm.git] / test / CodeGen / X86 / vector-shuffle-256-v8.ll
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
3
4 target triple = "x86_64-unknown-unknown"
5
6 define <8 x float> @shuffle_v8f32_00000000(<8 x float> %a, <8 x float> %b) {
7 ; ALL-LABEL: @shuffle_v8f32_00000000
8 ; ALL:       # BB#0:
9 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
10 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
11 ; ALL-NEXT:    retq
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
14 }
15
16 define <8 x float> @shuffle_v8f32_00000010(<8 x float> %a, <8 x float> %b) {
17 ; ALL-LABEL: @shuffle_v8f32_00000010
18 ; ALL:       # BB#0:
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
22 ; ALL-NEXT:    retq
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
25 }
26
27 define <8 x float> @shuffle_v8f32_00000200(<8 x float> %a, <8 x float> %b) {
28 ; ALL-LABEL: @shuffle_v8f32_00000200
29 ; ALL:       # BB#0:
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
33 ; ALL-NEXT:    retq
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
36 }
37
38 define <8 x float> @shuffle_v8f32_00003000(<8 x float> %a, <8 x float> %b) {
39 ; ALL-LABEL: @shuffle_v8f32_00003000
40 ; ALL:       # BB#0:
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
44 ; ALL-NEXT:    retq
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
47 }
48
49 define <8 x float> @shuffle_v8f32_00040000(<8 x float> %a, <8 x float> %b) {
50 ; ALL-LABEL: @shuffle_v8f32_00040000
51 ; ALL:       # BB#0:
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
57 ; ALL-NEXT:    retq
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
60 }
61
62 define <8 x float> @shuffle_v8f32_00500000(<8 x float> %a, <8 x float> %b) {
63 ; ALL-LABEL: @shuffle_v8f32_00500000
64 ; ALL:       # BB#0:
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
70 ; ALL-NEXT:    retq
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
73 }
74
75 define <8 x float> @shuffle_v8f32_06000000(<8 x float> %a, <8 x float> %b) {
76 ; ALL-LABEL: @shuffle_v8f32_06000000
77 ; ALL:       # BB#0:
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
83 ; ALL-NEXT:    retq
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
86 }
87
88 define <8 x float> @shuffle_v8f32_70000000(<8 x float> %a, <8 x float> %b) {
89 ; ALL-LABEL: @shuffle_v8f32_70000000
90 ; ALL:       # BB#0:
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
96 ; ALL-NEXT:    retq
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
99 }
100
101 define <8 x float> @shuffle_v8f32_01014545(<8 x float> %a, <8 x float> %b) {
102 ; ALL-LABEL: @shuffle_v8f32_01014545
103 ; ALL:       # BB#0:
104 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
105 ; ALL-NEXT:    retq
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
108 }
109
110 define <8 x float> @shuffle_v8f32_00112233(<8 x float> %a, <8 x float> %b) {
111 ; ALL-LABEL: @shuffle_v8f32_00112233
112 ; ALL:       # BB#0:
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
116 ; ALL-NEXT:    retq
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
119 }
120
121 define <8 x float> @shuffle_v8f32_00001111(<8 x float> %a, <8 x float> %b) {
122 ; ALL-LABEL: @shuffle_v8f32_00001111
123 ; ALL:       # BB#0:
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
127 ; ALL-NEXT:    retq
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
130 }
131
132 define <8 x float> @shuffle_v8f32_81a3c5e7(<8 x float> %a, <8 x float> %b) {
133 ; ALL-LABEL: @shuffle_v8f32_81a3c5e7
134 ; ALL:       # BB#0:
135 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
136 ; ALL-NEXT:    retq
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
139 }
140
141 define <8 x float> @shuffle_v8f32_08080808(<8 x float> %a, <8 x float> %b) {
142 ; ALL-LABEL: @shuffle_v8f32_08080808
143 ; ALL:       # BB#0:
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
148 ; ALL-NEXT:    retq
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
151 }
152
153 define <8 x float> @shuffle_v8f32_08084c4c(<8 x float> %a, <8 x float> %b) {
154 ; ALL-LABEL: @shuffle_v8f32_08084c4c
155 ; ALL:       # BB#0:
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]
158 ; ALL-NEXT:    retq
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
161 }
162
163 define <8 x float> @shuffle_v8f32_8823cc67(<8 x float> %a, <8 x float> %b) {
164 ; ALL-LABEL: @shuffle_v8f32_8823cc67
165 ; ALL:       # BB#0:
166 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
167 ; ALL-NEXT:    retq
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
170 }
171
172 define <8 x float> @shuffle_v8f32_9832dc76(<8 x float> %a, <8 x float> %b) {
173 ; ALL-LABEL: @shuffle_v8f32_9832dc76
174 ; ALL:       # BB#0:
175 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
176 ; ALL-NEXT:    retq
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
179 }
180
181 define <8 x float> @shuffle_v8f32_9810dc54(<8 x float> %a, <8 x float> %b) {
182 ; ALL-LABEL: @shuffle_v8f32_9810dc54
183 ; ALL:       # BB#0:
184 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
185 ; ALL-NEXT:    retq
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
188 }
189
190 define <8 x float> @shuffle_v8f32_08194c5d(<8 x float> %a, <8 x float> %b) {
191 ; ALL-LABEL: @shuffle_v8f32_08194c5d
192 ; ALL:       # BB#0:
193 ; ALL-NEXT:    vunpcklps {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
194 ; ALL-NEXT:    retq
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
197 }
198
199 define <8 x float> @shuffle_v8f32_2a3b6e7f(<8 x float> %a, <8 x float> %b) {
200 ; ALL-LABEL: @shuffle_v8f32_2a3b6e7f
201 ; ALL:       # BB#0:
202 ; ALL-NEXT:    vunpckhps {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
203 ; ALL-NEXT:    retq
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
206 }
207
208 define <8 x float> @shuffle_v8f32_08192a3b(<8 x float> %a, <8 x float> %b) {
209 ; ALL-LABEL: @shuffle_v8f32_08192a3b
210 ; ALL:       # BB#0:
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
218 ; ALL-NEXT:    retq
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
221 }
222
223 define <8 x float> @shuffle_v8f32_08991abb(<8 x float> %a, <8 x float> %b) {
224 ; ALL-LABEL: @shuffle_v8f32_08991abb
225 ; ALL:       # BB#0:
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
232 ; ALL-NEXT:    retq
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
235 }
236
237 define <8 x float> @shuffle_v8f32_091b2d3f(<8 x float> %a, <8 x float> %b) {
238 ; ALL-LABEL: @shuffle_v8f32_091b2d3f
239 ; ALL:       # BB#0:
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
246 ; ALL-NEXT:    retq
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
249 }
250
251 define <8 x float> @shuffle_v8f32_09ab1def(<8 x float> %a, <8 x float> %b) {
252 ; ALL-LABEL: @shuffle_v8f32_09ab1def
253 ; ALL:       # BB#0:
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
259 ; ALL-NEXT:    retq
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
262 }
263
264 define <8 x float> @shuffle_v8f32_00014445(<8 x float> %a, <8 x float> %b) {
265 ; ALL-LABEL: @shuffle_v8f32_00014445
266 ; ALL:       # BB#0:
267 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
268 ; ALL-NEXT:    retq
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
271 }
272
273 define <8 x float> @shuffle_v8f32_00204464(<8 x float> %a, <8 x float> %b) {
274 ; ALL-LABEL: @shuffle_v8f32_00204464
275 ; ALL:       # BB#0:
276 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
277 ; ALL-NEXT:    retq
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
280 }
281
282 define <8 x float> @shuffle_v8f32_03004744(<8 x float> %a, <8 x float> %b) {
283 ; ALL-LABEL: @shuffle_v8f32_03004744
284 ; ALL:       # BB#0:
285 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
286 ; ALL-NEXT:    retq
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
289 }
290
291 define <8 x float> @shuffle_v8f32_10005444(<8 x float> %a, <8 x float> %b) {
292 ; ALL-LABEL: @shuffle_v8f32_10005444
293 ; ALL:       # BB#0:
294 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
295 ; ALL-NEXT:    retq
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
298 }
299
300 define <8 x float> @shuffle_v8f32_22006644(<8 x float> %a, <8 x float> %b) {
301 ; ALL-LABEL: @shuffle_v8f32_22006644
302 ; ALL:       # BB#0:
303 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
304 ; ALL-NEXT:    retq
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
307 }
308
309 define <8 x float> @shuffle_v8f32_33307774(<8 x float> %a, <8 x float> %b) {
310 ; ALL-LABEL: @shuffle_v8f32_33307774
311 ; ALL:       # BB#0:
312 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
313 ; ALL-NEXT:    retq
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
316 }
317
318 define <8 x float> @shuffle_v8f32_32107654(<8 x float> %a, <8 x float> %b) {
319 ; ALL-LABEL: @shuffle_v8f32_32107654
320 ; ALL:       # BB#0:
321 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
322 ; ALL-NEXT:    retq
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
325 }
326
327 define <8 x float> @shuffle_v8f32_00234467(<8 x float> %a, <8 x float> %b) {
328 ; ALL-LABEL: @shuffle_v8f32_00234467
329 ; ALL:       # BB#0:
330 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
331 ; ALL-NEXT:    retq
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
334 }
335
336 define <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {
337 ; ALL-LABEL: @shuffle_v8f32_00224466
338 ; ALL:       # BB#0:
339 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
340 ; ALL-NEXT:    retq
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
343 }
344
345 define <8 x float> @shuffle_v8f32_10325476(<8 x float> %a, <8 x float> %b) {
346 ; ALL-LABEL: @shuffle_v8f32_10325476
347 ; ALL:       # BB#0:
348 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
349 ; ALL-NEXT:    retq
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
352 }
353
354 define <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {
355 ; ALL-LABEL: @shuffle_v8f32_11335577
356 ; ALL:       # BB#0:
357 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
358 ; ALL-NEXT:    retq
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
361 }
362
363 define <8 x float> @shuffle_v8f32_10235467(<8 x float> %a, <8 x float> %b) {
364 ; ALL-LABEL: @shuffle_v8f32_10235467
365 ; ALL:       # BB#0:
366 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
367 ; ALL-NEXT:    retq
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
370 }
371
372 define <8 x float> @shuffle_v8f32_10225466(<8 x float> %a, <8 x float> %b) {
373 ; ALL-LABEL: @shuffle_v8f32_10225466
374 ; ALL:       # BB#0:
375 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
376 ; ALL-NEXT:    retq
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
379 }
380
381 define <8 x float> @shuffle_v8f32_00015444(<8 x float> %a, <8 x float> %b) {
382 ; ALL-LABEL: @shuffle_v8f32_00015444
383 ; ALL:       # BB#0:
384 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,5,4,4,4]
385 ; ALL-NEXT:    retq
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
388 }
389
390 define <8 x float> @shuffle_v8f32_00204644(<8 x float> %a, <8 x float> %b) {
391 ; ALL-LABEL: @shuffle_v8f32_00204644
392 ; ALL:       # BB#0:
393 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,6,4,4]
394 ; ALL-NEXT:    retq
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
397 }
398
399 define <8 x float> @shuffle_v8f32_03004474(<8 x float> %a, <8 x float> %b) {
400 ; ALL-LABEL: @shuffle_v8f32_03004474
401 ; ALL:       # BB#0:
402 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,4,7,4]
403 ; ALL-NEXT:    retq
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
406 }
407
408 define <8 x float> @shuffle_v8f32_10004444(<8 x float> %a, <8 x float> %b) {
409 ; ALL-LABEL: @shuffle_v8f32_10004444
410 ; ALL:       # BB#0:
411 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,4,4,4,4]
412 ; ALL-NEXT:    retq
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
415 }
416
417 define <8 x float> @shuffle_v8f32_22006446(<8 x float> %a, <8 x float> %b) {
418 ; ALL-LABEL: @shuffle_v8f32_22006446
419 ; ALL:       # BB#0:
420 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,4,4,6]
421 ; ALL-NEXT:    retq
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
424 }
425
426 define <8 x float> @shuffle_v8f32_33307474(<8 x float> %a, <8 x float> %b) {
427 ; ALL-LABEL: @shuffle_v8f32_33307474
428 ; ALL:       # BB#0:
429 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,4,7,4]
430 ; ALL-NEXT:    retq
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
433 }
434
435 define <8 x float> @shuffle_v8f32_32104567(<8 x float> %a, <8 x float> %b) {
436 ; ALL-LABEL: @shuffle_v8f32_32104567
437 ; ALL:       # BB#0:
438 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,4,5,6,7]
439 ; ALL-NEXT:    retq
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
442 }
443
444 define <8 x float> @shuffle_v8f32_00236744(<8 x float> %a, <8 x float> %b) {
445 ; ALL-LABEL: @shuffle_v8f32_00236744
446 ; ALL:       # BB#0:
447 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,6,7,4,4]
448 ; ALL-NEXT:    retq
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
451 }
452
453 define <8 x float> @shuffle_v8f32_00226644(<8 x float> %a, <8 x float> %b) {
454 ; ALL-LABEL: @shuffle_v8f32_00226644
455 ; ALL:       # BB#0:
456 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,6,6,4,4]
457 ; ALL-NEXT:    retq
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
460 }
461
462 define <8 x float> @shuffle_v8f32_10324567(<8 x float> %a, <8 x float> %b) {
463 ; ALL-LABEL: @shuffle_v8f32_10324567
464 ; ALL:       # BB#0:
465 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,6,7]
466 ; ALL-NEXT:    retq
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
469 }
470
471 define <8 x float> @shuffle_v8f32_11334567(<8 x float> %a, <8 x float> %b) {
472 ; ALL-LABEL: @shuffle_v8f32_11334567
473 ; ALL:       # BB#0:
474 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,4,5,6,7]
475 ; ALL-NEXT:    retq
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
478 }
479
480 define <8 x float> @shuffle_v8f32_01235467(<8 x float> %a, <8 x float> %b) {
481 ; ALL-LABEL: @shuffle_v8f32_01235467
482 ; ALL:       # BB#0:
483 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,7]
484 ; ALL-NEXT:    retq
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
487 }
488
489 define <8 x float> @shuffle_v8f32_01235466(<8 x float> %a, <8 x float> %b) {
490 ; ALL-LABEL: @shuffle_v8f32_01235466
491 ; ALL:       # BB#0:
492 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,6]
493 ; ALL-NEXT:    retq
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
496 }
497
498 define <8 x float> @shuffle_v8f32_002u6u44(<8 x float> %a, <8 x float> %b) {
499 ; ALL-LABEL: @shuffle_v8f32_002u6u44
500 ; ALL:       # BB#0:
501 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,u,6,u,4,4]
502 ; ALL-NEXT:    retq
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
505 }
506
507 define <8 x float> @shuffle_v8f32_00uu66uu(<8 x float> %a, <8 x float> %b) {
508 ; ALL-LABEL: @shuffle_v8f32_00uu66uu
509 ; ALL:       # BB#0:
510 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,u,u,6,6,u,u]
511 ; ALL-NEXT:    retq
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
514 }
515
516 define <8 x float> @shuffle_v8f32_103245uu(<8 x float> %a, <8 x float> %b) {
517 ; ALL-LABEL: @shuffle_v8f32_103245uu
518 ; ALL:       # BB#0:
519 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,u,u]
520 ; ALL-NEXT:    retq
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
523 }
524
525 define <8 x float> @shuffle_v8f32_1133uu67(<8 x float> %a, <8 x float> %b) {
526 ; ALL-LABEL: @shuffle_v8f32_1133uu67
527 ; ALL:       # BB#0:
528 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,u,u,6,7]
529 ; ALL-NEXT:    retq
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
532 }
533
534 define <8 x float> @shuffle_v8f32_0uu354uu(<8 x float> %a, <8 x float> %b) {
535 ; ALL-LABEL: @shuffle_v8f32_0uu354uu
536 ; ALL:       # BB#0:
537 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,u,u,3,5,4,u,u]
538 ; ALL-NEXT:    retq
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
541 }
542
543 define <8 x float> @shuffle_v8f32_uuu3uu66(<8 x float> %a, <8 x float> %b) {
544 ; ALL-LABEL: @shuffle_v8f32_uuu3uu66
545 ; ALL:       # BB#0:
546 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[u,u,u,3,u,u,6,6]
547 ; ALL-NEXT:    retq
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
550 }
551
552 define <8 x i32> @shuffle_v8i32_00000000(<8 x i32> %a, <8 x i32> %b) {
553 ; AVX1-LABEL: @shuffle_v8i32_00000000
554 ; AVX1:       # BB#0:
555 ; AVX1-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
556 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
557 ; AVX1-NEXT:    retq
558 ;
559 ; AVX2-LABEL: @shuffle_v8i32_00000000
560 ; AVX2:       # BB#0:
561 ; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
562 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
563 ; AVX2-NEXT:    retq
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
566 }
567
568 define <8 x i32> @shuffle_v8i32_00000010(<8 x i32> %a, <8 x i32> %b) {
569 ; AVX1-LABEL: @shuffle_v8i32_00000010
570 ; AVX1:       # BB#0:
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
574 ; AVX1-NEXT:    retq
575 ;
576 ; AVX2-LABEL: @shuffle_v8i32_00000010
577 ; AVX2:       # BB#0:
578 ; AVX2-NEXT:    vmovdqa .LCPI56_0(%rip), %ymm1
579 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
580 ; AVX2-NEXT:    retq
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
583 }
584
585 define <8 x i32> @shuffle_v8i32_00000200(<8 x i32> %a, <8 x i32> %b) {
586 ; AVX1-LABEL: @shuffle_v8i32_00000200
587 ; AVX1:       # BB#0:
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
591 ; AVX1-NEXT:    retq
592 ;
593 ; AVX2-LABEL: @shuffle_v8i32_00000200
594 ; AVX2:       # BB#0:
595 ; AVX2-NEXT:    vmovdqa .LCPI57_0(%rip), %ymm1
596 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
597 ; AVX2-NEXT:    retq
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
600 }
601
602 define <8 x i32> @shuffle_v8i32_00003000(<8 x i32> %a, <8 x i32> %b) {
603 ; AVX1-LABEL: @shuffle_v8i32_00003000
604 ; AVX1:       # BB#0:
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
608 ; AVX1-NEXT:    retq
609 ;
610 ; AVX2-LABEL: @shuffle_v8i32_00003000
611 ; AVX2:       # BB#0:
612 ; AVX2-NEXT:    vmovdqa .LCPI58_0(%rip), %ymm1
613 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
614 ; AVX2-NEXT:    retq
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
617 }
618
619 define <8 x i32> @shuffle_v8i32_00040000(<8 x i32> %a, <8 x i32> %b) {
620 ; AVX1-LABEL: @shuffle_v8i32_00040000
621 ; AVX1:       # BB#0:
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
627 ; AVX1-NEXT:    retq
628 ;
629 ; AVX2-LABEL: @shuffle_v8i32_00040000
630 ; AVX2:       # BB#0:
631 ; AVX2-NEXT:    vmovdqa .LCPI59_0(%rip), %ymm1
632 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
633 ; AVX2-NEXT:    retq
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
636 }
637
638 define <8 x i32> @shuffle_v8i32_00500000(<8 x i32> %a, <8 x i32> %b) {
639 ; AVX1-LABEL: @shuffle_v8i32_00500000
640 ; AVX1:       # BB#0:
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
646 ; AVX1-NEXT:    retq
647 ;
648 ; AVX2-LABEL: @shuffle_v8i32_00500000
649 ; AVX2:       # BB#0:
650 ; AVX2-NEXT:    vmovdqa .LCPI60_0(%rip), %ymm1
651 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
652 ; AVX2-NEXT:    retq
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
655 }
656
657 define <8 x i32> @shuffle_v8i32_06000000(<8 x i32> %a, <8 x i32> %b) {
658 ; AVX1-LABEL: @shuffle_v8i32_06000000
659 ; AVX1:       # BB#0:
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
665 ; AVX1-NEXT:    retq
666 ;
667 ; AVX2-LABEL: @shuffle_v8i32_06000000
668 ; AVX2:       # BB#0:
669 ; AVX2-NEXT:    vmovdqa .LCPI61_0(%rip), %ymm1
670 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
671 ; AVX2-NEXT:    retq
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
674 }
675
676 define <8 x i32> @shuffle_v8i32_70000000(<8 x i32> %a, <8 x i32> %b) {
677 ; AVX1-LABEL: @shuffle_v8i32_70000000
678 ; AVX1:       # BB#0:
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
684 ; AVX1-NEXT:    retq
685 ;
686 ; AVX2-LABEL: @shuffle_v8i32_70000000
687 ; AVX2:       # BB#0:
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
694 ; AVX2-NEXT:    retq
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
697 }
698
699 define <8 x i32> @shuffle_v8i32_01014545(<8 x i32> %a, <8 x i32> %b) {
700 ; AVX1-LABEL: @shuffle_v8i32_01014545
701 ; AVX1:       # BB#0:
702 ; AVX1-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[0,0,2,2]
703 ; AVX1-NEXT:    retq
704 ;
705 ; AVX2-LABEL: @shuffle_v8i32_01014545
706 ; AVX2:       # BB#0:
707 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[0,1,0,1,4,5,4,5]
708 ; AVX2-NEXT:    retq
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
711 }
712
713 define <8 x i32> @shuffle_v8i32_00112233(<8 x i32> %a, <8 x i32> %b) {
714 ; AVX1-LABEL: @shuffle_v8i32_00112233
715 ; AVX1:       # BB#0:
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
719 ; AVX1-NEXT:    retq
720 ;
721 ; AVX2-LABEL: @shuffle_v8i32_00112233
722 ; AVX2:       # BB#0:
723 ; AVX2-NEXT:    vmovdqa .LCPI64_0(%rip), %ymm1
724 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
725 ; AVX2-NEXT:    retq
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
728 }
729
730 define <8 x i32> @shuffle_v8i32_00001111(<8 x i32> %a, <8 x i32> %b) {
731 ; AVX1-LABEL: @shuffle_v8i32_00001111
732 ; AVX1:       # BB#0:
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
736 ; AVX1-NEXT:    retq
737 ;
738 ; AVX2-LABEL: @shuffle_v8i32_00001111
739 ; AVX2:       # BB#0:
740 ; AVX2-NEXT:    vmovdqa .LCPI65_0(%rip), %ymm1
741 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
742 ; AVX2-NEXT:    retq
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
745 }
746
747 define <8 x i32> @shuffle_v8i32_81a3c5e7(<8 x i32> %a, <8 x i32> %b) {
748 ; AVX1-LABEL: @shuffle_v8i32_81a3c5e7
749 ; AVX1:       # BB#0:
750 ; AVX1-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
751 ; AVX1-NEXT:    retq
752 ;
753 ; AVX2-LABEL: @shuffle_v8i32_81a3c5e7
754 ; AVX2:       # BB#0:
755 ; AVX2-NEXT:    vpblendd {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
756 ; AVX2-NEXT:    retq
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
759 }
760
761 define <8 x i32> @shuffle_v8i32_08080808(<8 x i32> %a, <8 x i32> %b) {
762 ; AVX1-LABEL: @shuffle_v8i32_08080808
763 ; AVX1:       # BB#0:
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
768 ; AVX1-NEXT:    retq
769 ;
770 ; AVX2-LABEL: @shuffle_v8i32_08080808
771 ; AVX2:       # BB#0:
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]
776 ; AVX2-NEXT:    retq
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
779 }
780
781 define <8 x i32> @shuffle_v8i32_08084c4c(<8 x i32> %a, <8 x i32> %b) {
782 ; AVX1-LABEL: @shuffle_v8i32_08084c4c
783 ; AVX1:       # BB#0:
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]
786 ; AVX1-NEXT:    retq
787 ;
788 ; AVX2-LABEL: @shuffle_v8i32_08084c4c
789 ; AVX2:       # BB#0:
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]
793 ; AVX2-NEXT:    retq
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
796 }
797
798 define <8 x i32> @shuffle_v8i32_8823cc67(<8 x i32> %a, <8 x i32> %b) {
799 ; AVX1-LABEL: @shuffle_v8i32_8823cc67
800 ; AVX1:       # BB#0:
801 ; AVX1-NEXT:    vshufps {{.*}} # ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
802 ; AVX1-NEXT:    retq
803 ;
804 ; AVX2-LABEL: @shuffle_v8i32_8823cc67
805 ; AVX2:       # BB#0:
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]
808 ; AVX2-NEXT:    retq
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
811 }
812
813 define <8 x i32> @shuffle_v8i32_9832dc76(<8 x i32> %a, <8 x i32> %b) {
814 ; AVX1-LABEL: @shuffle_v8i32_9832dc76
815 ; AVX1:       # BB#0:
816 ; AVX1-NEXT:    vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
817 ; AVX1-NEXT:    retq
818 ;
819 ; AVX2-LABEL: @shuffle_v8i32_9832dc76
820 ; AVX2:       # BB#0:
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]
824 ; AVX2-NEXT:    retq
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
827 }
828
829 define <8 x i32> @shuffle_v8i32_9810dc54(<8 x i32> %a, <8 x i32> %b) {
830 ; AVX1-LABEL: @shuffle_v8i32_9810dc54
831 ; AVX1:       # BB#0:
832 ; AVX1-NEXT:    vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
833 ; AVX1-NEXT:    retq
834 ;
835 ; AVX2-LABEL: @shuffle_v8i32_9810dc54
836 ; AVX2:       # BB#0:
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]
840 ; AVX2-NEXT:    retq
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
843 }
844
845 define <8 x i32> @shuffle_v8i32_08194c5d(<8 x i32> %a, <8 x i32> %b) {
846 ; AVX1-LABEL: @shuffle_v8i32_08194c5d
847 ; AVX1:       # BB#0:
848 ; AVX1-NEXT:    vunpcklps {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
849 ; AVX1-NEXT:    retq
850 ;
851 ; AVX2-LABEL: @shuffle_v8i32_08194c5d
852 ; AVX2:       # BB#0:
853 ; AVX2-NEXT:    vpshufd {{.*}} # ymm1 = ymm1[0,0,2,1,4,4,6,5]
854 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[0,1,1,3,4,5,5,7]
855 ; AVX2-NEXT:    vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
856 ; AVX2-NEXT:    retq
857   %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>
858   ret <8 x i32> %shuffle
859 }
860
861 define <8 x i32> @shuffle_v8i32_2a3b6e7f(<8 x i32> %a, <8 x i32> %b) {
862 ; AVX1-LABEL: @shuffle_v8i32_2a3b6e7f
863 ; AVX1:       # BB#0:
864 ; AVX1-NEXT:    vunpckhps {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
865 ; AVX1-NEXT:    retq
866 ;
867 ; AVX2-LABEL: @shuffle_v8i32_2a3b6e7f
868 ; AVX2:       # BB#0:
869 ; AVX2-NEXT:    vpshufd {{.*}} # ymm1 = ymm1[0,2,2,3,4,6,6,7]
870 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[2,1,3,3,6,5,7,7]
871 ; AVX2-NEXT:    vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
872 ; AVX2-NEXT:    retq
873   %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>
874   ret <8 x i32> %shuffle
875 }
876
877 define <8 x i32> @shuffle_v8i32_08192a3b(<8 x i32> %a, <8 x i32> %b) {
878 ; AVX1-LABEL: @shuffle_v8i32_08192a3b
879 ; AVX1:       # BB#0:
880 ; AVX1-NEXT:    vpermilps {{.*}} # xmm2 = xmm1[0,2,2,3]
881 ; AVX1-NEXT:    vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
882 ; AVX1-NEXT:    vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
883 ; AVX1-NEXT:    vpermilps {{.*}} # xmm1 = xmm1[0,0,2,1]
884 ; AVX1-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
885 ; AVX1-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
886 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
887 ; AVX1-NEXT:    retq
888 ;
889 ; AVX2-LABEL: @shuffle_v8i32_08192a3b
890 ; AVX2:       # BB#0:
891 ; AVX2-NEXT:    vmovdqa .LCPI74_0(%rip), %ymm2
892 ; AVX2-NEXT:    vpermd %ymm1, %ymm2, %ymm1
893 ; AVX2-NEXT:    vmovdqa .LCPI74_1(%rip), %ymm2
894 ; AVX2-NEXT:    vpermd %ymm0, %ymm2, %ymm0
895 ; AVX2-NEXT:    vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
896 ; AVX2-NEXT:    retq
897   %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>
898   ret <8 x i32> %shuffle
899 }
900
901 define <8 x i32> @shuffle_v8i32_08991abb(<8 x i32> %a, <8 x i32> %b) {
902 ; AVX1-LABEL: @shuffle_v8i32_08991abb
903 ; AVX1:       # BB#0:
904 ; AVX1-NEXT:    vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
905 ; AVX1-NEXT:    vpermilps {{.*}} # xmm3 = xmm1[0,2,3,3]
906 ; AVX1-NEXT:    vblendps {{.*}} # xmm2 = xmm2[0],xmm3[1,2,3]
907 ; AVX1-NEXT:    vunpcklps {{.*}} # xmm1 = xmm1[0,0,1,1]
908 ; AVX1-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
909 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
910 ; AVX1-NEXT:    retq
911 ;
912 ; AVX2-LABEL: @shuffle_v8i32_08991abb
913 ; AVX2:       # BB#0:
914 ; AVX2-NEXT:    vmovdqa .LCPI75_0(%rip), %ymm2
915 ; AVX2-NEXT:    vpermd %ymm0, %ymm2, %ymm0
916 ; AVX2-NEXT:    vmovdqa .LCPI75_1(%rip), %ymm2
917 ; AVX2-NEXT:    vpermd %ymm1, %ymm2, %ymm1
918 ; AVX2-NEXT:    vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
919 ; AVX2-NEXT:    retq
920   %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>
921   ret <8 x i32> %shuffle
922 }
923
924 define <8 x i32> @shuffle_v8i32_091b2d3f(<8 x i32> %a, <8 x i32> %b) {
925 ; AVX1-LABEL: @shuffle_v8i32_091b2d3f
926 ; AVX1:       # BB#0:
927 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
928 ; AVX1-NEXT:    vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
929 ; AVX1-NEXT:    vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
930 ; AVX1-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
931 ; AVX1-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
932 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
933 ; AVX1-NEXT:    retq
934 ;
935 ; AVX2-LABEL: @shuffle_v8i32_091b2d3f
936 ; AVX2:       # BB#0:
937 ; AVX2-NEXT:    vmovdqa .LCPI76_0(%rip), %ymm2
938 ; AVX2-NEXT:    vpermd %ymm0, %ymm2, %ymm0
939 ; AVX2-NEXT:    vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
940 ; AVX2-NEXT:    retq
941   %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>
942   ret <8 x i32> %shuffle
943 }
944
945 define <8 x i32> @shuffle_v8i32_09ab1def(<8 x i32> %a, <8 x i32> %b) {
946 ; AVX1-LABEL: @shuffle_v8i32_09ab1def
947 ; AVX1:       # BB#0:
948 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
949 ; AVX1-NEXT:    vpermilps {{.*}} # xmm3 = xmm0[1,1,2,3]
950 ; AVX1-NEXT:    vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1,2,3]
951 ; AVX1-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
952 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
953 ; AVX1-NEXT:    retq
954 ;
955 ; AVX2-LABEL: @shuffle_v8i32_09ab1def
956 ; AVX2:       # BB#0:
957 ; AVX2-NEXT:    vmovdqa .LCPI77_0(%rip), %ymm2
958 ; AVX2-NEXT:    vpermd %ymm0, %ymm2, %ymm0
959 ; AVX2-NEXT:    vpblendd {{.*}} # ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
960 ; AVX2-NEXT:    retq
961   %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>
962   ret <8 x i32> %shuffle
963 }
964
965 define <8 x i32> @shuffle_v8i32_00014445(<8 x i32> %a, <8 x i32> %b) {
966 ; AVX1-LABEL: @shuffle_v8i32_00014445
967 ; AVX1:       # BB#0:
968 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
969 ; AVX1-NEXT:    retq
970 ;
971 ; AVX2-LABEL: @shuffle_v8i32_00014445
972 ; AVX2:       # BB#0:
973 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
974 ; AVX2-NEXT:    retq
975   %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>
976   ret <8 x i32> %shuffle
977 }
978
979 define <8 x i32> @shuffle_v8i32_00204464(<8 x i32> %a, <8 x i32> %b) {
980 ; AVX1-LABEL: @shuffle_v8i32_00204464
981 ; AVX1:       # BB#0:
982 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
983 ; AVX1-NEXT:    retq
984 ;
985 ; AVX2-LABEL: @shuffle_v8i32_00204464
986 ; AVX2:       # BB#0:
987 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
988 ; AVX2-NEXT:    retq
989   %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>
990   ret <8 x i32> %shuffle
991 }
992
993 define <8 x i32> @shuffle_v8i32_03004744(<8 x i32> %a, <8 x i32> %b) {
994 ; AVX1-LABEL: @shuffle_v8i32_03004744
995 ; AVX1:       # BB#0:
996 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
997 ; AVX1-NEXT:    retq
998 ;
999 ; AVX2-LABEL: @shuffle_v8i32_03004744
1000 ; AVX2:       # BB#0:
1001 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
1002 ; AVX2-NEXT:    retq
1003   %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>
1004   ret <8 x i32> %shuffle
1005 }
1006
1007 define <8 x i32> @shuffle_v8i32_10005444(<8 x i32> %a, <8 x i32> %b) {
1008 ; AVX1-LABEL: @shuffle_v8i32_10005444
1009 ; AVX1:       # BB#0:
1010 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
1011 ; AVX1-NEXT:    retq
1012 ;
1013 ; AVX2-LABEL: @shuffle_v8i32_10005444
1014 ; AVX2:       # BB#0:
1015 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
1016 ; AVX2-NEXT:    retq
1017   %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>
1018   ret <8 x i32> %shuffle
1019 }
1020
1021 define <8 x i32> @shuffle_v8i32_22006644(<8 x i32> %a, <8 x i32> %b) {
1022 ; AVX1-LABEL: @shuffle_v8i32_22006644
1023 ; AVX1:       # BB#0:
1024 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
1025 ; AVX1-NEXT:    retq
1026 ;
1027 ; AVX2-LABEL: @shuffle_v8i32_22006644
1028 ; AVX2:       # BB#0:
1029 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
1030 ; AVX2-NEXT:    retq
1031   %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>
1032   ret <8 x i32> %shuffle
1033 }
1034
1035 define <8 x i32> @shuffle_v8i32_33307774(<8 x i32> %a, <8 x i32> %b) {
1036 ; AVX1-LABEL: @shuffle_v8i32_33307774
1037 ; AVX1:       # BB#0:
1038 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
1039 ; AVX1-NEXT:    retq
1040 ;
1041 ; AVX2-LABEL: @shuffle_v8i32_33307774
1042 ; AVX2:       # BB#0:
1043 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
1044 ; AVX2-NEXT:    retq
1045   %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>
1046   ret <8 x i32> %shuffle
1047 }
1048
1049 define <8 x i32> @shuffle_v8i32_32107654(<8 x i32> %a, <8 x i32> %b) {
1050 ; AVX1-LABEL: @shuffle_v8i32_32107654
1051 ; AVX1:       # BB#0:
1052 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
1053 ; AVX1-NEXT:    retq
1054 ;
1055 ; AVX2-LABEL: @shuffle_v8i32_32107654
1056 ; AVX2:       # BB#0:
1057 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
1058 ; AVX2-NEXT:    retq
1059   %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>
1060   ret <8 x i32> %shuffle
1061 }
1062
1063 define <8 x i32> @shuffle_v8i32_00234467(<8 x i32> %a, <8 x i32> %b) {
1064 ; AVX1-LABEL: @shuffle_v8i32_00234467
1065 ; AVX1:       # BB#0:
1066 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1067 ; AVX1-NEXT:    retq
1068 ;
1069 ; AVX2-LABEL: @shuffle_v8i32_00234467
1070 ; AVX2:       # BB#0:
1071 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1072 ; AVX2-NEXT:    retq
1073   %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>
1074   ret <8 x i32> %shuffle
1075 }
1076
1077 define <8 x i32> @shuffle_v8i32_00224466(<8 x i32> %a, <8 x i32> %b) {
1078 ; AVX1-LABEL: @shuffle_v8i32_00224466
1079 ; AVX1:       # BB#0:
1080 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
1081 ; AVX1-NEXT:    retq
1082 ;
1083 ; AVX2-LABEL: @shuffle_v8i32_00224466
1084 ; AVX2:       # BB#0:
1085 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
1086 ; AVX2-NEXT:    retq
1087   %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>
1088   ret <8 x i32> %shuffle
1089 }
1090
1091 define <8 x i32> @shuffle_v8i32_10325476(<8 x i32> %a, <8 x i32> %b) {
1092 ; AVX1-LABEL: @shuffle_v8i32_10325476
1093 ; AVX1:       # BB#0:
1094 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
1095 ; AVX1-NEXT:    retq
1096 ;
1097 ; AVX2-LABEL: @shuffle_v8i32_10325476
1098 ; AVX2:       # BB#0:
1099 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
1100 ; AVX2-NEXT:    retq
1101   %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>
1102   ret <8 x i32> %shuffle
1103 }
1104
1105 define <8 x i32> @shuffle_v8i32_11335577(<8 x i32> %a, <8 x i32> %b) {
1106 ; AVX1-LABEL: @shuffle_v8i32_11335577
1107 ; AVX1:       # BB#0:
1108 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
1109 ; AVX1-NEXT:    retq
1110 ;
1111 ; AVX2-LABEL: @shuffle_v8i32_11335577
1112 ; AVX2:       # BB#0:
1113 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
1114 ; AVX2-NEXT:    retq
1115   %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>
1116   ret <8 x i32> %shuffle
1117 }
1118
1119 define <8 x i32> @shuffle_v8i32_10235467(<8 x i32> %a, <8 x i32> %b) {
1120 ; AVX1-LABEL: @shuffle_v8i32_10235467
1121 ; AVX1:       # BB#0:
1122 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
1123 ; AVX1-NEXT:    retq
1124 ;
1125 ; AVX2-LABEL: @shuffle_v8i32_10235467
1126 ; AVX2:       # BB#0:
1127 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
1128 ; AVX2-NEXT:    retq
1129   %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>
1130   ret <8 x i32> %shuffle
1131 }
1132
1133 define <8 x i32> @shuffle_v8i32_10225466(<8 x i32> %a, <8 x i32> %b) {
1134 ; AVX1-LABEL: @shuffle_v8i32_10225466
1135 ; AVX1:       # BB#0:
1136 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
1137 ; AVX1-NEXT:    retq
1138 ;
1139 ; AVX2-LABEL: @shuffle_v8i32_10225466
1140 ; AVX2:       # BB#0:
1141 ; AVX2-NEXT:    vpshufd {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
1142 ; AVX2-NEXT:    retq
1143   %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>
1144   ret <8 x i32> %shuffle
1145 }
1146
1147 define <8 x i32> @shuffle_v8i32_00015444(<8 x i32> %a, <8 x i32> %b) {
1148 ; AVX1-LABEL: @shuffle_v8i32_00015444
1149 ; AVX1:       # BB#0:
1150 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,5,4,4,4]
1151 ; AVX1-NEXT:    retq
1152 ;
1153 ; AVX2-LABEL: @shuffle_v8i32_00015444
1154 ; AVX2:       # BB#0:
1155 ; AVX2-NEXT:    vmovdqa .LCPI91_0(%rip), %ymm1
1156 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1157 ; AVX2-NEXT:    retq
1158   %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>
1159   ret <8 x i32> %shuffle
1160 }
1161
1162 define <8 x i32> @shuffle_v8i32_00204644(<8 x i32> %a, <8 x i32> %b) {
1163 ; AVX1-LABEL: @shuffle_v8i32_00204644
1164 ; AVX1:       # BB#0:
1165 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,6,4,4]
1166 ; AVX1-NEXT:    retq
1167 ;
1168 ; AVX2-LABEL: @shuffle_v8i32_00204644
1169 ; AVX2:       # BB#0:
1170 ; AVX2-NEXT:    vmovdqa .LCPI92_0(%rip), %ymm1
1171 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1172 ; AVX2-NEXT:    retq
1173   %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>
1174   ret <8 x i32> %shuffle
1175 }
1176
1177 define <8 x i32> @shuffle_v8i32_03004474(<8 x i32> %a, <8 x i32> %b) {
1178 ; AVX1-LABEL: @shuffle_v8i32_03004474
1179 ; AVX1:       # BB#0:
1180 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,4,7,4]
1181 ; AVX1-NEXT:    retq
1182 ;
1183 ; AVX2-LABEL: @shuffle_v8i32_03004474
1184 ; AVX2:       # BB#0:
1185 ; AVX2-NEXT:    vmovdqa .LCPI93_0(%rip), %ymm1
1186 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1187 ; AVX2-NEXT:    retq
1188   %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>
1189   ret <8 x i32> %shuffle
1190 }
1191
1192 define <8 x i32> @shuffle_v8i32_10004444(<8 x i32> %a, <8 x i32> %b) {
1193 ; AVX1-LABEL: @shuffle_v8i32_10004444
1194 ; AVX1:       # BB#0:
1195 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,4,4,4,4]
1196 ; AVX1-NEXT:    retq
1197 ;
1198 ; AVX2-LABEL: @shuffle_v8i32_10004444
1199 ; AVX2:       # BB#0:
1200 ; AVX2-NEXT:    vmovdqa .LCPI94_0(%rip), %ymm1
1201 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1202 ; AVX2-NEXT:    retq
1203   %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>
1204   ret <8 x i32> %shuffle
1205 }
1206
1207 define <8 x i32> @shuffle_v8i32_22006446(<8 x i32> %a, <8 x i32> %b) {
1208 ; AVX1-LABEL: @shuffle_v8i32_22006446
1209 ; AVX1:       # BB#0:
1210 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,4,4,6]
1211 ; AVX1-NEXT:    retq
1212 ;
1213 ; AVX2-LABEL: @shuffle_v8i32_22006446
1214 ; AVX2:       # BB#0:
1215 ; AVX2-NEXT:    vmovdqa .LCPI95_0(%rip), %ymm1
1216 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1217 ; AVX2-NEXT:    retq
1218   %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>
1219   ret <8 x i32> %shuffle
1220 }
1221
1222 define <8 x i32> @shuffle_v8i32_33307474(<8 x i32> %a, <8 x i32> %b) {
1223 ; AVX1-LABEL: @shuffle_v8i32_33307474
1224 ; AVX1:       # BB#0:
1225 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,4,7,4]
1226 ; AVX1-NEXT:    retq
1227 ;
1228 ; AVX2-LABEL: @shuffle_v8i32_33307474
1229 ; AVX2:       # BB#0:
1230 ; AVX2-NEXT:    vmovdqa .LCPI96_0(%rip), %ymm1
1231 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1232 ; AVX2-NEXT:    retq
1233   %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>
1234   ret <8 x i32> %shuffle
1235 }
1236
1237 define <8 x i32> @shuffle_v8i32_32104567(<8 x i32> %a, <8 x i32> %b) {
1238 ; AVX1-LABEL: @shuffle_v8i32_32104567
1239 ; AVX1:       # BB#0:
1240 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,4,5,6,7]
1241 ; AVX1-NEXT:    retq
1242 ;
1243 ; AVX2-LABEL: @shuffle_v8i32_32104567
1244 ; AVX2:       # BB#0:
1245 ; AVX2-NEXT:    vmovdqa .LCPI97_0(%rip), %ymm1
1246 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1247 ; AVX2-NEXT:    retq
1248   %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>
1249   ret <8 x i32> %shuffle
1250 }
1251
1252 define <8 x i32> @shuffle_v8i32_00236744(<8 x i32> %a, <8 x i32> %b) {
1253 ; AVX1-LABEL: @shuffle_v8i32_00236744
1254 ; AVX1:       # BB#0:
1255 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,6,7,4,4]
1256 ; AVX1-NEXT:    retq
1257 ;
1258 ; AVX2-LABEL: @shuffle_v8i32_00236744
1259 ; AVX2:       # BB#0:
1260 ; AVX2-NEXT:    vmovdqa .LCPI98_0(%rip), %ymm1
1261 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1262 ; AVX2-NEXT:    retq
1263   %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>
1264   ret <8 x i32> %shuffle
1265 }
1266
1267 define <8 x i32> @shuffle_v8i32_00226644(<8 x i32> %a, <8 x i32> %b) {
1268 ; AVX1-LABEL: @shuffle_v8i32_00226644
1269 ; AVX1:       # BB#0:
1270 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,6,6,4,4]
1271 ; AVX1-NEXT:    retq
1272 ;
1273 ; AVX2-LABEL: @shuffle_v8i32_00226644
1274 ; AVX2:       # BB#0:
1275 ; AVX2-NEXT:    vmovdqa .LCPI99_0(%rip), %ymm1
1276 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1277 ; AVX2-NEXT:    retq
1278   %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>
1279   ret <8 x i32> %shuffle
1280 }
1281
1282 define <8 x i32> @shuffle_v8i32_10324567(<8 x i32> %a, <8 x i32> %b) {
1283 ; AVX1-LABEL: @shuffle_v8i32_10324567
1284 ; AVX1:       # BB#0:
1285 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,6,7]
1286 ; AVX1-NEXT:    retq
1287 ;
1288 ; AVX2-LABEL: @shuffle_v8i32_10324567
1289 ; AVX2:       # BB#0:
1290 ; AVX2-NEXT:    vmovdqa .LCPI100_0(%rip), %ymm1
1291 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1292 ; AVX2-NEXT:    retq
1293   %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>
1294   ret <8 x i32> %shuffle
1295 }
1296
1297 define <8 x i32> @shuffle_v8i32_11334567(<8 x i32> %a, <8 x i32> %b) {
1298 ; AVX1-LABEL: @shuffle_v8i32_11334567
1299 ; AVX1:       # BB#0:
1300 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,4,5,6,7]
1301 ; AVX1-NEXT:    retq
1302 ;
1303 ; AVX2-LABEL: @shuffle_v8i32_11334567
1304 ; AVX2:       # BB#0:
1305 ; AVX2-NEXT:    vmovdqa .LCPI101_0(%rip), %ymm1
1306 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1307 ; AVX2-NEXT:    retq
1308   %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>
1309   ret <8 x i32> %shuffle
1310 }
1311
1312 define <8 x i32> @shuffle_v8i32_01235467(<8 x i32> %a, <8 x i32> %b) {
1313 ; AVX1-LABEL: @shuffle_v8i32_01235467
1314 ; AVX1:       # BB#0:
1315 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,7]
1316 ; AVX1-NEXT:    retq
1317 ;
1318 ; AVX2-LABEL: @shuffle_v8i32_01235467
1319 ; AVX2:       # BB#0:
1320 ; AVX2-NEXT:    vmovdqa .LCPI102_0(%rip), %ymm1
1321 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1322 ; AVX2-NEXT:    retq
1323   %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>
1324   ret <8 x i32> %shuffle
1325 }
1326
1327 define <8 x i32> @shuffle_v8i32_01235466(<8 x i32> %a, <8 x i32> %b) {
1328 ; AVX1-LABEL: @shuffle_v8i32_01235466
1329 ; AVX1:       # BB#0:
1330 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,1,2,3,5,4,6,6]
1331 ; AVX1-NEXT:    retq
1332 ;
1333 ; AVX2-LABEL: @shuffle_v8i32_01235466
1334 ; AVX2:       # BB#0:
1335 ; AVX2-NEXT:    vmovdqa .LCPI103_0(%rip), %ymm1
1336 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1337 ; AVX2-NEXT:    retq
1338   %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>
1339   ret <8 x i32> %shuffle
1340 }
1341
1342 define <8 x i32> @shuffle_v8i32_002u6u44(<8 x i32> %a, <8 x i32> %b) {
1343 ; AVX1-LABEL: @shuffle_v8i32_002u6u44
1344 ; AVX1:       # BB#0:
1345 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,u,6,u,4,4]
1346 ; AVX1-NEXT:    retq
1347 ;
1348 ; AVX2-LABEL: @shuffle_v8i32_002u6u44
1349 ; AVX2:       # BB#0:
1350 ; AVX2-NEXT:    vmovdqa .LCPI104_0(%rip), %ymm1
1351 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1352 ; AVX2-NEXT:    retq
1353   %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>
1354   ret <8 x i32> %shuffle
1355 }
1356
1357 define <8 x i32> @shuffle_v8i32_00uu66uu(<8 x i32> %a, <8 x i32> %b) {
1358 ; AVX1-LABEL: @shuffle_v8i32_00uu66uu
1359 ; AVX1:       # BB#0:
1360 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,u,u,6,6,u,u]
1361 ; AVX1-NEXT:    retq
1362 ;
1363 ; AVX2-LABEL: @shuffle_v8i32_00uu66uu
1364 ; AVX2:       # BB#0:
1365 ; AVX2-NEXT:    vmovdqa .LCPI105_0(%rip), %ymm1
1366 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1367 ; AVX2-NEXT:    retq
1368   %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>
1369   ret <8 x i32> %shuffle
1370 }
1371
1372 define <8 x i32> @shuffle_v8i32_103245uu(<8 x i32> %a, <8 x i32> %b) {
1373 ; AVX1-LABEL: @shuffle_v8i32_103245uu
1374 ; AVX1:       # BB#0:
1375 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,4,5,u,u]
1376 ; AVX1-NEXT:    retq
1377 ;
1378 ; AVX2-LABEL: @shuffle_v8i32_103245uu
1379 ; AVX2:       # BB#0:
1380 ; AVX2-NEXT:    vmovdqa .LCPI106_0(%rip), %ymm1
1381 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1382 ; AVX2-NEXT:    retq
1383   %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>
1384   ret <8 x i32> %shuffle
1385 }
1386
1387 define <8 x i32> @shuffle_v8i32_1133uu67(<8 x i32> %a, <8 x i32> %b) {
1388 ; AVX1-LABEL: @shuffle_v8i32_1133uu67
1389 ; AVX1:       # BB#0:
1390 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,u,u,6,7]
1391 ; AVX1-NEXT:    retq
1392 ;
1393 ; AVX2-LABEL: @shuffle_v8i32_1133uu67
1394 ; AVX2:       # BB#0:
1395 ; AVX2-NEXT:    vmovdqa .LCPI107_0(%rip), %ymm1
1396 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1397 ; AVX2-NEXT:    retq
1398   %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>
1399   ret <8 x i32> %shuffle
1400 }
1401
1402 define <8 x i32> @shuffle_v8i32_0uu354uu(<8 x i32> %a, <8 x i32> %b) {
1403 ; AVX1-LABEL: @shuffle_v8i32_0uu354uu
1404 ; AVX1:       # BB#0:
1405 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,u,u,3,5,4,u,u]
1406 ; AVX1-NEXT:    retq
1407 ;
1408 ; AVX2-LABEL: @shuffle_v8i32_0uu354uu
1409 ; AVX2:       # BB#0:
1410 ; AVX2-NEXT:    vmovdqa .LCPI108_0(%rip), %ymm1
1411 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1412 ; AVX2-NEXT:    retq
1413   %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>
1414   ret <8 x i32> %shuffle
1415 }
1416
1417 define <8 x i32> @shuffle_v8i32_uuu3uu66(<8 x i32> %a, <8 x i32> %b) {
1418 ; AVX1-LABEL: @shuffle_v8i32_uuu3uu66
1419 ; AVX1:       # BB#0:
1420 ; AVX1-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[u,u,u,3,u,u,6,6]
1421 ; AVX1-NEXT:    retq
1422 ;
1423 ; AVX2-LABEL: @shuffle_v8i32_uuu3uu66
1424 ; AVX2:       # BB#0:
1425 ; AVX2-NEXT:    vmovdqa .LCPI109_0(%rip), %ymm1
1426 ; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1427 ; AVX2-NEXT:    retq
1428   %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>
1429   ret <8 x i32> %shuffle
1430 }