[x86] Introduce tests covering the gamut of 256-bit vector shuffling.
[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 {{.*}} # ymm1 = ymm0[1,0,0,0,5,4,4,4]
385 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
386 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
387 ; ALL-NEXT:    retq
388   %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>
389   ret <8 x float> %shuffle
390 }
391
392 define <8 x float> @shuffle_v8f32_00204644(<8 x float> %a, <8 x float> %b) {
393 ; ALL-LABEL: @shuffle_v8f32_00204644
394 ; ALL:       # BB#0:
395 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,2,0,0,4,6,4,4]
396 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
397 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
398 ; ALL-NEXT:    retq
399   %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>
400   ret <8 x float> %shuffle
401 }
402
403 define <8 x float> @shuffle_v8f32_03004474(<8 x float> %a, <8 x float> %b) {
404 ; ALL-LABEL: @shuffle_v8f32_03004474
405 ; ALL:       # BB#0:
406 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,0,3,0,4,4,7,4]
407 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
408 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
409 ; ALL-NEXT:    retq
410   %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>
411   ret <8 x float> %shuffle
412 }
413
414 define <8 x float> @shuffle_v8f32_10004444(<8 x float> %a, <8 x float> %b) {
415 ; ALL-LABEL: @shuffle_v8f32_10004444
416 ; ALL:       # BB#0:
417 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,0,0,0,4,4,4,4]
418 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
419 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
420 ; ALL-NEXT:    retq
421   %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>
422   ret <8 x float> %shuffle
423 }
424
425 define <8 x float> @shuffle_v8f32_22006446(<8 x float> %a, <8 x float> %b) {
426 ; ALL-LABEL: @shuffle_v8f32_22006446
427 ; ALL:       # BB#0:
428 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,0,0,2,6,4,4,6]
429 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
430 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
431 ; ALL-NEXT:    retq
432   %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>
433   ret <8 x float> %shuffle
434 }
435
436 define <8 x float> @shuffle_v8f32_33307474(<8 x float> %a, <8 x float> %b) {
437 ; ALL-LABEL: @shuffle_v8f32_33307474
438 ; ALL:       # BB#0:
439 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[3,0,3,0,7,4,7,4]
440 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
441 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
442 ; ALL-NEXT:    retq
443   %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>
444   ret <8 x float> %shuffle
445 }
446
447 define <8 x float> @shuffle_v8f32_32104567(<8 x float> %a, <8 x float> %b) {
448 ; ALL-LABEL: @shuffle_v8f32_32104567
449 ; ALL:       # BB#0:
450 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[3,2,1,0,7,6,5,4]
451 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
452 ; ALL-NEXT:    retq
453   %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>
454   ret <8 x float> %shuffle
455 }
456
457 define <8 x float> @shuffle_v8f32_00236744(<8 x float> %a, <8 x float> %b) {
458 ; ALL-LABEL: @shuffle_v8f32_00236744
459 ; ALL:       # BB#0:
460 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,3,0,0,6,7,4,4]
461 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
462 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
463 ; ALL-NEXT:    retq
464   %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>
465   ret <8 x float> %shuffle
466 }
467
468 define <8 x float> @shuffle_v8f32_00226644(<8 x float> %a, <8 x float> %b) {
469 ; ALL-LABEL: @shuffle_v8f32_00226644
470 ; ALL:       # BB#0:
471 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,2,0,0,6,6,4,4]
472 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
473 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
474 ; ALL-NEXT:    retq
475   %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>
476   ret <8 x float> %shuffle
477 }
478
479 define <8 x float> @shuffle_v8f32_10324567(<8 x float> %a, <8 x float> %b) {
480 ; ALL-LABEL: @shuffle_v8f32_10324567
481 ; ALL:       # BB#0:
482 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,3,2,5,4,7,6]
483 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
484 ; ALL-NEXT:    retq
485   %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>
486   ret <8 x float> %shuffle
487 }
488
489 define <8 x float> @shuffle_v8f32_11334567(<8 x float> %a, <8 x float> %b) {
490 ; ALL-LABEL: @shuffle_v8f32_11334567
491 ; ALL:       # BB#0:
492 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,1,3,3,5,5,7,7]
493 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
494 ; ALL-NEXT:    retq
495   %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>
496   ret <8 x float> %shuffle
497 }
498
499 define <8 x float> @shuffle_v8f32_01235467(<8 x float> %a, <8 x float> %b) {
500 ; ALL-LABEL: @shuffle_v8f32_01235467
501 ; ALL:       # BB#0:
502 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,2,3,5,4,6,7]
503 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
504 ; ALL-NEXT:    retq
505   %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>
506   ret <8 x float> %shuffle
507 }
508
509 define <8 x float> @shuffle_v8f32_01235466(<8 x float> %a, <8 x float> %b) {
510 ; ALL-LABEL: @shuffle_v8f32_01235466
511 ; ALL:       # BB#0:
512 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,2,2,5,4,6,6]
513 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
514 ; ALL-NEXT:    retq
515   %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>
516   ret <8 x float> %shuffle
517 }
518
519 define <8 x float> @shuffle_v8f32_002u6u44(<8 x float> %a, <8 x float> %b) {
520 ; ALL-LABEL: @shuffle_v8f32_002u6u44
521 ; ALL:       # BB#0:
522 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,1,0,0,6,5,4,4]
523 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
524 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
525 ; ALL-NEXT:    retq
526   %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>
527   ret <8 x float> %shuffle
528 }
529
530 define <8 x float> @shuffle_v8f32_00uu66uu(<8 x float> %a, <8 x float> %b) {
531 ; ALL-LABEL: @shuffle_v8f32_00uu66uu
532 ; ALL:       # BB#0:
533 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,2,2,3,6,6,6,7]
534 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
535 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
536 ; ALL-NEXT:    retq
537   %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>
538   ret <8 x float> %shuffle
539 }
540
541 define <8 x float> @shuffle_v8f32_103245uu(<8 x float> %a, <8 x float> %b) {
542 ; ALL-LABEL: @shuffle_v8f32_103245uu
543 ; ALL:       # BB#0:
544 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,3,2,5,4,7,6]
545 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
546 ; ALL-NEXT:    retq
547   %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>
548   ret <8 x float> %shuffle
549 }
550
551 define <8 x float> @shuffle_v8f32_1133uu67(<8 x float> %a, <8 x float> %b) {
552 ; ALL-LABEL: @shuffle_v8f32_1133uu67
553 ; ALL:       # BB#0:
554 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,1,3,3,5,5,7,7]
555 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
556 ; ALL-NEXT:    retq
557   %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>
558   ret <8 x float> %shuffle
559 }
560
561 define <8 x float> @shuffle_v8f32_0uu354uu(<8 x float> %a, <8 x float> %b) {
562 ; ALL-LABEL: @shuffle_v8f32_0uu354uu
563 ; ALL:       # BB#0:
564 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,2,3,5,4,6,7]
565 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
566 ; ALL-NEXT:    retq
567   %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>
568   ret <8 x float> %shuffle
569 }
570
571 define <8 x float> @shuffle_v8f32_uuu3uu66(<8 x float> %a, <8 x float> %b) {
572 ; ALL-LABEL: @shuffle_v8f32_uuu3uu66
573 ; ALL:       # BB#0:
574 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,1,2,2,4,5,6,6]
575 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
576 ; ALL-NEXT:    retq
577   %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>
578   ret <8 x float> %shuffle
579 }
580
581 define <8 x i32> @shuffle_v8i32_00000000(<8 x i32> %a, <8 x i32> %b) {
582 ; ALL-LABEL: @shuffle_v8i32_00000000
583 ; ALL:       # BB#0:
584 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
585 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
586 ; ALL-NEXT:    retq
587   %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>
588   ret <8 x i32> %shuffle
589 }
590
591 define <8 x i32> @shuffle_v8i32_00000010(<8 x i32> %a, <8 x i32> %b) {
592 ; ALL-LABEL: @shuffle_v8i32_00000010
593 ; ALL:       # BB#0:
594 ; ALL-NEXT:    vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
595 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,1,0]
596 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
597 ; ALL-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 0, i32 1, i32 0>
599   ret <8 x i32> %shuffle
600 }
601
602 define <8 x i32> @shuffle_v8i32_00000200(<8 x i32> %a, <8 x i32> %b) {
603 ; ALL-LABEL: @shuffle_v8i32_00000200
604 ; ALL:       # BB#0:
605 ; ALL-NEXT:    vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
606 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,2,0,0]
607 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
608 ; ALL-NEXT:    retq
609   %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>
610   ret <8 x i32> %shuffle
611 }
612
613 define <8 x i32> @shuffle_v8i32_00003000(<8 x i32> %a, <8 x i32> %b) {
614 ; ALL-LABEL: @shuffle_v8i32_00003000
615 ; ALL:       # BB#0:
616 ; ALL-NEXT:    vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
617 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[3,0,0,0]
618 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
619 ; ALL-NEXT:    retq
620   %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>
621   ret <8 x i32> %shuffle
622 }
623
624 define <8 x i32> @shuffle_v8i32_00040000(<8 x i32> %a, <8 x i32> %b) {
625 ; ALL-LABEL: @shuffle_v8i32_00040000
626 ; ALL:       # BB#0:
627 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm1
628 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm1[0,0],xmm0[0,0]
629 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm0[0,0],xmm1[2,0]
630 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
631 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
632 ; ALL-NEXT:    retq
633   %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>
634   ret <8 x i32> %shuffle
635 }
636
637 define <8 x i32> @shuffle_v8i32_00500000(<8 x i32> %a, <8 x i32> %b) {
638 ; ALL-LABEL: @shuffle_v8i32_00500000
639 ; ALL:       # BB#0:
640 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm1
641 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm1[1,0],xmm0[0,0]
642 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm0[0,0],xmm1[0,2]
643 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
644 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
645 ; ALL-NEXT:    retq
646   %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>
647   ret <8 x i32> %shuffle
648 }
649
650 define <8 x i32> @shuffle_v8i32_06000000(<8 x i32> %a, <8 x i32> %b) {
651 ; ALL-LABEL: @shuffle_v8i32_06000000
652 ; ALL:       # BB#0:
653 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm1
654 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm1[2,0],xmm0[0,0]
655 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm1[2,0],xmm0[0,0]
656 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
657 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
658 ; ALL-NEXT:    retq
659   %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>
660   ret <8 x i32> %shuffle
661 }
662
663 define <8 x i32> @shuffle_v8i32_70000000(<8 x i32> %a, <8 x i32> %b) {
664 ; ALL-LABEL: @shuffle_v8i32_70000000
665 ; ALL:       # BB#0:
666 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm1
667 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm1[3,0],xmm0[0,0]
668 ; ALL-NEXT:    vshufps {{.*}} # xmm1 = xmm1[0,2],xmm0[0,0]
669 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,0,0,0]
670 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
671 ; ALL-NEXT:    retq
672   %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>
673   ret <8 x i32> %shuffle
674 }
675
676 define <8 x i32> @shuffle_v8i32_01014545(<8 x i32> %a, <8 x i32> %b) {
677 ; ALL-LABEL: @shuffle_v8i32_01014545
678 ; ALL:       # BB#0:
679 ; ALL-NEXT:    vpermilpd {{.*}} # ymm0 = ymm0[0,0,2,2]
680 ; ALL-NEXT:    retq
681   %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>
682   ret <8 x i32> %shuffle
683 }
684
685 define <8 x i32> @shuffle_v8i32_00112233(<8 x i32> %a, <8 x i32> %b) {
686 ; ALL-LABEL: @shuffle_v8i32_00112233
687 ; ALL:       # BB#0:
688 ; ALL-NEXT:    vunpcklps {{.*}} # xmm1 = xmm0[0,0,1,1]
689 ; ALL-NEXT:    vunpckhps {{.*}} # xmm0 = xmm0[2,2,3,3]
690 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
691 ; ALL-NEXT:    retq
692   %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>
693   ret <8 x i32> %shuffle
694 }
695
696 define <8 x i32> @shuffle_v8i32_00001111(<8 x i32> %a, <8 x i32> %b) {
697 ; ALL-LABEL: @shuffle_v8i32_00001111
698 ; ALL:       # BB#0:
699 ; ALL-NEXT:    vpermilps {{.*}} # xmm1 = xmm0[0,0,0,0]
700 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[1,1,1,1]
701 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
702 ; ALL-NEXT:    retq
703   %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>
704   ret <8 x i32> %shuffle
705 }
706
707 define <8 x i32> @shuffle_v8i32_81a3c5e7(<8 x i32> %a, <8 x i32> %b) {
708 ; ALL-LABEL: @shuffle_v8i32_81a3c5e7
709 ; ALL:       # BB#0:
710 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
711 ; ALL-NEXT:    retq
712   %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>
713   ret <8 x i32> %shuffle
714 }
715
716 define <8 x i32> @shuffle_v8i32_08080808(<8 x i32> %a, <8 x i32> %b) {
717 ; ALL-LABEL: @shuffle_v8i32_08080808
718 ; ALL:       # BB#0:
719 ; ALL-NEXT:    vpermilps {{.*}} # xmm1 = xmm1[0,0,2,0]
720 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,1,0,3]
721 ; ALL-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
722 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
723 ; ALL-NEXT:    retq
724   %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>
725   ret <8 x i32> %shuffle
726 }
727
728 define <8 x i32> @shuffle_v8i32_08084c4c(<8 x i32> %a, <8 x i32> %b) {
729 ; ALL-LABEL: @shuffle_v8i32_08084c4c
730 ; ALL:       # BB#0:
731 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
732 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm0[0,2,1,3,4,6,5,7]
733 ; ALL-NEXT:    retq
734   %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>
735   ret <8 x i32> %shuffle
736 }
737
738 define <8 x i32> @shuffle_v8i32_8823cc67(<8 x i32> %a, <8 x i32> %b) {
739 ; ALL-LABEL: @shuffle_v8i32_8823cc67
740 ; ALL:       # BB#0:
741 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
742 ; ALL-NEXT:    retq
743   %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>
744   ret <8 x i32> %shuffle
745 }
746
747 define <8 x i32> @shuffle_v8i32_9832dc76(<8 x i32> %a, <8 x i32> %b) {
748 ; ALL-LABEL: @shuffle_v8i32_9832dc76
749 ; ALL:       # BB#0:
750 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
751 ; ALL-NEXT:    retq
752   %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>
753   ret <8 x i32> %shuffle
754 }
755
756 define <8 x i32> @shuffle_v8i32_9810dc54(<8 x i32> %a, <8 x i32> %b) {
757 ; ALL-LABEL: @shuffle_v8i32_9810dc54
758 ; ALL:       # BB#0:
759 ; ALL-NEXT:    vshufps {{.*}} # ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
760 ; ALL-NEXT:    retq
761   %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>
762   ret <8 x i32> %shuffle
763 }
764
765 define <8 x i32> @shuffle_v8i32_08194c5d(<8 x i32> %a, <8 x i32> %b) {
766 ; ALL-LABEL: @shuffle_v8i32_08194c5d
767 ; ALL:       # BB#0:
768 ; ALL-NEXT:    vunpcklps {{.*}} # ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
769 ; ALL-NEXT:    retq
770   %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>
771   ret <8 x i32> %shuffle
772 }
773
774 define <8 x i32> @shuffle_v8i32_2a3b6e7f(<8 x i32> %a, <8 x i32> %b) {
775 ; ALL-LABEL: @shuffle_v8i32_2a3b6e7f
776 ; ALL:       # BB#0:
777 ; ALL-NEXT:    vunpckhps {{.*}} # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
778 ; ALL-NEXT:    retq
779   %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>
780   ret <8 x i32> %shuffle
781 }
782
783 define <8 x i32> @shuffle_v8i32_08192a3b(<8 x i32> %a, <8 x i32> %b) {
784 ; ALL-LABEL: @shuffle_v8i32_08192a3b
785 ; ALL:       # BB#0:
786 ; ALL-NEXT:    vpermilps {{.*}} # xmm2 = xmm1[0,2,2,3]
787 ; ALL-NEXT:    vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
788 ; ALL-NEXT:    vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
789 ; ALL-NEXT:    vpermilps {{.*}} # xmm1 = xmm1[0,0,2,1]
790 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
791 ; ALL-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
792 ; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
793 ; ALL-NEXT:    retq
794   %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>
795   ret <8 x i32> %shuffle
796 }
797
798 define <8 x i32> @shuffle_v8i32_08991abb(<8 x i32> %a, <8 x i32> %b) {
799 ; ALL-LABEL: @shuffle_v8i32_08991abb
800 ; ALL:       # BB#0:
801 ; ALL-NEXT:    vpermilps {{.*}} # xmm2 = xmm0[1,1,2,3]
802 ; ALL-NEXT:    vpermilps {{.*}} # xmm3 = xmm1[0,2,3,3]
803 ; ALL-NEXT:    vblendps {{.*}} # xmm2 = xmm2[0],xmm3[1,2,3]
804 ; ALL-NEXT:    vunpcklps {{.*}} # xmm1 = xmm1[0,0,1,1]
805 ; ALL-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
806 ; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
807 ; ALL-NEXT:    retq
808   %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>
809   ret <8 x i32> %shuffle
810 }
811
812 define <8 x i32> @shuffle_v8i32_091b2d3f(<8 x i32> %a, <8 x i32> %b) {
813 ; ALL-LABEL: @shuffle_v8i32_091b2d3f
814 ; ALL:       # BB#0:
815 ; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm2
816 ; ALL-NEXT:    vpermilps {{.*}} # xmm3 = xmm0[2,1,3,3]
817 ; ALL-NEXT:    vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3]
818 ; ALL-NEXT:    vpermilps {{.*}} # xmm0 = xmm0[0,1,1,3]
819 ; ALL-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
820 ; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
821 ; ALL-NEXT:    retq
822   %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>
823   ret <8 x i32> %shuffle
824 }
825
826 define <8 x i32> @shuffle_v8i32_09ab1def(<8 x i32> %a, <8 x i32> %b) {
827 ; ALL-LABEL: @shuffle_v8i32_09ab1def
828 ; ALL:       # BB#0:
829 ; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm2
830 ; ALL-NEXT:    vpermilps {{.*}} # xmm3 = xmm0[1,1,2,3]
831 ; ALL-NEXT:    vblendps {{.*}} # xmm2 = xmm3[0],xmm2[1,2,3]
832 ; ALL-NEXT:    vblendps {{.*}} # xmm0 = xmm0[0],xmm1[1,2,3]
833 ; ALL-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
834 ; ALL-NEXT:    retq
835   %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>
836   ret <8 x i32> %shuffle
837 }
838
839 define <8 x i32> @shuffle_v8i32_00014445(<8 x i32> %a, <8 x i32> %b) {
840 ; ALL-LABEL: @shuffle_v8i32_00014445
841 ; ALL:       # BB#0:
842 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
843 ; ALL-NEXT:    retq
844   %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>
845   ret <8 x i32> %shuffle
846 }
847
848 define <8 x i32> @shuffle_v8i32_00204464(<8 x i32> %a, <8 x i32> %b) {
849 ; ALL-LABEL: @shuffle_v8i32_00204464
850 ; ALL:       # BB#0:
851 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
852 ; ALL-NEXT:    retq
853   %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>
854   ret <8 x i32> %shuffle
855 }
856
857 define <8 x i32> @shuffle_v8i32_03004744(<8 x i32> %a, <8 x i32> %b) {
858 ; ALL-LABEL: @shuffle_v8i32_03004744
859 ; ALL:       # BB#0:
860 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
861 ; ALL-NEXT:    retq
862   %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>
863   ret <8 x i32> %shuffle
864 }
865
866 define <8 x i32> @shuffle_v8i32_10005444(<8 x i32> %a, <8 x i32> %b) {
867 ; ALL-LABEL: @shuffle_v8i32_10005444
868 ; ALL:       # BB#0:
869 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
870 ; ALL-NEXT:    retq
871   %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>
872   ret <8 x i32> %shuffle
873 }
874
875 define <8 x i32> @shuffle_v8i32_22006644(<8 x i32> %a, <8 x i32> %b) {
876 ; ALL-LABEL: @shuffle_v8i32_22006644
877 ; ALL:       # BB#0:
878 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
879 ; ALL-NEXT:    retq
880   %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>
881   ret <8 x i32> %shuffle
882 }
883
884 define <8 x i32> @shuffle_v8i32_33307774(<8 x i32> %a, <8 x i32> %b) {
885 ; ALL-LABEL: @shuffle_v8i32_33307774
886 ; ALL:       # BB#0:
887 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
888 ; ALL-NEXT:    retq
889   %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>
890   ret <8 x i32> %shuffle
891 }
892
893 define <8 x i32> @shuffle_v8i32_32107654(<8 x i32> %a, <8 x i32> %b) {
894 ; ALL-LABEL: @shuffle_v8i32_32107654
895 ; ALL:       # BB#0:
896 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,2,1,0,7,6,5,4]
897 ; ALL-NEXT:    retq
898   %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>
899   ret <8 x i32> %shuffle
900 }
901
902 define <8 x i32> @shuffle_v8i32_00234467(<8 x i32> %a, <8 x i32> %b) {
903 ; ALL-LABEL: @shuffle_v8i32_00234467
904 ; ALL:       # BB#0:
905 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
906 ; ALL-NEXT:    retq
907   %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>
908   ret <8 x i32> %shuffle
909 }
910
911 define <8 x i32> @shuffle_v8i32_00224466(<8 x i32> %a, <8 x i32> %b) {
912 ; ALL-LABEL: @shuffle_v8i32_00224466
913 ; ALL:       # BB#0:
914 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
915 ; ALL-NEXT:    retq
916   %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>
917   ret <8 x i32> %shuffle
918 }
919
920 define <8 x i32> @shuffle_v8i32_10325476(<8 x i32> %a, <8 x i32> %b) {
921 ; ALL-LABEL: @shuffle_v8i32_10325476
922 ; ALL:       # BB#0:
923 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,3,2,5,4,7,6]
924 ; ALL-NEXT:    retq
925   %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>
926   ret <8 x i32> %shuffle
927 }
928
929 define <8 x i32> @shuffle_v8i32_11335577(<8 x i32> %a, <8 x i32> %b) {
930 ; ALL-LABEL: @shuffle_v8i32_11335577
931 ; ALL:       # BB#0:
932 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,1,3,3,5,5,7,7]
933 ; ALL-NEXT:    retq
934   %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>
935   ret <8 x i32> %shuffle
936 }
937
938 define <8 x i32> @shuffle_v8i32_10235467(<8 x i32> %a, <8 x i32> %b) {
939 ; ALL-LABEL: @shuffle_v8i32_10235467
940 ; ALL:       # BB#0:
941 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,2,3,5,4,6,7]
942 ; ALL-NEXT:    retq
943   %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>
944   ret <8 x i32> %shuffle
945 }
946
947 define <8 x i32> @shuffle_v8i32_10225466(<8 x i32> %a, <8 x i32> %b) {
948 ; ALL-LABEL: @shuffle_v8i32_10225466
949 ; ALL:       # BB#0:
950 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,2,2,5,4,6,6]
951 ; ALL-NEXT:    retq
952   %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>
953   ret <8 x i32> %shuffle
954 }
955
956 define <8 x i32> @shuffle_v8i32_00015444(<8 x i32> %a, <8 x i32> %b) {
957 ; ALL-LABEL: @shuffle_v8i32_00015444
958 ; ALL:       # BB#0:
959 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,0,0,5,4,4,4]
960 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,0,1,4,4,4,5]
961 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
962 ; ALL-NEXT:    retq
963   %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>
964   ret <8 x i32> %shuffle
965 }
966
967 define <8 x i32> @shuffle_v8i32_00204644(<8 x i32> %a, <8 x i32> %b) {
968 ; ALL-LABEL: @shuffle_v8i32_00204644
969 ; ALL:       # BB#0:
970 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,2,0,0,4,6,4,4]
971 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,0,4,4,6,4]
972 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
973 ; ALL-NEXT:    retq
974   %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>
975   ret <8 x i32> %shuffle
976 }
977
978 define <8 x i32> @shuffle_v8i32_03004474(<8 x i32> %a, <8 x i32> %b) {
979 ; ALL-LABEL: @shuffle_v8i32_03004474
980 ; ALL:       # BB#0:
981 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,0,3,0,4,4,7,4]
982 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,3,0,0,4,7,4,4]
983 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
984 ; ALL-NEXT:    retq
985   %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>
986   ret <8 x i32> %shuffle
987 }
988
989 define <8 x i32> @shuffle_v8i32_10004444(<8 x i32> %a, <8 x i32> %b) {
990 ; ALL-LABEL: @shuffle_v8i32_10004444
991 ; ALL:       # BB#0:
992 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,0,0,0,4,4,4,4]
993 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[1,0,0,0,5,4,4,4]
994 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
995 ; ALL-NEXT:    retq
996   %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>
997   ret <8 x i32> %shuffle
998 }
999
1000 define <8 x i32> @shuffle_v8i32_22006446(<8 x i32> %a, <8 x i32> %b) {
1001 ; ALL-LABEL: @shuffle_v8i32_22006446
1002 ; ALL:       # BB#0:
1003 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,0,0,2,6,4,4,6]
1004 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[2,2,0,0,6,6,4,4]
1005 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1006 ; ALL-NEXT:    retq
1007   %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>
1008   ret <8 x i32> %shuffle
1009 }
1010
1011 define <8 x i32> @shuffle_v8i32_33307474(<8 x i32> %a, <8 x i32> %b) {
1012 ; ALL-LABEL: @shuffle_v8i32_33307474
1013 ; ALL:       # BB#0:
1014 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[3,0,3,0,7,4,7,4]
1015 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[3,3,3,0,7,7,7,4]
1016 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1017 ; ALL-NEXT:    retq
1018   %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>
1019   ret <8 x i32> %shuffle
1020 }
1021
1022 define <8 x i32> @shuffle_v8i32_32104567(<8 x i32> %a, <8 x i32> %b) {
1023 ; ALL-LABEL: @shuffle_v8i32_32104567
1024 ; ALL:       # BB#0:
1025 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[3,2,1,0,7,6,5,4]
1026 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
1027 ; ALL-NEXT:    retq
1028   %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>
1029   ret <8 x i32> %shuffle
1030 }
1031
1032 define <8 x i32> @shuffle_v8i32_00236744(<8 x i32> %a, <8 x i32> %b) {
1033 ; ALL-LABEL: @shuffle_v8i32_00236744
1034 ; ALL:       # BB#0:
1035 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,3,0,0,6,7,4,4]
1036 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1037 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1038 ; ALL-NEXT:    retq
1039   %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>
1040   ret <8 x i32> %shuffle
1041 }
1042
1043 define <8 x i32> @shuffle_v8i32_00226644(<8 x i32> %a, <8 x i32> %b) {
1044 ; ALL-LABEL: @shuffle_v8i32_00226644
1045 ; ALL:       # BB#0:
1046 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,2,0,0,6,6,4,4]
1047 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,2,4,4,6,6]
1048 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1049 ; ALL-NEXT:    retq
1050   %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>
1051   ret <8 x i32> %shuffle
1052 }
1053
1054 define <8 x i32> @shuffle_v8i32_10324567(<8 x i32> %a, <8 x i32> %b) {
1055 ; ALL-LABEL: @shuffle_v8i32_10324567
1056 ; ALL:       # BB#0:
1057 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,3,2,5,4,7,6]
1058 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
1059 ; ALL-NEXT:    retq
1060   %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>
1061   ret <8 x i32> %shuffle
1062 }
1063
1064 define <8 x i32> @shuffle_v8i32_11334567(<8 x i32> %a, <8 x i32> %b) {
1065 ; ALL-LABEL: @shuffle_v8i32_11334567
1066 ; ALL:       # BB#0:
1067 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,1,3,3,5,5,7,7]
1068 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
1069 ; ALL-NEXT:    retq
1070   %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>
1071   ret <8 x i32> %shuffle
1072 }
1073
1074 define <8 x i32> @shuffle_v8i32_01235467(<8 x i32> %a, <8 x i32> %b) {
1075 ; ALL-LABEL: @shuffle_v8i32_01235467
1076 ; ALL:       # BB#0:
1077 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,2,3,5,4,6,7]
1078 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1079 ; ALL-NEXT:    retq
1080   %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>
1081   ret <8 x i32> %shuffle
1082 }
1083
1084 define <8 x i32> @shuffle_v8i32_01235466(<8 x i32> %a, <8 x i32> %b) {
1085 ; ALL-LABEL: @shuffle_v8i32_01235466
1086 ; ALL:       # BB#0:
1087 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,2,2,5,4,6,6]
1088 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1089 ; ALL-NEXT:    retq
1090   %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>
1091   ret <8 x i32> %shuffle
1092 }
1093
1094 define <8 x i32> @shuffle_v8i32_002u6u44(<8 x i32> %a, <8 x i32> %b) {
1095 ; ALL-LABEL: @shuffle_v8i32_002u6u44
1096 ; ALL:       # BB#0:
1097 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,1,0,0,6,5,4,4]
1098 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1099 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1100 ; ALL-NEXT:    retq
1101   %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>
1102   ret <8 x i32> %shuffle
1103 }
1104
1105 define <8 x i32> @shuffle_v8i32_00uu66uu(<8 x i32> %a, <8 x i32> %b) {
1106 ; ALL-LABEL: @shuffle_v8i32_00uu66uu
1107 ; ALL:       # BB#0:
1108 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[2,2,2,3,6,6,6,7]
1109 ; ALL-NEXT:    vpermilps {{.*}} # ymm0 = ymm0[0,0,2,3,4,4,6,7]
1110 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1111 ; ALL-NEXT:    retq
1112   %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>
1113   ret <8 x i32> %shuffle
1114 }
1115
1116 define <8 x i32> @shuffle_v8i32_103245uu(<8 x i32> %a, <8 x i32> %b) {
1117 ; ALL-LABEL: @shuffle_v8i32_103245uu
1118 ; ALL:       # BB#0:
1119 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,3,2,5,4,7,6]
1120 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
1121 ; ALL-NEXT:    retq
1122   %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>
1123   ret <8 x i32> %shuffle
1124 }
1125
1126 define <8 x i32> @shuffle_v8i32_1133uu67(<8 x i32> %a, <8 x i32> %b) {
1127 ; ALL-LABEL: @shuffle_v8i32_1133uu67
1128 ; ALL:       # BB#0:
1129 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,1,3,3,5,5,7,7]
1130 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
1131 ; ALL-NEXT:    retq
1132   %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>
1133   ret <8 x i32> %shuffle
1134 }
1135
1136 define <8 x i32> @shuffle_v8i32_0uu354uu(<8 x i32> %a, <8 x i32> %b) {
1137 ; ALL-LABEL: @shuffle_v8i32_0uu354uu
1138 ; ALL:       # BB#0:
1139 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[1,0,2,3,5,4,6,7]
1140 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1141 ; ALL-NEXT:    retq
1142   %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>
1143   ret <8 x i32> %shuffle
1144 }
1145
1146 define <8 x i32> @shuffle_v8i32_uuu3uu66(<8 x i32> %a, <8 x i32> %b) {
1147 ; ALL-LABEL: @shuffle_v8i32_uuu3uu66
1148 ; ALL:       # BB#0:
1149 ; ALL-NEXT:    vpermilps {{.*}} # ymm1 = ymm0[0,1,2,2,4,5,6,6]
1150 ; ALL-NEXT:    vblendps {{.*}} # ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1151 ; ALL-NEXT:    retq
1152   %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>
1153   ret <8 x i32> %shuffle
1154 }