[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-shuffle-256-v8.ll
blob4cfe40175514386feac11f9221eb16254ab4f645
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX1
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX2OR512VL --check-prefix=AVX2 --check-prefix=AVX2-SLOW
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX2OR512VL --check-prefix=AVX2 --check-prefix=AVX2-FAST-ALL
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX2OR512VL --check-prefix=AVX2 --check-prefix=AVX2-FAST-PERLANE
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=AVX2OR512VL --check-prefix=AVX512VL --check-prefix=AVX512VL-SLOW
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX2OR512VL --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST --check-prefix=AVX512VL-FAST-ALL
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512dq,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX2OR512VL --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST --check-prefix=AVX512VL-FAST-PERLANE
10 define <8 x float> @shuffle_v8f32_00000000(<8 x float> %a, <8 x float> %b) {
11 ; AVX1-LABEL: shuffle_v8f32_00000000:
12 ; AVX1:       # %bb.0:
13 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,0]
14 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
15 ; AVX1-NEXT:    retq
17 ; AVX2OR512VL-LABEL: shuffle_v8f32_00000000:
18 ; AVX2OR512VL:       # %bb.0:
19 ; AVX2OR512VL-NEXT:    vbroadcastss %xmm0, %ymm0
20 ; AVX2OR512VL-NEXT:    retq
21   %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>
22   ret <8 x float> %shuffle
25 define <8 x float> @shuffle_v8f32_00000010(<8 x float> %a, <8 x float> %b) {
26 ; AVX1-LABEL: shuffle_v8f32_00000010:
27 ; AVX1:       # %bb.0:
28 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
29 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
30 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
31 ; AVX1-NEXT:    retq
33 ; AVX2-SLOW-LABEL: shuffle_v8f32_00000010:
34 ; AVX2-SLOW:       # %bb.0:
35 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
36 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
37 ; AVX2-SLOW-NEXT:    retq
39 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00000010:
40 ; AVX2-FAST-ALL:       # %bb.0:
41 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]
42 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
43 ; AVX2-FAST-ALL-NEXT:    retq
45 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00000010:
46 ; AVX2-FAST-PERLANE:       # %bb.0:
47 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
48 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
49 ; AVX2-FAST-PERLANE-NEXT:    retq
51 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_00000010:
52 ; AVX512VL-SLOW:       # %bb.0:
53 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
54 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
55 ; AVX512VL-SLOW-NEXT:    retq
57 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00000010:
58 ; AVX512VL-FAST-ALL:       # %bb.0:
59 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]
60 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
61 ; AVX512VL-FAST-ALL-NEXT:    retq
63 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00000010:
64 ; AVX512VL-FAST-PERLANE:       # %bb.0:
65 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
66 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
67 ; AVX512VL-FAST-PERLANE-NEXT:    retq
68   %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>
69   ret <8 x float> %shuffle
72 define <8 x float> @shuffle_v8f32_00000200(<8 x float> %a, <8 x float> %b) {
73 ; AVX1-LABEL: shuffle_v8f32_00000200:
74 ; AVX1:       # %bb.0:
75 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
76 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,0,0]
77 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
78 ; AVX1-NEXT:    retq
80 ; AVX2-SLOW-LABEL: shuffle_v8f32_00000200:
81 ; AVX2-SLOW:       # %bb.0:
82 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
83 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
84 ; AVX2-SLOW-NEXT:    retq
86 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00000200:
87 ; AVX2-FAST-ALL:       # %bb.0:
88 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]
89 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
90 ; AVX2-FAST-ALL-NEXT:    retq
92 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00000200:
93 ; AVX2-FAST-PERLANE:       # %bb.0:
94 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
95 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
96 ; AVX2-FAST-PERLANE-NEXT:    retq
98 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_00000200:
99 ; AVX512VL-SLOW:       # %bb.0:
100 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
101 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
102 ; AVX512VL-SLOW-NEXT:    retq
104 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00000200:
105 ; AVX512VL-FAST-ALL:       # %bb.0:
106 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]
107 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
108 ; AVX512VL-FAST-ALL-NEXT:    retq
110 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00000200:
111 ; AVX512VL-FAST-PERLANE:       # %bb.0:
112 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
113 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
114 ; AVX512VL-FAST-PERLANE-NEXT:    retq
115   %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>
116   ret <8 x float> %shuffle
119 define <8 x float> @shuffle_v8f32_00003000(<8 x float> %a, <8 x float> %b) {
120 ; AVX1-LABEL: shuffle_v8f32_00003000:
121 ; AVX1:       # %bb.0:
122 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
123 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,0,0,0]
124 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
125 ; AVX1-NEXT:    retq
127 ; AVX2-SLOW-LABEL: shuffle_v8f32_00003000:
128 ; AVX2-SLOW:       # %bb.0:
129 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
130 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
131 ; AVX2-SLOW-NEXT:    retq
133 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00003000:
134 ; AVX2-FAST-ALL:       # %bb.0:
135 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]
136 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
137 ; AVX2-FAST-ALL-NEXT:    retq
139 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00003000:
140 ; AVX2-FAST-PERLANE:       # %bb.0:
141 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
142 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
143 ; AVX2-FAST-PERLANE-NEXT:    retq
145 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_00003000:
146 ; AVX512VL-SLOW:       # %bb.0:
147 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
148 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
149 ; AVX512VL-SLOW-NEXT:    retq
151 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00003000:
152 ; AVX512VL-FAST-ALL:       # %bb.0:
153 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]
154 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
155 ; AVX512VL-FAST-ALL-NEXT:    retq
157 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00003000:
158 ; AVX512VL-FAST-PERLANE:       # %bb.0:
159 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
160 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
161 ; AVX512VL-FAST-PERLANE-NEXT:    retq
162   %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>
163   ret <8 x float> %shuffle
166 define <8 x float> @shuffle_v8f32_00040000(<8 x float> %a, <8 x float> %b) {
167 ; AVX1-LABEL: shuffle_v8f32_00040000:
168 ; AVX1:       # %bb.0:
169 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
170 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
171 ; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm1 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
172 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[2,0],ymm0[4,4],ymm1[6,4]
173 ; AVX1-NEXT:    retq
175 ; AVX2OR512VL-LABEL: shuffle_v8f32_00040000:
176 ; AVX2OR512VL:       # %bb.0:
177 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,0,4]
178 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
179 ; AVX2OR512VL-NEXT:    retq
180   %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>
181   ret <8 x float> %shuffle
184 define <8 x float> @shuffle_v8f32_00500000(<8 x float> %a, <8 x float> %b) {
185 ; AVX1-LABEL: shuffle_v8f32_00500000:
186 ; AVX1:       # %bb.0:
187 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
188 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
189 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,4,4]
190 ; AVX1-NEXT:    retq
192 ; AVX2OR512VL-LABEL: shuffle_v8f32_00500000:
193 ; AVX2OR512VL:       # %bb.0:
194 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,5,0]
195 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
196 ; AVX2OR512VL-NEXT:    retq
197   %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>
198   ret <8 x float> %shuffle
201 define <8 x float> @shuffle_v8f32_06000000(<8 x float> %a, <8 x float> %b) {
202 ; AVX1-LABEL: shuffle_v8f32_06000000:
203 ; AVX1:       # %bb.0:
204 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
205 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
206 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,0,0,4,4,4,4]
207 ; AVX1-NEXT:    retq
209 ; AVX2OR512VL-LABEL: shuffle_v8f32_06000000:
210 ; AVX2OR512VL:       # %bb.0:
211 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [0,6,0,0]
212 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
213 ; AVX2OR512VL-NEXT:    retq
214   %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>
215   ret <8 x float> %shuffle
218 define <8 x float> @shuffle_v8f32_70000000(<8 x float> %a, <8 x float> %b) {
219 ; AVX1-LABEL: shuffle_v8f32_70000000:
220 ; AVX1:       # %bb.0:
221 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
222 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
223 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,0,0,0,4,4,4,4]
224 ; AVX1-NEXT:    retq
226 ; AVX2OR512VL-LABEL: shuffle_v8f32_70000000:
227 ; AVX2OR512VL:       # %bb.0:
228 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [7,0,0,0]
229 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
230 ; AVX2OR512VL-NEXT:    retq
231   %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>
232   ret <8 x float> %shuffle
235 define <8 x float> @shuffle_v8f32_01014545(<8 x float> %a, <8 x float> %b) {
236 ; ALL-LABEL: shuffle_v8f32_01014545:
237 ; ALL:       # %bb.0:
238 ; ALL-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
239 ; ALL-NEXT:    retq
240   %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>
241   ret <8 x float> %shuffle
244 define <8 x float> @shuffle_v8f32_00112233(<8 x float> %a, <8 x float> %b) {
245 ; AVX1-LABEL: shuffle_v8f32_00112233:
246 ; AVX1:       # %bb.0:
247 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,1,1]
248 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3]
249 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
250 ; AVX1-NEXT:    retq
252 ; AVX2OR512VL-LABEL: shuffle_v8f32_00112233:
253 ; AVX2OR512VL:       # %bb.0:
254 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]
255 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
256 ; AVX2OR512VL-NEXT:    retq
257   %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>
258   ret <8 x float> %shuffle
261 define <8 x float> @shuffle_v8f32_00001111(<8 x float> %a, <8 x float> %b) {
262 ; AVX1-LABEL: shuffle_v8f32_00001111:
263 ; AVX1:       # %bb.0:
264 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
265 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
266 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
267 ; AVX1-NEXT:    retq
269 ; AVX2-SLOW-LABEL: shuffle_v8f32_00001111:
270 ; AVX2-SLOW:       # %bb.0:
271 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
272 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
273 ; AVX2-SLOW-NEXT:    retq
275 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00001111:
276 ; AVX2-FAST-ALL:       # %bb.0:
277 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]
278 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
279 ; AVX2-FAST-ALL-NEXT:    retq
281 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00001111:
282 ; AVX2-FAST-PERLANE:       # %bb.0:
283 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
284 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
285 ; AVX2-FAST-PERLANE-NEXT:    retq
287 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_00001111:
288 ; AVX512VL-SLOW:       # %bb.0:
289 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
290 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
291 ; AVX512VL-SLOW-NEXT:    retq
293 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00001111:
294 ; AVX512VL-FAST-ALL:       # %bb.0:
295 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]
296 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
297 ; AVX512VL-FAST-ALL-NEXT:    retq
299 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00001111:
300 ; AVX512VL-FAST-PERLANE:       # %bb.0:
301 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
302 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
303 ; AVX512VL-FAST-PERLANE-NEXT:    retq
304   %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>
305   ret <8 x float> %shuffle
308 define <8 x float> @shuffle_v8f32_81a3c5e7(<8 x float> %a, <8 x float> %b) {
309 ; ALL-LABEL: shuffle_v8f32_81a3c5e7:
310 ; ALL:       # %bb.0:
311 ; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
312 ; ALL-NEXT:    retq
313   %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>
314   ret <8 x float> %shuffle
317 define <8 x float> @shuffle_v8f32_08080808(<8 x float> %a, <8 x float> %b) {
318 ; AVX1-LABEL: shuffle_v8f32_08080808:
319 ; AVX1:       # %bb.0:
320 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]
321 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,1,3]
322 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
323 ; AVX1-NEXT:    retq
325 ; AVX2-LABEL: shuffle_v8f32_08080808:
326 ; AVX2:       # %bb.0:
327 ; AVX2-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
328 ; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0
329 ; AVX2-NEXT:    retq
331 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_08080808:
332 ; AVX512VL-SLOW:       # %bb.0:
333 ; AVX512VL-SLOW-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
334 ; AVX512VL-SLOW-NEXT:    vbroadcastsd %xmm0, %ymm0
335 ; AVX512VL-SLOW-NEXT:    retq
337 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_08080808:
338 ; AVX512VL-FAST-ALL:       # %bb.0:
339 ; AVX512VL-FAST-ALL-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [34359738368,34359738368,34359738368,34359738368]
340 ; AVX512VL-FAST-ALL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
341 ; AVX512VL-FAST-ALL-NEXT:    retq
343 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_08080808:
344 ; AVX512VL-FAST-PERLANE:       # %bb.0:
345 ; AVX512VL-FAST-PERLANE-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
346 ; AVX512VL-FAST-PERLANE-NEXT:    vbroadcastsd %xmm0, %ymm0
347 ; AVX512VL-FAST-PERLANE-NEXT:    retq
348   %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>
349   ret <8 x float> %shuffle
352 define <8 x float> @shuffle_v8f32_08084c4c(<8 x float> %a, <8 x float> %b) {
353 ; AVX1OR2-LABEL: shuffle_v8f32_08084c4c:
354 ; AVX1OR2:       # %bb.0:
355 ; AVX1OR2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
356 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
357 ; AVX1OR2-NEXT:    retq
359 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_08084c4c:
360 ; AVX512VL-SLOW:       # %bb.0:
361 ; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
362 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
363 ; AVX512VL-SLOW-NEXT:    retq
365 ; AVX512VL-FAST-LABEL: shuffle_v8f32_08084c4c:
366 ; AVX512VL-FAST:       # %bb.0:
367 ; AVX512VL-FAST-NEXT:    vmovaps {{.*#+}} ymm2 = [0,8,0,8,4,12,4,12]
368 ; AVX512VL-FAST-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
369 ; AVX512VL-FAST-NEXT:    retq
370   %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>
371   ret <8 x float> %shuffle
374 define <8 x float> @shuffle_v8f32_8823cc67(<8 x float> %a, <8 x float> %b) {
375 ; ALL-LABEL: shuffle_v8f32_8823cc67:
376 ; ALL:       # %bb.0:
377 ; ALL-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
378 ; ALL-NEXT:    retq
379   %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>
380   ret <8 x float> %shuffle
383 define <8 x float> @shuffle_v8f32_9832dc76(<8 x float> %a, <8 x float> %b) {
384 ; ALL-LABEL: shuffle_v8f32_9832dc76:
385 ; ALL:       # %bb.0:
386 ; ALL-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
387 ; ALL-NEXT:    retq
388   %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>
389   ret <8 x float> %shuffle
392 define <8 x float> @shuffle_v8f32_9810dc54(<8 x float> %a, <8 x float> %b) {
393 ; ALL-LABEL: shuffle_v8f32_9810dc54:
394 ; ALL:       # %bb.0:
395 ; ALL-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
396 ; ALL-NEXT:    retq
397   %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>
398   ret <8 x float> %shuffle
401 define <8 x float> @shuffle_v8f32_08194c5d(<8 x float> %a, <8 x float> %b) {
402 ; ALL-LABEL: shuffle_v8f32_08194c5d:
403 ; ALL:       # %bb.0:
404 ; ALL-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
405 ; ALL-NEXT:    retq
406   %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>
407   ret <8 x float> %shuffle
410 define <8 x float> @shuffle_v8f32_2a3b6e7f(<8 x float> %a, <8 x float> %b) {
411 ; ALL-LABEL: shuffle_v8f32_2a3b6e7f:
412 ; ALL:       # %bb.0:
413 ; ALL-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
414 ; ALL-NEXT:    retq
415   %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>
416   ret <8 x float> %shuffle
419 define <8 x float> @shuffle_v8f32_08192a3b(<8 x float> %a, <8 x float> %b) {
420 ; AVX1OR2-LABEL: shuffle_v8f32_08192a3b:
421 ; AVX1OR2:       # %bb.0:
422 ; AVX1OR2-NEXT:    vunpckhps {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
423 ; AVX1OR2-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
424 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
425 ; AVX1OR2-NEXT:    retq
427 ; AVX512VL-LABEL: shuffle_v8f32_08192a3b:
428 ; AVX512VL:       # %bb.0:
429 ; AVX512VL-NEXT:    vmovaps {{.*#+}} ymm2 = [0,8,1,9,2,10,3,11]
430 ; AVX512VL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
431 ; AVX512VL-NEXT:    retq
432   %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>
433   ret <8 x float> %shuffle
436 define <8 x float> @shuffle_v8f32_08991abb(<8 x float> %a, <8 x float> %b) {
437 ; AVX1-LABEL: shuffle_v8f32_08991abb:
438 ; AVX1:       # %bb.0:
439 ; AVX1-NEXT:    vmovlhps {{.*#+}} xmm2 = xmm0[0],xmm1[0]
440 ; AVX1-NEXT:    vshufps {{.*#+}} xmm2 = xmm2[0,2],xmm1[1,1]
441 ; AVX1-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
442 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,2,3,3]
443 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
444 ; AVX1-NEXT:    retq
446 ; AVX2-SLOW-LABEL: shuffle_v8f32_08991abb:
447 ; AVX2-SLOW:       # %bb.0:
448 ; AVX2-SLOW-NEXT:    vmovaps {{.*#+}} ymm2 = <u,0,1,1,u,2,3,3>
449 ; AVX2-SLOW-NEXT:    vpermps %ymm1, %ymm2, %ymm1
450 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,1,1,3]
451 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
452 ; AVX2-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
453 ; AVX2-SLOW-NEXT:    retq
455 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_08991abb:
456 ; AVX2-FAST-ALL:       # %bb.0:
457 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
458 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm2, %ymm0
459 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <u,0,1,1,u,2,3,3>
460 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm1, %ymm2, %ymm1
461 ; AVX2-FAST-ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
462 ; AVX2-FAST-ALL-NEXT:    retq
464 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_08991abb:
465 ; AVX2-FAST-PERLANE:       # %bb.0:
466 ; AVX2-FAST-PERLANE-NEXT:    vmovaps {{.*#+}} ymm2 = <u,0,1,1,u,2,3,3>
467 ; AVX2-FAST-PERLANE-NEXT:    vpermps %ymm1, %ymm2, %ymm1
468 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,1,1,3]
469 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
470 ; AVX2-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
471 ; AVX2-FAST-PERLANE-NEXT:    retq
473 ; AVX512VL-LABEL: shuffle_v8f32_08991abb:
474 ; AVX512VL:       # %bb.0:
475 ; AVX512VL-NEXT:    vmovaps {{.*#+}} ymm2 = [8,0,1,1,9,2,3,3]
476 ; AVX512VL-NEXT:    vpermi2ps %ymm0, %ymm1, %ymm2
477 ; AVX512VL-NEXT:    vmovaps %ymm2, %ymm0
478 ; AVX512VL-NEXT:    retq
479   %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>
480   ret <8 x float> %shuffle
483 define <8 x float> @shuffle_v8f32_091b2d3f(<8 x float> %a, <8 x float> %b) {
484 ; AVX1-LABEL: shuffle_v8f32_091b2d3f:
485 ; AVX1:       # %bb.0:
486 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm2 = xmm0[0,1,1,3]
487 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[2,1,3,3]
488 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
489 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
490 ; AVX1-NEXT:    retq
492 ; AVX2-LABEL: shuffle_v8f32_091b2d3f:
493 ; AVX2:       # %bb.0:
494 ; AVX2-NEXT:    vmovaps {{.*#+}} ymm2 = <0,u,1,u,2,u,3,u>
495 ; AVX2-NEXT:    vpermps %ymm0, %ymm2, %ymm0
496 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
497 ; AVX2-NEXT:    retq
499 ; AVX512VL-LABEL: shuffle_v8f32_091b2d3f:
500 ; AVX512VL:       # %bb.0:
501 ; AVX512VL-NEXT:    vmovaps {{.*#+}} ymm2 = [0,9,1,11,2,13,3,15]
502 ; AVX512VL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
503 ; AVX512VL-NEXT:    retq
504   %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>
505   ret <8 x float> %shuffle
508 define <8 x float> @shuffle_v8f32_09ab1def(<8 x float> %a, <8 x float> %b) {
509 ; AVX1-LABEL: shuffle_v8f32_09ab1def:
510 ; AVX1:       # %bb.0:
511 ; AVX1-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
512 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
513 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
514 ; AVX1-NEXT:    retq
516 ; AVX2-SLOW-LABEL: shuffle_v8f32_09ab1def:
517 ; AVX2-SLOW:       # %bb.0:
518 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,1,1,3]
519 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
520 ; AVX2-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
521 ; AVX2-SLOW-NEXT:    retq
523 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_09ab1def:
524 ; AVX2-FAST-ALL:       # %bb.0:
525 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
526 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm2, %ymm0
527 ; AVX2-FAST-ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
528 ; AVX2-FAST-ALL-NEXT:    retq
530 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_09ab1def:
531 ; AVX2-FAST-PERLANE:       # %bb.0:
532 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,1,1,3]
533 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]
534 ; AVX2-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
535 ; AVX2-FAST-PERLANE-NEXT:    retq
537 ; AVX512VL-LABEL: shuffle_v8f32_09ab1def:
538 ; AVX512VL:       # %bb.0:
539 ; AVX512VL-NEXT:    vmovaps {{.*#+}} ymm2 = [8,1,2,3,9,5,6,7]
540 ; AVX512VL-NEXT:    vpermi2ps %ymm0, %ymm1, %ymm2
541 ; AVX512VL-NEXT:    vmovaps %ymm2, %ymm0
542 ; AVX512VL-NEXT:    retq
543   %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>
544   ret <8 x float> %shuffle
547 define <8 x float> @shuffle_v8f32_00014445(<8 x float> %a, <8 x float> %b) {
548 ; ALL-LABEL: shuffle_v8f32_00014445:
549 ; ALL:       # %bb.0:
550 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]
551 ; ALL-NEXT:    retq
552   %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>
553   ret <8 x float> %shuffle
556 define <8 x float> @shuffle_v8f32_00204464(<8 x float> %a, <8 x float> %b) {
557 ; ALL-LABEL: shuffle_v8f32_00204464:
558 ; ALL:       # %bb.0:
559 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]
560 ; ALL-NEXT:    retq
561   %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>
562   ret <8 x float> %shuffle
565 define <8 x float> @shuffle_v8f32_03004744(<8 x float> %a, <8 x float> %b) {
566 ; ALL-LABEL: shuffle_v8f32_03004744:
567 ; ALL:       # %bb.0:
568 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,7,4,4]
569 ; ALL-NEXT:    retq
570   %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>
571   ret <8 x float> %shuffle
574 define <8 x float> @shuffle_v8f32_10005444(<8 x float> %a, <8 x float> %b) {
575 ; ALL-LABEL: shuffle_v8f32_10005444:
576 ; ALL:       # %bb.0:
577 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,5,4,4,4]
578 ; ALL-NEXT:    retq
579   %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>
580   ret <8 x float> %shuffle
583 define <8 x float> @shuffle_v8f32_22006644(<8 x float> %a, <8 x float> %b) {
584 ; ALL-LABEL: shuffle_v8f32_22006644:
585 ; ALL:       # %bb.0:
586 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,6,4,4]
587 ; ALL-NEXT:    retq
588   %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>
589   ret <8 x float> %shuffle
592 define <8 x float> @shuffle_v8f32_33307774(<8 x float> %a, <8 x float> %b) {
593 ; ALL-LABEL: shuffle_v8f32_33307774:
594 ; ALL:       # %bb.0:
595 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,7,7,4]
596 ; ALL-NEXT:    retq
597   %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>
598   ret <8 x float> %shuffle
601 define <8 x float> @shuffle_v8f32_32107654(<8 x float> %a, <8 x float> %b) {
602 ; ALL-LABEL: shuffle_v8f32_32107654:
603 ; ALL:       # %bb.0:
604 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
605 ; ALL-NEXT:    retq
606   %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>
607   ret <8 x float> %shuffle
610 define <8 x float> @shuffle_v8f32_00234467(<8 x float> %a, <8 x float> %b) {
611 ; ALL-LABEL: shuffle_v8f32_00234467:
612 ; ALL:       # %bb.0:
613 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,4,4,6,7]
614 ; ALL-NEXT:    retq
615   %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>
616   ret <8 x float> %shuffle
619 define <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {
620 ; ALL-LABEL: shuffle_v8f32_00224466:
621 ; ALL:       # %bb.0:
622 ; ALL-NEXT:    vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]
623 ; ALL-NEXT:    retq
624   %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>
625   ret <8 x float> %shuffle
628 define <8 x float> @shuffle_v8f32_10325476(<8 x float> %a, <8 x float> %b) {
629 ; ALL-LABEL: shuffle_v8f32_10325476:
630 ; ALL:       # %bb.0:
631 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]
632 ; ALL-NEXT:    retq
633   %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>
634   ret <8 x float> %shuffle
637 define <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {
638 ; ALL-LABEL: shuffle_v8f32_11335577:
639 ; ALL:       # %bb.0:
640 ; ALL-NEXT:    vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
641 ; ALL-NEXT:    retq
642   %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>
643   ret <8 x float> %shuffle
646 define <8 x float> @shuffle_v8f32_10235467(<8 x float> %a, <8 x float> %b) {
647 ; ALL-LABEL: shuffle_v8f32_10235467:
648 ; ALL:       # %bb.0:
649 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,3,5,4,6,7]
650 ; ALL-NEXT:    retq
651   %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>
652   ret <8 x float> %shuffle
655 define <8 x float> @shuffle_v8f32_10225466(<8 x float> %a, <8 x float> %b) {
656 ; ALL-LABEL: shuffle_v8f32_10225466:
657 ; ALL:       # %bb.0:
658 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,2,5,4,6,6]
659 ; ALL-NEXT:    retq
660   %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>
661   ret <8 x float> %shuffle
664 define <8 x float> @shuffle_v8f32_00015444(<8 x float> %a, <8 x float> %b) {
665 ; ALL-LABEL: shuffle_v8f32_00015444:
666 ; ALL:       # %bb.0:
667 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,5,4,4,4]
668 ; ALL-NEXT:    retq
669   %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>
670   ret <8 x float> %shuffle
673 define <8 x float> @shuffle_v8f32_00204644(<8 x float> %a, <8 x float> %b) {
674 ; ALL-LABEL: shuffle_v8f32_00204644:
675 ; ALL:       # %bb.0:
676 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,6,4,4]
677 ; ALL-NEXT:    retq
678   %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>
679   ret <8 x float> %shuffle
682 define <8 x float> @shuffle_v8f32_03004474(<8 x float> %a, <8 x float> %b) {
683 ; ALL-LABEL: shuffle_v8f32_03004474:
684 ; ALL:       # %bb.0:
685 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,4,7,4]
686 ; ALL-NEXT:    retq
687   %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>
688   ret <8 x float> %shuffle
691 define <8 x float> @shuffle_v8f32_10004444(<8 x float> %a, <8 x float> %b) {
692 ; ALL-LABEL: shuffle_v8f32_10004444:
693 ; ALL:       # %bb.0:
694 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,4,4,4,4]
695 ; ALL-NEXT:    retq
696   %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>
697   ret <8 x float> %shuffle
700 define <8 x float> @shuffle_v8f32_22006446(<8 x float> %a, <8 x float> %b) {
701 ; ALL-LABEL: shuffle_v8f32_22006446:
702 ; ALL:       # %bb.0:
703 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,4,4,6]
704 ; ALL-NEXT:    retq
705   %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>
706   ret <8 x float> %shuffle
709 define <8 x float> @shuffle_v8f32_33307474(<8 x float> %a, <8 x float> %b) {
710 ; ALL-LABEL: shuffle_v8f32_33307474:
711 ; ALL:       # %bb.0:
712 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,4,7,4]
713 ; ALL-NEXT:    retq
714   %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>
715   ret <8 x float> %shuffle
718 define <8 x float> @shuffle_v8f32_32104567(<8 x float> %a, <8 x float> %b) {
719 ; ALL-LABEL: shuffle_v8f32_32104567:
720 ; ALL:       # %bb.0:
721 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7]
722 ; ALL-NEXT:    retq
723   %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>
724   ret <8 x float> %shuffle
727 define <8 x float> @shuffle_v8f32_00236744(<8 x float> %a, <8 x float> %b) {
728 ; ALL-LABEL: shuffle_v8f32_00236744:
729 ; ALL:       # %bb.0:
730 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,6,7,4,4]
731 ; ALL-NEXT:    retq
732   %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>
733   ret <8 x float> %shuffle
736 define <8 x float> @shuffle_v8f32_00226644(<8 x float> %a, <8 x float> %b) {
737 ; ALL-LABEL: shuffle_v8f32_00226644:
738 ; ALL:       # %bb.0:
739 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,6,6,4,4]
740 ; ALL-NEXT:    retq
741   %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>
742   ret <8 x float> %shuffle
745 define <8 x float> @shuffle_v8f32_10324567(<8 x float> %a, <8 x float> %b) {
746 ; ALL-LABEL: shuffle_v8f32_10324567:
747 ; ALL:       # %bb.0:
748 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7]
749 ; ALL-NEXT:    retq
750   %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>
751   ret <8 x float> %shuffle
754 define <8 x float> @shuffle_v8f32_11334567(<8 x float> %a, <8 x float> %b) {
755 ; ALL-LABEL: shuffle_v8f32_11334567:
756 ; ALL:       # %bb.0:
757 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7]
758 ; ALL-NEXT:    retq
759   %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>
760   ret <8 x float> %shuffle
763 define <8 x float> @shuffle_v8f32_01235467(<8 x float> %a, <8 x float> %b) {
764 ; ALL-LABEL: shuffle_v8f32_01235467:
765 ; ALL:       # %bb.0:
766 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,7]
767 ; ALL-NEXT:    retq
768   %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>
769   ret <8 x float> %shuffle
772 define <8 x float> @shuffle_v8f32_01235466(<8 x float> %a, <8 x float> %b) {
773 ; ALL-LABEL: shuffle_v8f32_01235466:
774 ; ALL:       # %bb.0:
775 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,6]
776 ; ALL-NEXT:    retq
777   %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>
778   ret <8 x float> %shuffle
781 define <8 x float> @shuffle_v8f32_002u6u44(<8 x float> %a, <8 x float> %b) {
782 ; ALL-LABEL: shuffle_v8f32_002u6u44:
783 ; ALL:       # %bb.0:
784 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,u,6,u,4,4]
785 ; ALL-NEXT:    retq
786   %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>
787   ret <8 x float> %shuffle
790 define <8 x float> @shuffle_v8f32_00uu66uu(<8 x float> %a, <8 x float> %b) {
791 ; ALL-LABEL: shuffle_v8f32_00uu66uu:
792 ; ALL:       # %bb.0:
793 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,u,u,6,6,u,u]
794 ; ALL-NEXT:    retq
795   %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>
796   ret <8 x float> %shuffle
799 define <8 x float> @shuffle_v8f32_103245uu(<8 x float> %a, <8 x float> %b) {
800 ; ALL-LABEL: shuffle_v8f32_103245uu:
801 ; ALL:       # %bb.0:
802 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,u,u]
803 ; ALL-NEXT:    retq
804   %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>
805   ret <8 x float> %shuffle
808 define <8 x float> @shuffle_v8f32_1133uu67(<8 x float> %a, <8 x float> %b) {
809 ; ALL-LABEL: shuffle_v8f32_1133uu67:
810 ; ALL:       # %bb.0:
811 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,u,u,6,7]
812 ; ALL-NEXT:    retq
813   %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>
814   ret <8 x float> %shuffle
817 define <8 x float> @shuffle_v8f32_0uu354uu(<8 x float> %a, <8 x float> %b) {
818 ; ALL-LABEL: shuffle_v8f32_0uu354uu:
819 ; ALL:       # %bb.0:
820 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,u,u,3,5,4,u,u]
821 ; ALL-NEXT:    retq
822   %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>
823   ret <8 x float> %shuffle
826 define <8 x float> @shuffle_v8f32_uuu3uu66(<8 x float> %a, <8 x float> %b) {
827 ; ALL-LABEL: shuffle_v8f32_uuu3uu66:
828 ; ALL:       # %bb.0:
829 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[u,u,u,3,u,u,6,6]
830 ; ALL-NEXT:    retq
831   %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>
832   ret <8 x float> %shuffle
835 define <8 x float> @shuffle_v8f32_c348cda0(<8 x float> %a, <8 x float> %b) {
836 ; AVX1-LABEL: shuffle_v8f32_c348cda0:
837 ; AVX1:       # %bb.0:
838 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,2,3]
839 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm1, %ymm1
840 ; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm2[0,1],ymm1[2,0],ymm2[4,5],ymm1[6,4]
841 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]
842 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm2[0,0],ymm0[4,7],ymm2[4,4]
843 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]
844 ; AVX1-NEXT:    retq
846 ; AVX2-SLOW-LABEL: shuffle_v8f32_c348cda0:
847 ; AVX2-SLOW:       # %bb.0:
848 ; AVX2-SLOW-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [4,5,2,0,4,5,2,0]
849 ; AVX2-SLOW-NEXT:    # ymm2 = mem[0,1,0,1]
850 ; AVX2-SLOW-NEXT:    vpermps %ymm1, %ymm2, %ymm1
851 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,3,2,0,4,7,6,4]
852 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,1]
853 ; AVX2-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]
854 ; AVX2-SLOW-NEXT:    retq
856 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_c348cda0:
857 ; AVX2-FAST-ALL:       # %bb.0:
858 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <u,3,4,u,u,u,u,0>
859 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm2, %ymm0
860 ; AVX2-FAST-ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [4,5,2,0,4,5,2,0]
861 ; AVX2-FAST-ALL-NEXT:    # ymm2 = mem[0,1,0,1]
862 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm1, %ymm2, %ymm1
863 ; AVX2-FAST-ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]
864 ; AVX2-FAST-ALL-NEXT:    retq
866 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_c348cda0:
867 ; AVX2-FAST-PERLANE:       # %bb.0:
868 ; AVX2-FAST-PERLANE-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [4,5,2,0,4,5,2,0]
869 ; AVX2-FAST-PERLANE-NEXT:    # ymm2 = mem[0,1,0,1]
870 ; AVX2-FAST-PERLANE-NEXT:    vpermps %ymm1, %ymm2, %ymm1
871 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,3,2,0,4,7,6,4]
872 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,1]
873 ; AVX2-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]
874 ; AVX2-FAST-PERLANE-NEXT:    retq
876 ; AVX512VL-LABEL: shuffle_v8f32_c348cda0:
877 ; AVX512VL:       # %bb.0:
878 ; AVX512VL-NEXT:    vmovaps {{.*#+}} ymm2 = [4,11,12,0,4,5,2,8]
879 ; AVX512VL-NEXT:    vpermi2ps %ymm0, %ymm1, %ymm2
880 ; AVX512VL-NEXT:    vmovaps %ymm2, %ymm0
881 ; AVX512VL-NEXT:    retq
882   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 12, i32 3, i32 4, i32 8, i32 12, i32 13, i32 10, i32 0>
883   ret <8 x float> %shuffle
886 define <8 x float> @shuffle_v8f32_f511235a(<8 x float> %a, <8 x float> %b) {
887 ; AVX1-LABEL: shuffle_v8f32_f511235a:
888 ; AVX1:       # %bb.0:
889 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]
890 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,1,1,5,5,5,5]
891 ; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm2[0],ymm0[1],ymm2[3],ymm0[3]
892 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm1[2,3,0,1]
893 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[3,1,2,2,7,5,6,6]
894 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]
895 ; AVX1-NEXT:    retq
897 ; AVX2-SLOW-LABEL: shuffle_v8f32_f511235a:
898 ; AVX2-SLOW:       # %bb.0:
899 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[3,2,2,3,7,6,6,7]
900 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,1,2,0]
901 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,2,3,5,5,6,7]
902 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,0,1,2]
903 ; AVX2-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]
904 ; AVX2-SLOW-NEXT:    retq
906 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_f511235a:
907 ; AVX2-FAST-ALL:       # %bb.0:
908 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <7,u,u,u,u,u,u,2>
909 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm1, %ymm2, %ymm1
910 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <u,5,1,1,2,3,5,u>
911 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm2, %ymm0
912 ; AVX2-FAST-ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]
913 ; AVX2-FAST-ALL-NEXT:    retq
915 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_f511235a:
916 ; AVX2-FAST-PERLANE:       # %bb.0:
917 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[3,2,2,3,7,6,6,7]
918 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,1,2,0]
919 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,2,3,5,5,6,7]
920 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,0,1,2]
921 ; AVX2-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]
922 ; AVX2-FAST-PERLANE-NEXT:    retq
924 ; AVX512VL-LABEL: shuffle_v8f32_f511235a:
925 ; AVX512VL:       # %bb.0:
926 ; AVX512VL-NEXT:    vmovaps {{.*#+}} ymm2 = [15,5,1,1,2,3,5,10]
927 ; AVX512VL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
928 ; AVX512VL-NEXT:    retq
929   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 15, i32 5, i32 1, i32 1, i32 2, i32 3, i32 5, i32 10>
930   ret <8 x float> %shuffle
933 define <8 x float> @shuffle_v8f32_32103210(<8 x float> %a, <8 x float> %b) {
934 ; AVX1-LABEL: shuffle_v8f32_32103210:
935 ; AVX1:       # %bb.0:
936 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
937 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
938 ; AVX1-NEXT:    retq
940 ; AVX2-SLOW-LABEL: shuffle_v8f32_32103210:
941 ; AVX2-SLOW:       # %bb.0:
942 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
943 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
944 ; AVX2-SLOW-NEXT:    retq
946 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_32103210:
947 ; AVX2-FAST-ALL:       # %bb.0:
948 ; AVX2-FAST-ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]
949 ; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
950 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
951 ; AVX2-FAST-ALL-NEXT:    retq
953 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_32103210:
954 ; AVX2-FAST-PERLANE:       # %bb.0:
955 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
956 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
957 ; AVX2-FAST-PERLANE-NEXT:    retq
959 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_32103210:
960 ; AVX512VL-SLOW:       # %bb.0:
961 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
962 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
963 ; AVX512VL-SLOW-NEXT:    retq
965 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_32103210:
966 ; AVX512VL-FAST-ALL:       # %bb.0:
967 ; AVX512VL-FAST-ALL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]
968 ; AVX512VL-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
969 ; AVX512VL-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm0
970 ; AVX512VL-FAST-ALL-NEXT:    retq
972 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_32103210:
973 ; AVX512VL-FAST-PERLANE:       # %bb.0:
974 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
975 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
976 ; AVX512VL-FAST-PERLANE-NEXT:    retq
977   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 3, i32 2, i32 1, i32 0>
978   ret <8 x float> %shuffle
981 define <8 x float> @shuffle_v8f32_76547654(<8 x float> %a, <8 x float> %b) {
982 ; AVX1-LABEL: shuffle_v8f32_76547654:
983 ; AVX1:       # %bb.0:
984 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
985 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
986 ; AVX1-NEXT:    retq
988 ; AVX2-SLOW-LABEL: shuffle_v8f32_76547654:
989 ; AVX2-SLOW:       # %bb.0:
990 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
991 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
992 ; AVX2-SLOW-NEXT:    retq
994 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_76547654:
995 ; AVX2-FAST-ALL:       # %bb.0:
996 ; AVX2-FAST-ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]
997 ; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
998 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
999 ; AVX2-FAST-ALL-NEXT:    retq
1001 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_76547654:
1002 ; AVX2-FAST-PERLANE:       # %bb.0:
1003 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1004 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
1005 ; AVX2-FAST-PERLANE-NEXT:    retq
1007 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_76547654:
1008 ; AVX512VL-SLOW:       # %bb.0:
1009 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1010 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
1011 ; AVX512VL-SLOW-NEXT:    retq
1013 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_76547654:
1014 ; AVX512VL-FAST-ALL:       # %bb.0:
1015 ; AVX512VL-FAST-ALL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]
1016 ; AVX512VL-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
1017 ; AVX512VL-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1018 ; AVX512VL-FAST-ALL-NEXT:    retq
1020 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_76547654:
1021 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1022 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1023 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
1024 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1025   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 7, i32 6, i32 5, i32 4>
1026   ret <8 x float> %shuffle
1029 define <8 x float> @shuffle_v8f32_76543210(<8 x float> %a, <8 x float> %b) {
1030 ; AVX1-LABEL: shuffle_v8f32_76543210:
1031 ; AVX1:       # %bb.0:
1032 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
1033 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1034 ; AVX1-NEXT:    retq
1036 ; AVX2-SLOW-LABEL: shuffle_v8f32_76543210:
1037 ; AVX2-SLOW:       # %bb.0:
1038 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1039 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
1040 ; AVX2-SLOW-NEXT:    retq
1042 ; AVX2-FAST-ALL-LABEL: shuffle_v8f32_76543210:
1043 ; AVX2-FAST-ALL:       # %bb.0:
1044 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]
1045 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1046 ; AVX2-FAST-ALL-NEXT:    retq
1048 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_76543210:
1049 ; AVX2-FAST-PERLANE:       # %bb.0:
1050 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1051 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
1052 ; AVX2-FAST-PERLANE-NEXT:    retq
1054 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_76543210:
1055 ; AVX512VL-SLOW:       # %bb.0:
1056 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1057 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
1058 ; AVX512VL-SLOW-NEXT:    retq
1060 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_76543210:
1061 ; AVX512VL-FAST-ALL:       # %bb.0:
1062 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]
1063 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1064 ; AVX512VL-FAST-ALL-NEXT:    retq
1066 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_76543210:
1067 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1068 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1069 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
1070 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1071   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
1072   ret <8 x float> %shuffle
1075 define <8 x float> @shuffle_v8f32_3210ba98(<8 x float> %a, <8 x float> %b) {
1076 ; AVX1OR2-LABEL: shuffle_v8f32_3210ba98:
1077 ; AVX1OR2:       # %bb.0:
1078 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1079 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1080 ; AVX1OR2-NEXT:    retq
1082 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_3210ba98:
1083 ; AVX512VL-SLOW:       # %bb.0:
1084 ; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1085 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1086 ; AVX512VL-SLOW-NEXT:    retq
1088 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_3210ba98:
1089 ; AVX512VL-FAST-ALL:       # %bb.0:
1090 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = [3,2,1,0,11,10,9,8]
1091 ; AVX512VL-FAST-ALL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
1092 ; AVX512VL-FAST-ALL-NEXT:    retq
1094 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_3210ba98:
1095 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1096 ; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1097 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1098 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1099   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 11, i32 10, i32 9, i32 8>
1100   ret <8 x float> %shuffle
1103 define <8 x float> @shuffle_v8f32_3210fedc(<8 x float> %a, <8 x float> %b) {
1104 ; AVX1OR2-LABEL: shuffle_v8f32_3210fedc:
1105 ; AVX1OR2:       # %bb.0:
1106 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1107 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1108 ; AVX1OR2-NEXT:    retq
1110 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_3210fedc:
1111 ; AVX512VL-SLOW:       # %bb.0:
1112 ; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1113 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1114 ; AVX512VL-SLOW-NEXT:    retq
1116 ; AVX512VL-FAST-LABEL: shuffle_v8f32_3210fedc:
1117 ; AVX512VL-FAST:       # %bb.0:
1118 ; AVX512VL-FAST-NEXT:    vmovaps {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]
1119 ; AVX512VL-FAST-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
1120 ; AVX512VL-FAST-NEXT:    retq
1121   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12>
1122   ret <8 x float> %shuffle
1125 define <8 x float> @shuffle_v8f32_7654fedc(<8 x float> %a, <8 x float> %b) {
1126 ; AVX1OR2-LABEL: shuffle_v8f32_7654fedc:
1127 ; AVX1OR2:       # %bb.0:
1128 ; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
1129 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1130 ; AVX1OR2-NEXT:    retq
1132 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_7654fedc:
1133 ; AVX512VL-SLOW:       # %bb.0:
1134 ; AVX512VL-SLOW-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
1135 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1136 ; AVX512VL-SLOW-NEXT:    retq
1138 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_7654fedc:
1139 ; AVX512VL-FAST-ALL:       # %bb.0:
1140 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]
1141 ; AVX512VL-FAST-ALL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
1142 ; AVX512VL-FAST-ALL-NEXT:    retq
1144 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_7654fedc:
1145 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1146 ; AVX512VL-FAST-PERLANE-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
1147 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1148 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1149   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 15, i32 14, i32 13, i32 12>
1150   ret <8 x float> %shuffle
1153 define <8 x float> @shuffle_v8f32_fedc7654(<8 x float> %a, <8 x float> %b) {
1154 ; AVX1OR2-LABEL: shuffle_v8f32_fedc7654:
1155 ; AVX1OR2:       # %bb.0:
1156 ; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]
1157 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1158 ; AVX1OR2-NEXT:    retq
1160 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_fedc7654:
1161 ; AVX512VL-SLOW:       # %bb.0:
1162 ; AVX512VL-SLOW-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]
1163 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1164 ; AVX512VL-SLOW-NEXT:    retq
1166 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_fedc7654:
1167 ; AVX512VL-FAST-ALL:       # %bb.0:
1168 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]
1169 ; AVX512VL-FAST-ALL-NEXT:    vpermi2ps %ymm0, %ymm1, %ymm2
1170 ; AVX512VL-FAST-ALL-NEXT:    vmovaps %ymm2, %ymm0
1171 ; AVX512VL-FAST-ALL-NEXT:    retq
1173 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_fedc7654:
1174 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1175 ; AVX512VL-FAST-PERLANE-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]
1176 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1177 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1178   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 15, i32 14, i32 13, i32 12, i32 7, i32 6, i32 5, i32 4>
1179   ret <8 x float> %shuffle
1182 define <8 x float> @PR21138(<8 x float> %truc, <8 x float> %tchose) {
1183 ; AVX1-LABEL: PR21138:
1184 ; AVX1:       # %bb.0:
1185 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm1[2,3]
1186 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1187 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm2[1,3],ymm0[5,7],ymm2[5,7]
1188 ; AVX1-NEXT:    retq
1190 ; AVX2-LABEL: PR21138:
1191 ; AVX2:       # %bb.0:
1192 ; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]
1193 ; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1194 ; AVX2-NEXT:    retq
1196 ; AVX512VL-SLOW-LABEL: PR21138:
1197 ; AVX512VL-SLOW:       # %bb.0:
1198 ; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]
1199 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1200 ; AVX512VL-SLOW-NEXT:    retq
1202 ; AVX512VL-FAST-ALL-LABEL: PR21138:
1203 ; AVX512VL-FAST-ALL:       # %bb.0:
1204 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = [1,3,5,7,9,11,13,15]
1205 ; AVX512VL-FAST-ALL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
1206 ; AVX512VL-FAST-ALL-NEXT:    retq
1208 ; AVX512VL-FAST-PERLANE-LABEL: PR21138:
1209 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1210 ; AVX512VL-FAST-PERLANE-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]
1211 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1212 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1213   %shuffle = shufflevector <8 x float> %truc, <8 x float> %tchose, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
1214   ret <8 x float> %shuffle
1217 define <8 x float> @shuffle_v8f32_ba987654(<8 x float> %a, <8 x float> %b) {
1218 ; AVX1OR2-LABEL: shuffle_v8f32_ba987654:
1219 ; AVX1OR2:       # %bb.0:
1220 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
1221 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1222 ; AVX1OR2-NEXT:    retq
1224 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_ba987654:
1225 ; AVX512VL-SLOW:       # %bb.0:
1226 ; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
1227 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1228 ; AVX512VL-SLOW-NEXT:    retq
1230 ; AVX512VL-FAST-LABEL: shuffle_v8f32_ba987654:
1231 ; AVX512VL-FAST:       # %bb.0:
1232 ; AVX512VL-FAST-NEXT:    vmovaps {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]
1233 ; AVX512VL-FAST-NEXT:    vpermi2ps %ymm0, %ymm1, %ymm2
1234 ; AVX512VL-FAST-NEXT:    vmovaps %ymm2, %ymm0
1235 ; AVX512VL-FAST-NEXT:    retq
1236   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>
1237   ret <8 x float> %shuffle
1240 define <8 x float> @shuffle_v8f32_ba983210(<8 x float> %a, <8 x float> %b) {
1241 ; AVX1OR2-LABEL: shuffle_v8f32_ba983210:
1242 ; AVX1OR2:       # %bb.0:
1243 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1244 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1245 ; AVX1OR2-NEXT:    retq
1247 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_ba983210:
1248 ; AVX512VL-SLOW:       # %bb.0:
1249 ; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1250 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1251 ; AVX512VL-SLOW-NEXT:    retq
1253 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_ba983210:
1254 ; AVX512VL-FAST-ALL:       # %bb.0:
1255 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = [3,2,1,0,11,10,9,8]
1256 ; AVX512VL-FAST-ALL-NEXT:    vpermi2ps %ymm0, %ymm1, %ymm2
1257 ; AVX512VL-FAST-ALL-NEXT:    vmovaps %ymm2, %ymm0
1258 ; AVX512VL-FAST-ALL-NEXT:    retq
1260 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_ba983210:
1261 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1262 ; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1263 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1264 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1265   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 3, i32 2, i32 1, i32 0>
1266   ret <8 x float> %shuffle
1269 define <8 x float> @shuffle_v8f32_80u1c4u5(<8 x float> %a, <8 x float> %b) {
1270 ; ALL-LABEL: shuffle_v8f32_80u1c4u5:
1271 ; ALL:       # %bb.0:
1272 ; ALL-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]
1273 ; ALL-NEXT:    retq
1274   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 0, i32 undef, i32 1, i32 12, i32 4, i32 undef, i32 5>
1275   ret <8 x float> %shuffle
1278 define <8 x float> @shuffle_v8f32_a2u3e6f7(<8 x float> %a, <8 x float> %b) {
1279 ; ALL-LABEL: shuffle_v8f32_a2u3e6f7:
1280 ; ALL:       # %bb.0:
1281 ; ALL-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]
1282 ; ALL-NEXT:    retq
1283   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 10, i32 2, i32 undef, i32 3, i32 14, i32 6, i32 15, i32 7>
1284   ret <8 x float> %shuffle
1287 define <8 x float> @shuffle_v8f32_084c195d(<8 x float> %a, <8 x float> %b) {
1288 ; AVX1-LABEL: shuffle_v8f32_084c195d:
1289 ; AVX1:       # %bb.0:
1290 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]
1291 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm2 = ymm2[0,1,2,0,4,5,6,4]
1292 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[0,0,2,1,4,4,6,5]
1293 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1],ymm2[2,3,4,5],ymm1[6,7]
1294 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]
1295 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm2 = ymm2[1,1,0,3,5,5,4,7]
1296 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,1,3,4,5,5,7]
1297 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm2[2,3,4,5],ymm0[6,7]
1298 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
1299 ; AVX1-NEXT:    retq
1301 ; AVX2-LABEL: shuffle_v8f32_084c195d:
1302 ; AVX2:       # %bb.0:
1303 ; AVX2-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
1304 ; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1305 ; AVX2-NEXT:    retq
1307 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_084c195d:
1308 ; AVX512VL-SLOW:       # %bb.0:
1309 ; AVX512VL-SLOW-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
1310 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1311 ; AVX512VL-SLOW-NEXT:    retq
1313 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_084c195d:
1314 ; AVX512VL-FAST-ALL:       # %bb.0:
1315 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = [0,8,4,12,1,9,5,13]
1316 ; AVX512VL-FAST-ALL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
1317 ; AVX512VL-FAST-ALL-NEXT:    retq
1319 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_084c195d:
1320 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1321 ; AVX512VL-FAST-PERLANE-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
1322 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1323 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1324   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 4, i32 12, i32 1, i32 9, i32 5, i32 13>
1325   ret <8 x float> %shuffle
1328 define <8 x float> @shuffle_v8f32_01452367(<8 x float> %a) {
1329 ; AVX1-LABEL: shuffle_v8f32_01452367:
1330 ; AVX1:       # %bb.0:
1331 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,2,3]
1332 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1333 ; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[3]
1334 ; AVX1-NEXT:    retq
1336 ; AVX2OR512VL-LABEL: shuffle_v8f32_01452367:
1337 ; AVX2OR512VL:       # %bb.0:
1338 ; AVX2OR512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1339 ; AVX2OR512VL-NEXT:    retq
1340   %shuffle = shufflevector <8 x float> %a, <8 x float> undef, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 2, i32 3, i32 6, i32 7>
1341   ret <8 x float> %shuffle
1344 define <8 x float> @shuffle_v8f32_089abcde(<8 x float> %a, <8 x float> %b) {
1345 ; AVX1-LABEL: shuffle_v8f32_089abcde:
1346 ; AVX1:       # %bb.0:
1347 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm2 = xmm1[0,0,1,2]
1348 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1349 ; AVX1-NEXT:    vblendps {{.*#+}} xmm1 = xmm3[0,1,2],xmm1[3]
1350 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,0,1,2]
1351 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
1352 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
1353 ; AVX1-NEXT:    retq
1355 ; AVX2-LABEL: shuffle_v8f32_089abcde:
1356 ; AVX2:       # %bb.0:
1357 ; AVX2-NEXT:    vmovaps {{.*#+}} ymm2 = <u,0,1,2,3,4,5,6>
1358 ; AVX2-NEXT:    vpermps %ymm1, %ymm2, %ymm1
1359 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
1360 ; AVX2-NEXT:    retq
1362 ; AVX512VL-LABEL: shuffle_v8f32_089abcde:
1363 ; AVX512VL:       # %bb.0:
1364 ; AVX512VL-NEXT:    vmovaps {{.*#+}} ymm2 = [8,0,1,2,3,4,5,6]
1365 ; AVX512VL-NEXT:    vpermi2ps %ymm0, %ymm1, %ymm2
1366 ; AVX512VL-NEXT:    vmovaps %ymm2, %ymm0
1367 ; AVX512VL-NEXT:    retq
1368   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
1369   ret <8 x float> %shuffle
1372 define <8 x float> @shuffle_v8f32_0189abcd(<8 x float> %a, <8 x float> %b) {
1373 ; AVX1OR2-LABEL: shuffle_v8f32_0189abcd:
1374 ; AVX1OR2:       # %bb.0:
1375 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1376 ; AVX1OR2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]
1377 ; AVX1OR2-NEXT:    retq
1379 ; AVX512VL-SLOW-LABEL: shuffle_v8f32_0189abcd:
1380 ; AVX512VL-SLOW:       # %bb.0:
1381 ; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1382 ; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]
1383 ; AVX512VL-SLOW-NEXT:    retq
1385 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_0189abcd:
1386 ; AVX512VL-FAST-ALL:       # %bb.0:
1387 ; AVX512VL-FAST-ALL-NEXT:    vmovapd {{.*#+}} ymm2 = [4,0,1,2]
1388 ; AVX512VL-FAST-ALL-NEXT:    vpermi2pd %ymm0, %ymm1, %ymm2
1389 ; AVX512VL-FAST-ALL-NEXT:    vmovapd %ymm2, %ymm0
1390 ; AVX512VL-FAST-ALL-NEXT:    retq
1392 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_0189abcd:
1393 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1394 ; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1395 ; AVX512VL-FAST-PERLANE-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]
1396 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1397   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13>
1398   ret <8 x float> %shuffle
1401 define <8 x float> @shuffle_v8f32_uuuu1111(<8 x float> %a, <8 x float> %b) {
1402 ; ALL-LABEL: shuffle_v8f32_uuuu1111:
1403 ; ALL:       # %bb.0:
1404 ; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
1405 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1406 ; ALL-NEXT:    retq
1407   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 1, i32 1, i32 1, i32 1>
1408   ret <8 x float> %shuffle
1411 define <8 x float> @shuffle_v8f32_44444444(<8 x float> %a, <8 x float> %b) {
1412 ; AVX1-LABEL: shuffle_v8f32_44444444:
1413 ; AVX1:       # %bb.0:
1414 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
1415 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]
1416 ; AVX1-NEXT:    retq
1418 ; AVX2OR512VL-LABEL: shuffle_v8f32_44444444:
1419 ; AVX2OR512VL:       # %bb.0:
1420 ; AVX2OR512VL-NEXT:    vextractf128 $1, %ymm0, %xmm0
1421 ; AVX2OR512VL-NEXT:    vbroadcastss %xmm0, %ymm0
1422 ; AVX2OR512VL-NEXT:    retq
1423   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
1424   ret <8 x float> %shuffle
1427 define <8 x float> @shuffle_v8f32_1188uuuu(<8 x float> %a, <8 x float> %b) {
1428 ; ALL-LABEL: shuffle_v8f32_1188uuuu:
1429 ; ALL:       # %bb.0:
1430 ; ALL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[0,0]
1431 ; ALL-NEXT:    retq
1432   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 8, i32 8, i32 undef, i32 undef, i32 undef, i32 undef>
1433   ret <8 x float> %shuffle
1436 define <8 x float> @shuffle_v8f32_uuuu3210(<8 x float> %a, <8 x float> %b) {
1437 ; ALL-LABEL: shuffle_v8f32_uuuu3210:
1438 ; ALL:       # %bb.0:
1439 ; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
1440 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1441 ; ALL-NEXT:    retq
1442   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 3, i32 2, i32 1, i32 0>
1443   ret <8 x float> %shuffle
1446 define <8 x float> @shuffle_v8f32_uuuu1188(<8 x float> %a, <8 x float> %b) {
1447 ; ALL-LABEL: shuffle_v8f32_uuuu1188:
1448 ; ALL:       # %bb.0:
1449 ; ALL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[0,0]
1450 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1451 ; ALL-NEXT:    retq
1452   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 1, i32 1, i32 8, i32 8>
1453   ret <8 x float> %shuffle
1456 define <8 x float> @shuffle_v8f32_1111uuuu(<8 x float> %a, <8 x float> %b) {
1457 ; ALL-LABEL: shuffle_v8f32_1111uuuu:
1458 ; ALL:       # %bb.0:
1459 ; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
1460 ; ALL-NEXT:    retq
1461   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 undef, i32 undef, i32 undef, i32 undef>
1462   ret <8 x float> %shuffle
1465 define <8 x float> @shuffle_v8f32_5555uuuu(<8 x float> %a, <8 x float> %b) {
1466 ; ALL-LABEL: shuffle_v8f32_5555uuuu:
1467 ; ALL:       # %bb.0:
1468 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
1469 ; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
1470 ; ALL-NEXT:    retq
1471   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 undef, i32 undef, i32 undef, i32 undef>
1472   ret <8 x float> %shuffle
1475 define <8 x float> @shuffle_v8f32_32107654_v4f32(<4 x float> %a, <4 x float> %b) {
1476 ; ALL-LABEL: shuffle_v8f32_32107654_v4f32:
1477 ; ALL:       # %bb.0:
1478 ; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0
1479 ; ALL-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1480 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
1481 ; ALL-NEXT:    retq
1482   %1 = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
1483   %2 = shufflevector <4 x float> %b, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
1484   %3 = shufflevector <4 x float> %1, <4 x float> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1485   ret <8 x float> %3
1488 define <8 x float> @shuffle_mem_v8f32_8BA0CFE4(<8 x float> %a0, <8 x float>* %a1) {
1489 ; AVX1OR2-LABEL: shuffle_mem_v8f32_8BA0CFE4:
1490 ; AVX1OR2:       # %bb.0:
1491 ; AVX1OR2-NEXT:    vshufps {{.*#+}} ymm1 = ymm0[2,0],mem[0,0],ymm0[6,4],mem[4,4]
1492 ; AVX1OR2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[0,2],ymm0[4,7],ymm1[4,6]
1493 ; AVX1OR2-NEXT:    retq
1495 ; AVX512VL-SLOW-LABEL: shuffle_mem_v8f32_8BA0CFE4:
1496 ; AVX512VL-SLOW:       # %bb.0:
1497 ; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm1 = ymm0[2,0],mem[0,0],ymm0[6,4],mem[4,4]
1498 ; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[0,2],ymm0[4,7],ymm1[4,6]
1499 ; AVX512VL-SLOW-NEXT:    retq
1501 ; AVX512VL-FAST-LABEL: shuffle_mem_v8f32_8BA0CFE4:
1502 ; AVX512VL-FAST:       # %bb.0:
1503 ; AVX512VL-FAST-NEXT:    vmovaps {{.*#+}} ymm1 = [0,3,2,8,4,7,6,12]
1504 ; AVX512VL-FAST-NEXT:    vpermt2ps (%rdi), %ymm1, %ymm0
1505 ; AVX512VL-FAST-NEXT:    retq
1506   %1 = load <8 x float>, <8 x float>* %a1
1507   %2 = shufflevector <8 x float> %1, <8 x float> %a0, <8 x i32> <i32 8, i32 11, i32 10, i32 0, i32 12, i32 15, i32 14, i32 4>
1508   ret <8 x float> %2
1511 define <8 x i32> @shuffle_v8i32_00000000(<8 x i32> %a, <8 x i32> %b) {
1512 ; AVX1-LABEL: shuffle_v8i32_00000000:
1513 ; AVX1:       # %bb.0:
1514 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1515 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1516 ; AVX1-NEXT:    retq
1518 ; AVX2OR512VL-LABEL: shuffle_v8i32_00000000:
1519 ; AVX2OR512VL:       # %bb.0:
1520 ; AVX2OR512VL-NEXT:    vbroadcastss %xmm0, %ymm0
1521 ; AVX2OR512VL-NEXT:    retq
1522   %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>
1523   ret <8 x i32> %shuffle
1526 define <8 x i32> @shuffle_v8i32_00000010(<8 x i32> %a, <8 x i32> %b) {
1527 ; AVX1-LABEL: shuffle_v8i32_00000010:
1528 ; AVX1:       # %bb.0:
1529 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
1530 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
1531 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1532 ; AVX1-NEXT:    retq
1534 ; AVX2-SLOW-LABEL: shuffle_v8i32_00000010:
1535 ; AVX2-SLOW:       # %bb.0:
1536 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
1537 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
1538 ; AVX2-SLOW-NEXT:    retq
1540 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00000010:
1541 ; AVX2-FAST-ALL:       # %bb.0:
1542 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]
1543 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1544 ; AVX2-FAST-ALL-NEXT:    retq
1546 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00000010:
1547 ; AVX2-FAST-PERLANE:       # %bb.0:
1548 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
1549 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
1550 ; AVX2-FAST-PERLANE-NEXT:    retq
1552 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_00000010:
1553 ; AVX512VL-SLOW:       # %bb.0:
1554 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
1555 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
1556 ; AVX512VL-SLOW-NEXT:    retq
1558 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00000010:
1559 ; AVX512VL-FAST-ALL:       # %bb.0:
1560 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]
1561 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1562 ; AVX512VL-FAST-ALL-NEXT:    retq
1564 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00000010:
1565 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1566 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,0]
1567 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]
1568 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1569   %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>
1570   ret <8 x i32> %shuffle
1573 define <8 x i32> @shuffle_v8i32_00000200(<8 x i32> %a, <8 x i32> %b) {
1574 ; AVX1-LABEL: shuffle_v8i32_00000200:
1575 ; AVX1:       # %bb.0:
1576 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
1577 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,0,0]
1578 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1579 ; AVX1-NEXT:    retq
1581 ; AVX2-SLOW-LABEL: shuffle_v8i32_00000200:
1582 ; AVX2-SLOW:       # %bb.0:
1583 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
1584 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1585 ; AVX2-SLOW-NEXT:    retq
1587 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00000200:
1588 ; AVX2-FAST-ALL:       # %bb.0:
1589 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]
1590 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1591 ; AVX2-FAST-ALL-NEXT:    retq
1593 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00000200:
1594 ; AVX2-FAST-PERLANE:       # %bb.0:
1595 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
1596 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1597 ; AVX2-FAST-PERLANE-NEXT:    retq
1599 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_00000200:
1600 ; AVX512VL-SLOW:       # %bb.0:
1601 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
1602 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1603 ; AVX512VL-SLOW-NEXT:    retq
1605 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00000200:
1606 ; AVX512VL-FAST-ALL:       # %bb.0:
1607 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]
1608 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1609 ; AVX512VL-FAST-ALL-NEXT:    retq
1611 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00000200:
1612 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1613 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,2]
1614 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1615 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1616   %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>
1617   ret <8 x i32> %shuffle
1620 define <8 x i32> @shuffle_v8i32_00003000(<8 x i32> %a, <8 x i32> %b) {
1621 ; AVX1-LABEL: shuffle_v8i32_00003000:
1622 ; AVX1:       # %bb.0:
1623 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
1624 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,0,0,0]
1625 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1626 ; AVX1-NEXT:    retq
1628 ; AVX2-SLOW-LABEL: shuffle_v8i32_00003000:
1629 ; AVX2-SLOW:       # %bb.0:
1630 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
1631 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1632 ; AVX2-SLOW-NEXT:    retq
1634 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00003000:
1635 ; AVX2-FAST-ALL:       # %bb.0:
1636 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]
1637 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1638 ; AVX2-FAST-ALL-NEXT:    retq
1640 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00003000:
1641 ; AVX2-FAST-PERLANE:       # %bb.0:
1642 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
1643 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1644 ; AVX2-FAST-PERLANE-NEXT:    retq
1646 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_00003000:
1647 ; AVX512VL-SLOW:       # %bb.0:
1648 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
1649 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1650 ; AVX512VL-SLOW-NEXT:    retq
1652 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00003000:
1653 ; AVX512VL-FAST-ALL:       # %bb.0:
1654 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]
1655 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1656 ; AVX512VL-FAST-ALL-NEXT:    retq
1658 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00003000:
1659 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1660 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,3,0]
1661 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]
1662 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1663   %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>
1664   ret <8 x i32> %shuffle
1667 define <8 x i32> @shuffle_v8i32_00040000(<8 x i32> %a, <8 x i32> %b) {
1668 ; AVX1-LABEL: shuffle_v8i32_00040000:
1669 ; AVX1:       # %bb.0:
1670 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
1671 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1672 ; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm1 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]
1673 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[2,0],ymm0[4,4],ymm1[6,4]
1674 ; AVX1-NEXT:    retq
1676 ; AVX2OR512VL-LABEL: shuffle_v8i32_00040000:
1677 ; AVX2OR512VL:       # %bb.0:
1678 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,0,4]
1679 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1680 ; AVX2OR512VL-NEXT:    retq
1681   %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>
1682   ret <8 x i32> %shuffle
1685 define <8 x i32> @shuffle_v8i32_00500000(<8 x i32> %a, <8 x i32> %b) {
1686 ; AVX1-LABEL: shuffle_v8i32_00500000:
1687 ; AVX1:       # %bb.0:
1688 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
1689 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
1690 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,4,4]
1691 ; AVX1-NEXT:    retq
1693 ; AVX2OR512VL-LABEL: shuffle_v8i32_00500000:
1694 ; AVX2OR512VL:       # %bb.0:
1695 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [0,0,5,0]
1696 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1697 ; AVX2OR512VL-NEXT:    retq
1698   %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>
1699   ret <8 x i32> %shuffle
1702 define <8 x i32> @shuffle_v8i32_06000000(<8 x i32> %a, <8 x i32> %b) {
1703 ; AVX1-LABEL: shuffle_v8i32_06000000:
1704 ; AVX1:       # %bb.0:
1705 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
1706 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
1707 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,0,0,4,4,4,4]
1708 ; AVX1-NEXT:    retq
1710 ; AVX2OR512VL-LABEL: shuffle_v8i32_06000000:
1711 ; AVX2OR512VL:       # %bb.0:
1712 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [0,6,0,0]
1713 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1714 ; AVX2OR512VL-NEXT:    retq
1715   %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>
1716   ret <8 x i32> %shuffle
1719 define <8 x i32> @shuffle_v8i32_70000000(<8 x i32> %a, <8 x i32> %b) {
1720 ; AVX1-LABEL: shuffle_v8i32_70000000:
1721 ; AVX1:       # %bb.0:
1722 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
1723 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
1724 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,0,0,0,4,4,4,4]
1725 ; AVX1-NEXT:    retq
1727 ; AVX2OR512VL-LABEL: shuffle_v8i32_70000000:
1728 ; AVX2OR512VL:       # %bb.0:
1729 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} xmm1 = [7,0,0,0]
1730 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1731 ; AVX2OR512VL-NEXT:    retq
1732   %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>
1733   ret <8 x i32> %shuffle
1736 define <8 x i32> @shuffle_v8i32_01014545(<8 x i32> %a, <8 x i32> %b) {
1737 ; AVX1-LABEL: shuffle_v8i32_01014545:
1738 ; AVX1:       # %bb.0:
1739 ; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
1740 ; AVX1-NEXT:    retq
1742 ; AVX2OR512VL-LABEL: shuffle_v8i32_01014545:
1743 ; AVX2OR512VL:       # %bb.0:
1744 ; AVX2OR512VL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]
1745 ; AVX2OR512VL-NEXT:    retq
1746   %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>
1747   ret <8 x i32> %shuffle
1750 define <8 x i32> @shuffle_v8i32_00112233(<8 x i32> %a, <8 x i32> %b) {
1751 ; AVX1-LABEL: shuffle_v8i32_00112233:
1752 ; AVX1:       # %bb.0:
1753 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,1,1]
1754 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3]
1755 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1756 ; AVX1-NEXT:    retq
1758 ; AVX2-SLOW-LABEL: shuffle_v8i32_00112233:
1759 ; AVX2-SLOW:       # %bb.0:
1760 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1761 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]
1762 ; AVX2-SLOW-NEXT:    retq
1764 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00112233:
1765 ; AVX2-FAST-ALL:       # %bb.0:
1766 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]
1767 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1768 ; AVX2-FAST-ALL-NEXT:    retq
1770 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00112233:
1771 ; AVX2-FAST-PERLANE:       # %bb.0:
1772 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1773 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]
1774 ; AVX2-FAST-PERLANE-NEXT:    retq
1776 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_00112233:
1777 ; AVX512VL-SLOW:       # %bb.0:
1778 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1779 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]
1780 ; AVX512VL-SLOW-NEXT:    retq
1782 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00112233:
1783 ; AVX512VL-FAST-ALL:       # %bb.0:
1784 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]
1785 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1786 ; AVX512VL-FAST-ALL-NEXT:    retq
1788 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00112233:
1789 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1790 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
1791 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]
1792 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1793   %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>
1794   ret <8 x i32> %shuffle
1797 define <8 x i32> @shuffle_v8i32_00001111(<8 x i32> %a, <8 x i32> %b) {
1798 ; AVX1-LABEL: shuffle_v8i32_00001111:
1799 ; AVX1:       # %bb.0:
1800 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[0,0,0,0]
1801 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
1802 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1803 ; AVX1-NEXT:    retq
1805 ; AVX2-SLOW-LABEL: shuffle_v8i32_00001111:
1806 ; AVX2-SLOW:       # %bb.0:
1807 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
1808 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
1809 ; AVX2-SLOW-NEXT:    retq
1811 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00001111:
1812 ; AVX2-FAST-ALL:       # %bb.0:
1813 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]
1814 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1815 ; AVX2-FAST-ALL-NEXT:    retq
1817 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00001111:
1818 ; AVX2-FAST-PERLANE:       # %bb.0:
1819 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
1820 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
1821 ; AVX2-FAST-PERLANE-NEXT:    retq
1823 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_00001111:
1824 ; AVX512VL-SLOW:       # %bb.0:
1825 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
1826 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
1827 ; AVX512VL-SLOW-NEXT:    retq
1829 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00001111:
1830 ; AVX512VL-FAST-ALL:       # %bb.0:
1831 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]
1832 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1833 ; AVX512VL-FAST-ALL-NEXT:    retq
1835 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00001111:
1836 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1837 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
1838 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]
1839 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1840   %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>
1841   ret <8 x i32> %shuffle
1844 define <8 x i32> @shuffle_v8i32_81a3c5e7(<8 x i32> %a, <8 x i32> %b) {
1845 ; ALL-LABEL: shuffle_v8i32_81a3c5e7:
1846 ; ALL:       # %bb.0:
1847 ; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]
1848 ; ALL-NEXT:    retq
1849   %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>
1850   ret <8 x i32> %shuffle
1853 define <8 x i32> @shuffle_v8i32_08080808(<8 x i32> %a, <8 x i32> %b) {
1854 ; AVX1-LABEL: shuffle_v8i32_08080808:
1855 ; AVX1:       # %bb.0:
1856 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]
1857 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,1,3]
1858 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1859 ; AVX1-NEXT:    retq
1861 ; AVX2-LABEL: shuffle_v8i32_08080808:
1862 ; AVX2:       # %bb.0:
1863 ; AVX2-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1864 ; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0
1865 ; AVX2-NEXT:    retq
1867 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_08080808:
1868 ; AVX512VL-SLOW:       # %bb.0:
1869 ; AVX512VL-SLOW-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1870 ; AVX512VL-SLOW-NEXT:    vbroadcastsd %xmm0, %ymm0
1871 ; AVX512VL-SLOW-NEXT:    retq
1873 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_08080808:
1874 ; AVX512VL-FAST-ALL:       # %bb.0:
1875 ; AVX512VL-FAST-ALL-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [34359738368,34359738368,34359738368,34359738368]
1876 ; AVX512VL-FAST-ALL-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
1877 ; AVX512VL-FAST-ALL-NEXT:    retq
1879 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_08080808:
1880 ; AVX512VL-FAST-PERLANE:       # %bb.0:
1881 ; AVX512VL-FAST-PERLANE-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1882 ; AVX512VL-FAST-PERLANE-NEXT:    vbroadcastsd %xmm0, %ymm0
1883 ; AVX512VL-FAST-PERLANE-NEXT:    retq
1884   %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>
1885   ret <8 x i32> %shuffle
1888 define <8 x i32> @shuffle_v8i32_08084c4c(<8 x i32> %a, <8 x i32> %b) {
1889 ; AVX1-LABEL: shuffle_v8i32_08084c4c:
1890 ; AVX1:       # %bb.0:
1891 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]
1892 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
1893 ; AVX1-NEXT:    retq
1895 ; AVX2-LABEL: shuffle_v8i32_08084c4c:
1896 ; AVX2:       # %bb.0:
1897 ; AVX2-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
1898 ; AVX2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]
1899 ; AVX2-NEXT:    retq
1901 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_08084c4c:
1902 ; AVX512VL-SLOW:       # %bb.0:
1903 ; AVX512VL-SLOW-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
1904 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]
1905 ; AVX512VL-SLOW-NEXT:    retq
1907 ; AVX512VL-FAST-LABEL: shuffle_v8i32_08084c4c:
1908 ; AVX512VL-FAST:       # %bb.0:
1909 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,8,0,8,4,12,4,12]
1910 ; AVX512VL-FAST-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
1911 ; AVX512VL-FAST-NEXT:    retq
1912   %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>
1913   ret <8 x i32> %shuffle
1916 define <8 x i32> @shuffle_v8i32_8823cc67(<8 x i32> %a, <8 x i32> %b) {
1917 ; ALL-LABEL: shuffle_v8i32_8823cc67:
1918 ; ALL:       # %bb.0:
1919 ; ALL-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]
1920 ; ALL-NEXT:    retq
1921   %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>
1922   ret <8 x i32> %shuffle
1925 define <8 x i32> @shuffle_v8i32_9832dc76(<8 x i32> %a, <8 x i32> %b) {
1926 ; ALL-LABEL: shuffle_v8i32_9832dc76:
1927 ; ALL:       # %bb.0:
1928 ; ALL-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]
1929 ; ALL-NEXT:    retq
1930   %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>
1931   ret <8 x i32> %shuffle
1934 define <8 x i32> @shuffle_v8i32_9810dc54(<8 x i32> %a, <8 x i32> %b) {
1935 ; ALL-LABEL: shuffle_v8i32_9810dc54:
1936 ; ALL:       # %bb.0:
1937 ; ALL-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]
1938 ; ALL-NEXT:    retq
1939   %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>
1940   ret <8 x i32> %shuffle
1943 define <8 x i32> @shuffle_v8i32_08194c5d(<8 x i32> %a, <8 x i32> %b) {
1944 ; ALL-LABEL: shuffle_v8i32_08194c5d:
1945 ; ALL:       # %bb.0:
1946 ; ALL-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
1947 ; ALL-NEXT:    retq
1948   %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>
1949   ret <8 x i32> %shuffle
1952 define <8 x i32> @shuffle_v8i32_2a3b6e7f(<8 x i32> %a, <8 x i32> %b) {
1953 ; ALL-LABEL: shuffle_v8i32_2a3b6e7f:
1954 ; ALL:       # %bb.0:
1955 ; ALL-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
1956 ; ALL-NEXT:    retq
1957   %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>
1958   ret <8 x i32> %shuffle
1961 define <8 x i32> @shuffle_v8i32_08192a3b(<8 x i32> %a, <8 x i32> %b) {
1962 ; AVX1OR2-LABEL: shuffle_v8i32_08192a3b:
1963 ; AVX1OR2:       # %bb.0:
1964 ; AVX1OR2-NEXT:    vunpckhps {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1965 ; AVX1OR2-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1966 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1967 ; AVX1OR2-NEXT:    retq
1969 ; AVX512VL-LABEL: shuffle_v8i32_08192a3b:
1970 ; AVX512VL:       # %bb.0:
1971 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,8,1,9,2,10,3,11]
1972 ; AVX512VL-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
1973 ; AVX512VL-NEXT:    retq
1974   %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>
1975   ret <8 x i32> %shuffle
1978 define <8 x i32> @shuffle_v8i32_08991abb(<8 x i32> %a, <8 x i32> %b) {
1979 ; AVX1-LABEL: shuffle_v8i32_08991abb:
1980 ; AVX1:       # %bb.0:
1981 ; AVX1-NEXT:    vmovlhps {{.*#+}} xmm2 = xmm0[0],xmm1[0]
1982 ; AVX1-NEXT:    vshufps {{.*#+}} xmm2 = xmm2[0,2],xmm1[1,1]
1983 ; AVX1-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1984 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,2,3,3]
1985 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
1986 ; AVX1-NEXT:    retq
1988 ; AVX2-SLOW-LABEL: shuffle_v8i32_08991abb:
1989 ; AVX2-SLOW:       # %bb.0:
1990 ; AVX2-SLOW-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
1991 ; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
1992 ; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
1993 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,0,1,1,4,4,5,5]
1994 ; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
1995 ; AVX2-SLOW-NEXT:    retq
1997 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_08991abb:
1998 ; AVX2-FAST-ALL:       # %bb.0:
1999 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
2000 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm2, %ymm0
2001 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <u,0,1,1,u,2,3,3>
2002 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm1, %ymm2, %ymm1
2003 ; AVX2-FAST-ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
2004 ; AVX2-FAST-ALL-NEXT:    retq
2006 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_08991abb:
2007 ; AVX2-FAST-PERLANE:       # %bb.0:
2008 ; AVX2-FAST-PERLANE-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
2009 ; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
2010 ; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
2011 ; AVX2-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,0,1,1,4,4,5,5]
2012 ; AVX2-FAST-PERLANE-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
2013 ; AVX2-FAST-PERLANE-NEXT:    retq
2015 ; AVX512VL-LABEL: shuffle_v8i32_08991abb:
2016 ; AVX512VL:       # %bb.0:
2017 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm2 = [8,0,1,1,9,2,3,3]
2018 ; AVX512VL-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
2019 ; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm0
2020 ; AVX512VL-NEXT:    retq
2021   %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>
2022   ret <8 x i32> %shuffle
2025 define <8 x i32> @shuffle_v8i32_091b2d3f(<8 x i32> %a, <8 x i32> %b) {
2026 ; AVX1-LABEL: shuffle_v8i32_091b2d3f:
2027 ; AVX1:       # %bb.0:
2028 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero
2029 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,1,3,3]
2030 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
2031 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
2032 ; AVX1-NEXT:    retq
2034 ; AVX2-LABEL: shuffle_v8i32_091b2d3f:
2035 ; AVX2:       # %bb.0:
2036 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2037 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
2038 ; AVX2-NEXT:    retq
2040 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_091b2d3f:
2041 ; AVX512VL-SLOW:       # %bb.0:
2042 ; AVX512VL-SLOW-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2043 ; AVX512VL-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
2044 ; AVX512VL-SLOW-NEXT:    retq
2046 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_091b2d3f:
2047 ; AVX512VL-FAST-ALL:       # %bb.0:
2048 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,9,1,11,2,13,3,15]
2049 ; AVX512VL-FAST-ALL-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
2050 ; AVX512VL-FAST-ALL-NEXT:    retq
2052 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_091b2d3f:
2053 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2054 ; AVX512VL-FAST-PERLANE-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2055 ; AVX512VL-FAST-PERLANE-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
2056 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2057   %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>
2058   ret <8 x i32> %shuffle
2061 define <8 x i32> @shuffle_v8i32_09ab1def(<8 x i32> %a, <8 x i32> %b) {
2062 ; AVX1-LABEL: shuffle_v8i32_09ab1def:
2063 ; AVX1:       # %bb.0:
2064 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm2 = xmm0[1,1,3,3]
2065 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2066 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
2067 ; AVX1-NEXT:    retq
2069 ; AVX2-SLOW-LABEL: shuffle_v8i32_09ab1def:
2070 ; AVX2-SLOW:       # %bb.0:
2071 ; AVX2-SLOW-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
2072 ; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
2073 ; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
2074 ; AVX2-SLOW-NEXT:    retq
2076 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_09ab1def:
2077 ; AVX2-FAST-ALL:       # %bb.0:
2078 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <0,u,u,u,1,u,u,u>
2079 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm2, %ymm0
2080 ; AVX2-FAST-ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
2081 ; AVX2-FAST-ALL-NEXT:    retq
2083 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_09ab1def:
2084 ; AVX2-FAST-PERLANE:       # %bb.0:
2085 ; AVX2-FAST-PERLANE-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
2086 ; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]
2087 ; AVX2-FAST-PERLANE-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]
2088 ; AVX2-FAST-PERLANE-NEXT:    retq
2090 ; AVX512VL-LABEL: shuffle_v8i32_09ab1def:
2091 ; AVX512VL:       # %bb.0:
2092 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm2 = [8,1,2,3,9,5,6,7]
2093 ; AVX512VL-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
2094 ; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm0
2095 ; AVX512VL-NEXT:    retq
2096   %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>
2097   ret <8 x i32> %shuffle
2100 define <8 x i32> @shuffle_v8i32_00014445(<8 x i32> %a, <8 x i32> %b) {
2101 ; ALL-LABEL: shuffle_v8i32_00014445:
2102 ; ALL:       # %bb.0:
2103 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]
2104 ; ALL-NEXT:    retq
2105   %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>
2106   ret <8 x i32> %shuffle
2109 define <8 x i32> @shuffle_v8i32_00204464(<8 x i32> %a, <8 x i32> %b) {
2110 ; ALL-LABEL: shuffle_v8i32_00204464:
2111 ; ALL:       # %bb.0:
2112 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]
2113 ; ALL-NEXT:    retq
2114   %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>
2115   ret <8 x i32> %shuffle
2118 define <8 x i32> @shuffle_v8i32_03004744(<8 x i32> %a, <8 x i32> %b) {
2119 ; ALL-LABEL: shuffle_v8i32_03004744:
2120 ; ALL:       # %bb.0:
2121 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,7,4,4]
2122 ; ALL-NEXT:    retq
2123   %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>
2124   ret <8 x i32> %shuffle
2127 define <8 x i32> @shuffle_v8i32_10005444(<8 x i32> %a, <8 x i32> %b) {
2128 ; ALL-LABEL: shuffle_v8i32_10005444:
2129 ; ALL:       # %bb.0:
2130 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,5,4,4,4]
2131 ; ALL-NEXT:    retq
2132   %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>
2133   ret <8 x i32> %shuffle
2136 define <8 x i32> @shuffle_v8i32_22006644(<8 x i32> %a, <8 x i32> %b) {
2137 ; ALL-LABEL: shuffle_v8i32_22006644:
2138 ; ALL:       # %bb.0:
2139 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,6,4,4]
2140 ; ALL-NEXT:    retq
2141   %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>
2142   ret <8 x i32> %shuffle
2145 define <8 x i32> @shuffle_v8i32_33307774(<8 x i32> %a, <8 x i32> %b) {
2146 ; ALL-LABEL: shuffle_v8i32_33307774:
2147 ; ALL:       # %bb.0:
2148 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,7,7,4]
2149 ; ALL-NEXT:    retq
2150   %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>
2151   ret <8 x i32> %shuffle
2154 define <8 x i32> @shuffle_v8i32_32107654(<8 x i32> %a, <8 x i32> %b) {
2155 ; ALL-LABEL: shuffle_v8i32_32107654:
2156 ; ALL:       # %bb.0:
2157 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2158 ; ALL-NEXT:    retq
2159   %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>
2160   ret <8 x i32> %shuffle
2163 define <8 x i32> @shuffle_v8i32_00234467(<8 x i32> %a, <8 x i32> %b) {
2164 ; ALL-LABEL: shuffle_v8i32_00234467:
2165 ; ALL:       # %bb.0:
2166 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,4,4,6,7]
2167 ; ALL-NEXT:    retq
2168   %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>
2169   ret <8 x i32> %shuffle
2172 define <8 x i32> @shuffle_v8i32_00224466(<8 x i32> %a, <8 x i32> %b) {
2173 ; AVX1-LABEL: shuffle_v8i32_00224466:
2174 ; AVX1:       # %bb.0:
2175 ; AVX1-NEXT:    vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]
2176 ; AVX1-NEXT:    retq
2178 ; AVX2OR512VL-LABEL: shuffle_v8i32_00224466:
2179 ; AVX2OR512VL:       # %bb.0:
2180 ; AVX2OR512VL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]
2181 ; AVX2OR512VL-NEXT:    retq
2182   %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>
2183   ret <8 x i32> %shuffle
2186 define <8 x i32> @shuffle_v8i32_10325476(<8 x i32> %a, <8 x i32> %b) {
2187 ; ALL-LABEL: shuffle_v8i32_10325476:
2188 ; ALL:       # %bb.0:
2189 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]
2190 ; ALL-NEXT:    retq
2191   %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>
2192   ret <8 x i32> %shuffle
2195 define <8 x i32> @shuffle_v8i32_11335577(<8 x i32> %a, <8 x i32> %b) {
2196 ; AVX1-LABEL: shuffle_v8i32_11335577:
2197 ; AVX1:       # %bb.0:
2198 ; AVX1-NEXT:    vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
2199 ; AVX1-NEXT:    retq
2201 ; AVX2OR512VL-LABEL: shuffle_v8i32_11335577:
2202 ; AVX2OR512VL:       # %bb.0:
2203 ; AVX2OR512VL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
2204 ; AVX2OR512VL-NEXT:    retq
2205   %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>
2206   ret <8 x i32> %shuffle
2209 define <8 x i32> @shuffle_v8i32_10235467(<8 x i32> %a, <8 x i32> %b) {
2210 ; ALL-LABEL: shuffle_v8i32_10235467:
2211 ; ALL:       # %bb.0:
2212 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,3,5,4,6,7]
2213 ; ALL-NEXT:    retq
2214   %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>
2215   ret <8 x i32> %shuffle
2218 define <8 x i32> @shuffle_v8i32_10225466(<8 x i32> %a, <8 x i32> %b) {
2219 ; ALL-LABEL: shuffle_v8i32_10225466:
2220 ; ALL:       # %bb.0:
2221 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,2,2,5,4,6,6]
2222 ; ALL-NEXT:    retq
2223   %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>
2224   ret <8 x i32> %shuffle
2227 define <8 x i32> @shuffle_v8i32_00015444(<8 x i32> %a, <8 x i32> %b) {
2228 ; AVX1-LABEL: shuffle_v8i32_00015444:
2229 ; AVX1:       # %bb.0:
2230 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,5,4,4,4]
2231 ; AVX1-NEXT:    retq
2233 ; AVX2OR512VL-LABEL: shuffle_v8i32_00015444:
2234 ; AVX2OR512VL:       # %bb.0:
2235 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,0,1,5,4,4,4]
2236 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2237 ; AVX2OR512VL-NEXT:    retq
2238   %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>
2239   ret <8 x i32> %shuffle
2242 define <8 x i32> @shuffle_v8i32_00204644(<8 x i32> %a, <8 x i32> %b) {
2243 ; AVX1-LABEL: shuffle_v8i32_00204644:
2244 ; AVX1:       # %bb.0:
2245 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,6,4,4]
2246 ; AVX1-NEXT:    retq
2248 ; AVX2OR512VL-LABEL: shuffle_v8i32_00204644:
2249 ; AVX2OR512VL:       # %bb.0:
2250 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,2,0,4,6,4,4]
2251 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2252 ; AVX2OR512VL-NEXT:    retq
2253   %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>
2254   ret <8 x i32> %shuffle
2257 define <8 x i32> @shuffle_v8i32_03004474(<8 x i32> %a, <8 x i32> %b) {
2258 ; AVX1-LABEL: shuffle_v8i32_03004474:
2259 ; AVX1:       # %bb.0:
2260 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,4,7,4]
2261 ; AVX1-NEXT:    retq
2263 ; AVX2OR512VL-LABEL: shuffle_v8i32_03004474:
2264 ; AVX2OR512VL:       # %bb.0:
2265 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,3,0,0,4,4,7,4]
2266 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2267 ; AVX2OR512VL-NEXT:    retq
2268   %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>
2269   ret <8 x i32> %shuffle
2272 define <8 x i32> @shuffle_v8i32_10004444(<8 x i32> %a, <8 x i32> %b) {
2273 ; AVX1-LABEL: shuffle_v8i32_10004444:
2274 ; AVX1:       # %bb.0:
2275 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,4,4,4,4]
2276 ; AVX1-NEXT:    retq
2278 ; AVX2OR512VL-LABEL: shuffle_v8i32_10004444:
2279 ; AVX2OR512VL:       # %bb.0:
2280 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [1,0,0,0,4,4,4,4]
2281 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2282 ; AVX2OR512VL-NEXT:    retq
2283   %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>
2284   ret <8 x i32> %shuffle
2287 define <8 x i32> @shuffle_v8i32_22006446(<8 x i32> %a, <8 x i32> %b) {
2288 ; AVX1-LABEL: shuffle_v8i32_22006446:
2289 ; AVX1:       # %bb.0:
2290 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,4,4,6]
2291 ; AVX1-NEXT:    retq
2293 ; AVX2OR512VL-LABEL: shuffle_v8i32_22006446:
2294 ; AVX2OR512VL:       # %bb.0:
2295 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [2,2,0,0,6,4,4,6]
2296 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2297 ; AVX2OR512VL-NEXT:    retq
2298   %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>
2299   ret <8 x i32> %shuffle
2302 define <8 x i32> @shuffle_v8i32_33307474(<8 x i32> %a, <8 x i32> %b) {
2303 ; AVX1-LABEL: shuffle_v8i32_33307474:
2304 ; AVX1:       # %bb.0:
2305 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,4,7,4]
2306 ; AVX1-NEXT:    retq
2308 ; AVX2OR512VL-LABEL: shuffle_v8i32_33307474:
2309 ; AVX2OR512VL:       # %bb.0:
2310 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [3,3,3,0,7,4,7,4]
2311 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2312 ; AVX2OR512VL-NEXT:    retq
2313   %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>
2314   ret <8 x i32> %shuffle
2317 define <8 x i32> @shuffle_v8i32_32104567(<8 x i32> %a, <8 x i32> %b) {
2318 ; AVX1-LABEL: shuffle_v8i32_32104567:
2319 ; AVX1:       # %bb.0:
2320 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7]
2321 ; AVX1-NEXT:    retq
2323 ; AVX2OR512VL-LABEL: shuffle_v8i32_32104567:
2324 ; AVX2OR512VL:       # %bb.0:
2325 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [3,2,1,0,4,5,6,7]
2326 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2327 ; AVX2OR512VL-NEXT:    retq
2328   %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>
2329   ret <8 x i32> %shuffle
2332 define <8 x i32> @shuffle_v8i32_00236744(<8 x i32> %a, <8 x i32> %b) {
2333 ; AVX1-LABEL: shuffle_v8i32_00236744:
2334 ; AVX1:       # %bb.0:
2335 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,6,7,4,4]
2336 ; AVX1-NEXT:    retq
2338 ; AVX2OR512VL-LABEL: shuffle_v8i32_00236744:
2339 ; AVX2OR512VL:       # %bb.0:
2340 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,2,3,6,7,4,4]
2341 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2342 ; AVX2OR512VL-NEXT:    retq
2343   %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>
2344   ret <8 x i32> %shuffle
2347 define <8 x i32> @shuffle_v8i32_00226644(<8 x i32> %a, <8 x i32> %b) {
2348 ; AVX1-LABEL: shuffle_v8i32_00226644:
2349 ; AVX1:       # %bb.0:
2350 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,6,6,4,4]
2351 ; AVX1-NEXT:    retq
2353 ; AVX2OR512VL-LABEL: shuffle_v8i32_00226644:
2354 ; AVX2OR512VL:       # %bb.0:
2355 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,0,2,2,6,6,4,4]
2356 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2357 ; AVX2OR512VL-NEXT:    retq
2358   %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>
2359   ret <8 x i32> %shuffle
2362 define <8 x i32> @shuffle_v8i32_10324567(<8 x i32> %a, <8 x i32> %b) {
2363 ; AVX1-LABEL: shuffle_v8i32_10324567:
2364 ; AVX1:       # %bb.0:
2365 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7]
2366 ; AVX1-NEXT:    retq
2368 ; AVX2OR512VL-LABEL: shuffle_v8i32_10324567:
2369 ; AVX2OR512VL:       # %bb.0:
2370 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [1,0,3,2,4,5,6,7]
2371 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2372 ; AVX2OR512VL-NEXT:    retq
2373   %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>
2374   ret <8 x i32> %shuffle
2377 define <8 x i32> @shuffle_v8i32_11334567(<8 x i32> %a, <8 x i32> %b) {
2378 ; AVX1-LABEL: shuffle_v8i32_11334567:
2379 ; AVX1:       # %bb.0:
2380 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7]
2381 ; AVX1-NEXT:    retq
2383 ; AVX2OR512VL-LABEL: shuffle_v8i32_11334567:
2384 ; AVX2OR512VL:       # %bb.0:
2385 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [1,1,3,3,4,5,6,7]
2386 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2387 ; AVX2OR512VL-NEXT:    retq
2388   %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>
2389   ret <8 x i32> %shuffle
2392 define <8 x i32> @shuffle_v8i32_01235467(<8 x i32> %a, <8 x i32> %b) {
2393 ; AVX1-LABEL: shuffle_v8i32_01235467:
2394 ; AVX1:       # %bb.0:
2395 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,7]
2396 ; AVX1-NEXT:    retq
2398 ; AVX2OR512VL-LABEL: shuffle_v8i32_01235467:
2399 ; AVX2OR512VL:       # %bb.0:
2400 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,3,5,4,6,7]
2401 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2402 ; AVX2OR512VL-NEXT:    retq
2403   %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>
2404   ret <8 x i32> %shuffle
2407 define <8 x i32> @shuffle_v8i32_01235466(<8 x i32> %a, <8 x i32> %b) {
2408 ; AVX1-LABEL: shuffle_v8i32_01235466:
2409 ; AVX1:       # %bb.0:
2410 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,6]
2411 ; AVX1-NEXT:    retq
2413 ; AVX2OR512VL-LABEL: shuffle_v8i32_01235466:
2414 ; AVX2OR512VL:       # %bb.0:
2415 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,3,5,4,6,6]
2416 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2417 ; AVX2OR512VL-NEXT:    retq
2418   %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>
2419   ret <8 x i32> %shuffle
2422 define <8 x i32> @shuffle_v8i32_002u6u44(<8 x i32> %a, <8 x i32> %b) {
2423 ; AVX1-LABEL: shuffle_v8i32_002u6u44:
2424 ; AVX1:       # %bb.0:
2425 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,u,6,u,4,4]
2426 ; AVX1-NEXT:    retq
2428 ; AVX2OR512VL-LABEL: shuffle_v8i32_002u6u44:
2429 ; AVX2OR512VL:       # %bb.0:
2430 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = <0,0,2,u,6,u,4,4>
2431 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2432 ; AVX2OR512VL-NEXT:    retq
2433   %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>
2434   ret <8 x i32> %shuffle
2437 define <8 x i32> @shuffle_v8i32_00uu66uu(<8 x i32> %a, <8 x i32> %b) {
2438 ; AVX1-LABEL: shuffle_v8i32_00uu66uu:
2439 ; AVX1:       # %bb.0:
2440 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,u,u,6,6,u,u]
2441 ; AVX1-NEXT:    retq
2443 ; AVX2OR512VL-LABEL: shuffle_v8i32_00uu66uu:
2444 ; AVX2OR512VL:       # %bb.0:
2445 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = <0,0,u,u,6,6,u,u>
2446 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2447 ; AVX2OR512VL-NEXT:    retq
2448   %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>
2449   ret <8 x i32> %shuffle
2452 define <8 x i32> @shuffle_v8i32_103245uu(<8 x i32> %a, <8 x i32> %b) {
2453 ; AVX1-LABEL: shuffle_v8i32_103245uu:
2454 ; AVX1:       # %bb.0:
2455 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,u,u]
2456 ; AVX1-NEXT:    retq
2458 ; AVX2OR512VL-LABEL: shuffle_v8i32_103245uu:
2459 ; AVX2OR512VL:       # %bb.0:
2460 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = <1,0,3,2,4,5,u,u>
2461 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2462 ; AVX2OR512VL-NEXT:    retq
2463   %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>
2464   ret <8 x i32> %shuffle
2467 define <8 x i32> @shuffle_v8i32_1133uu67(<8 x i32> %a, <8 x i32> %b) {
2468 ; AVX1-LABEL: shuffle_v8i32_1133uu67:
2469 ; AVX1:       # %bb.0:
2470 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,u,u,6,7]
2471 ; AVX1-NEXT:    retq
2473 ; AVX2OR512VL-LABEL: shuffle_v8i32_1133uu67:
2474 ; AVX2OR512VL:       # %bb.0:
2475 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = <1,1,3,3,u,u,6,7>
2476 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2477 ; AVX2OR512VL-NEXT:    retq
2478   %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>
2479   ret <8 x i32> %shuffle
2482 define <8 x i32> @shuffle_v8i32_0uu354uu(<8 x i32> %a, <8 x i32> %b) {
2483 ; AVX1-LABEL: shuffle_v8i32_0uu354uu:
2484 ; AVX1:       # %bb.0:
2485 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,u,u,3,5,4,u,u]
2486 ; AVX1-NEXT:    retq
2488 ; AVX2OR512VL-LABEL: shuffle_v8i32_0uu354uu:
2489 ; AVX2OR512VL:       # %bb.0:
2490 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = <0,u,u,3,5,4,u,u>
2491 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2492 ; AVX2OR512VL-NEXT:    retq
2493   %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>
2494   ret <8 x i32> %shuffle
2497 define <8 x i32> @shuffle_v8i32_uuu3uu66(<8 x i32> %a, <8 x i32> %b) {
2498 ; AVX1-LABEL: shuffle_v8i32_uuu3uu66:
2499 ; AVX1:       # %bb.0:
2500 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[u,u,u,3,u,u,6,6]
2501 ; AVX1-NEXT:    retq
2503 ; AVX2OR512VL-LABEL: shuffle_v8i32_uuu3uu66:
2504 ; AVX2OR512VL:       # %bb.0:
2505 ; AVX2OR512VL-NEXT:    vmovaps {{.*#+}} ymm1 = <u,u,u,3,u,u,6,6>
2506 ; AVX2OR512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2507 ; AVX2OR512VL-NEXT:    retq
2508   %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>
2509   ret <8 x i32> %shuffle
2512 define <8 x i32> @shuffle_v8i32_6caa87e5(<8 x i32> %a, <8 x i32> %b) {
2513 ; AVX1-LABEL: shuffle_v8i32_6caa87e5:
2514 ; AVX1:       # %bb.0:
2515 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]
2516 ; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm2[0,0],ymm1[2,2],ymm2[4,4],ymm1[6,6]
2517 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
2518 ; AVX1-NEXT:    vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2]
2519 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]
2520 ; AVX1-NEXT:    retq
2522 ; AVX2-SLOW-LABEL: shuffle_v8i32_6caa87e5:
2523 ; AVX2-SLOW:       # %bb.0:
2524 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,1,3,2]
2525 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[0,0,2,2,4,4,6,6]
2526 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,1,0,3]
2527 ; AVX2-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]
2528 ; AVX2-SLOW-NEXT:    retq
2530 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_6caa87e5:
2531 ; AVX2-FAST-ALL:       # %bb.0:
2532 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm2 = <u,4,2,2,0,u,6,u>
2533 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm1, %ymm2, %ymm1
2534 ; AVX2-FAST-ALL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,1,3,2]
2535 ; AVX2-FAST-ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]
2536 ; AVX2-FAST-ALL-NEXT:    retq
2538 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_6caa87e5:
2539 ; AVX2-FAST-PERLANE:       # %bb.0:
2540 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,1,3,2]
2541 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm1 = ymm1[0,0,2,2,4,4,6,6]
2542 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,1,0,3]
2543 ; AVX2-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]
2544 ; AVX2-FAST-PERLANE-NEXT:    retq
2546 ; AVX512VL-LABEL: shuffle_v8i32_6caa87e5:
2547 ; AVX512VL:       # %bb.0:
2548 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm2 = [14,4,2,2,0,15,6,13]
2549 ; AVX512VL-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
2550 ; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm0
2551 ; AVX512VL-NEXT:    retq
2552   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 6, i32 12, i32 10, i32 10, i32 8, i32 7, i32 14, i32 5>
2553   ret <8 x i32> %shuffle
2556 define <8 x i32> @shuffle_v8i32_32103210(<8 x i32> %a, <8 x i32> %b) {
2557 ; AVX1-LABEL: shuffle_v8i32_32103210:
2558 ; AVX1:       # %bb.0:
2559 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
2560 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
2561 ; AVX1-NEXT:    retq
2563 ; AVX2-SLOW-LABEL: shuffle_v8i32_32103210:
2564 ; AVX2-SLOW:       # %bb.0:
2565 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
2566 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
2567 ; AVX2-SLOW-NEXT:    retq
2569 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_32103210:
2570 ; AVX2-FAST-ALL:       # %bb.0:
2571 ; AVX2-FAST-ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]
2572 ; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
2573 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2574 ; AVX2-FAST-ALL-NEXT:    retq
2576 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_32103210:
2577 ; AVX2-FAST-PERLANE:       # %bb.0:
2578 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
2579 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
2580 ; AVX2-FAST-PERLANE-NEXT:    retq
2582 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_32103210:
2583 ; AVX512VL-SLOW:       # %bb.0:
2584 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
2585 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
2586 ; AVX512VL-SLOW-NEXT:    retq
2588 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_32103210:
2589 ; AVX512VL-FAST-ALL:       # %bb.0:
2590 ; AVX512VL-FAST-ALL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]
2591 ; AVX512VL-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
2592 ; AVX512VL-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm0
2593 ; AVX512VL-FAST-ALL-NEXT:    retq
2595 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_32103210:
2596 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2597 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
2598 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]
2599 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2600   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 3, i32 2, i32 1, i32 0>
2601   ret <8 x i32> %shuffle
2604 define <8 x i32> @shuffle_v8i32_76547654(<8 x i32> %a, <8 x i32> %b) {
2605 ; AVX1-LABEL: shuffle_v8i32_76547654:
2606 ; AVX1:       # %bb.0:
2607 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
2608 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2609 ; AVX1-NEXT:    retq
2611 ; AVX2-SLOW-LABEL: shuffle_v8i32_76547654:
2612 ; AVX2-SLOW:       # %bb.0:
2613 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2614 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
2615 ; AVX2-SLOW-NEXT:    retq
2617 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_76547654:
2618 ; AVX2-FAST-ALL:       # %bb.0:
2619 ; AVX2-FAST-ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]
2620 ; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
2621 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2622 ; AVX2-FAST-ALL-NEXT:    retq
2624 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_76547654:
2625 ; AVX2-FAST-PERLANE:       # %bb.0:
2626 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2627 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
2628 ; AVX2-FAST-PERLANE-NEXT:    retq
2630 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_76547654:
2631 ; AVX512VL-SLOW:       # %bb.0:
2632 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2633 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
2634 ; AVX512VL-SLOW-NEXT:    retq
2636 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_76547654:
2637 ; AVX512VL-FAST-ALL:       # %bb.0:
2638 ; AVX512VL-FAST-ALL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]
2639 ; AVX512VL-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]
2640 ; AVX512VL-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm0
2641 ; AVX512VL-FAST-ALL-NEXT:    retq
2643 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_76547654:
2644 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2645 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2646 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]
2647 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2648   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 7, i32 6, i32 5, i32 4>
2649   ret <8 x i32> %shuffle
2652 define <8 x i32> @shuffle_v8i32_76543210(<8 x i32> %a, <8 x i32> %b) {
2653 ; AVX1-LABEL: shuffle_v8i32_76543210:
2654 ; AVX1:       # %bb.0:
2655 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
2656 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2657 ; AVX1-NEXT:    retq
2659 ; AVX2-SLOW-LABEL: shuffle_v8i32_76543210:
2660 ; AVX2-SLOW:       # %bb.0:
2661 ; AVX2-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2662 ; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
2663 ; AVX2-SLOW-NEXT:    retq
2665 ; AVX2-FAST-ALL-LABEL: shuffle_v8i32_76543210:
2666 ; AVX2-FAST-ALL:       # %bb.0:
2667 ; AVX2-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]
2668 ; AVX2-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2669 ; AVX2-FAST-ALL-NEXT:    retq
2671 ; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_76543210:
2672 ; AVX2-FAST-PERLANE:       # %bb.0:
2673 ; AVX2-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2674 ; AVX2-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
2675 ; AVX2-FAST-PERLANE-NEXT:    retq
2677 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_76543210:
2678 ; AVX512VL-SLOW:       # %bb.0:
2679 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2680 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
2681 ; AVX512VL-SLOW-NEXT:    retq
2683 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_76543210:
2684 ; AVX512VL-FAST-ALL:       # %bb.0:
2685 ; AVX512VL-FAST-ALL-NEXT:    vmovaps {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]
2686 ; AVX512VL-FAST-ALL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
2687 ; AVX512VL-FAST-ALL-NEXT:    retq
2689 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_76543210:
2690 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2691 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2692 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]
2693 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2694   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
2695   ret <8 x i32> %shuffle
2698 define <8 x i32> @shuffle_v8i32_3210ba98(<8 x i32> %a, <8 x i32> %b) {
2699 ; AVX1OR2-LABEL: shuffle_v8i32_3210ba98:
2700 ; AVX1OR2:       # %bb.0:
2701 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
2702 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2703 ; AVX1OR2-NEXT:    retq
2705 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_3210ba98:
2706 ; AVX512VL-SLOW:       # %bb.0:
2707 ; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
2708 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2709 ; AVX512VL-SLOW-NEXT:    retq
2711 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_3210ba98:
2712 ; AVX512VL-FAST-ALL:       # %bb.0:
2713 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa {{.*#+}} ymm2 = [3,2,1,0,11,10,9,8]
2714 ; AVX512VL-FAST-ALL-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
2715 ; AVX512VL-FAST-ALL-NEXT:    retq
2717 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_3210ba98:
2718 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2719 ; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
2720 ; AVX512VL-FAST-PERLANE-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2721 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2722   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 11, i32 10, i32 9, i32 8>
2723   ret <8 x i32> %shuffle
2726 define <8 x i32> @shuffle_v8i32_3210fedc(<8 x i32> %a, <8 x i32> %b) {
2727 ; AVX1OR2-LABEL: shuffle_v8i32_3210fedc:
2728 ; AVX1OR2:       # %bb.0:
2729 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
2730 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2731 ; AVX1OR2-NEXT:    retq
2733 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_3210fedc:
2734 ; AVX512VL-SLOW:       # %bb.0:
2735 ; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
2736 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2737 ; AVX512VL-SLOW-NEXT:    retq
2739 ; AVX512VL-FAST-LABEL: shuffle_v8i32_3210fedc:
2740 ; AVX512VL-FAST:       # %bb.0:
2741 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]
2742 ; AVX512VL-FAST-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
2743 ; AVX512VL-FAST-NEXT:    retq
2744   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12>
2745   ret <8 x i32> %shuffle
2748 define <8 x i32> @shuffle_v8i32_7654fedc(<8 x i32> %a, <8 x i32> %b) {
2749 ; AVX1OR2-LABEL: shuffle_v8i32_7654fedc:
2750 ; AVX1OR2:       # %bb.0:
2751 ; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
2752 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2753 ; AVX1OR2-NEXT:    retq
2755 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_7654fedc:
2756 ; AVX512VL-SLOW:       # %bb.0:
2757 ; AVX512VL-SLOW-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
2758 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2759 ; AVX512VL-SLOW-NEXT:    retq
2761 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_7654fedc:
2762 ; AVX512VL-FAST-ALL:       # %bb.0:
2763 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]
2764 ; AVX512VL-FAST-ALL-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
2765 ; AVX512VL-FAST-ALL-NEXT:    retq
2767 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_7654fedc:
2768 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2769 ; AVX512VL-FAST-PERLANE-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
2770 ; AVX512VL-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2771 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2772   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 15, i32 14, i32 13, i32 12>
2773   ret <8 x i32> %shuffle
2776 define <8 x i32> @shuffle_v8i32_fedc7654(<8 x i32> %a, <8 x i32> %b) {
2777 ; AVX1OR2-LABEL: shuffle_v8i32_fedc7654:
2778 ; AVX1OR2:       # %bb.0:
2779 ; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]
2780 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2781 ; AVX1OR2-NEXT:    retq
2783 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_fedc7654:
2784 ; AVX512VL-SLOW:       # %bb.0:
2785 ; AVX512VL-SLOW-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]
2786 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2787 ; AVX512VL-SLOW-NEXT:    retq
2789 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_fedc7654:
2790 ; AVX512VL-FAST-ALL:       # %bb.0:
2791 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]
2792 ; AVX512VL-FAST-ALL-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
2793 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa %ymm2, %ymm0
2794 ; AVX512VL-FAST-ALL-NEXT:    retq
2796 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_fedc7654:
2797 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2798 ; AVX512VL-FAST-PERLANE-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]
2799 ; AVX512VL-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2800 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2801   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 15, i32 14, i32 13, i32 12, i32 7, i32 6, i32 5, i32 4>
2802   ret <8 x i32> %shuffle
2805 define <8 x i32> @shuffle_v8i32_ba987654(<8 x i32> %a, <8 x i32> %b) {
2806 ; AVX1OR2-LABEL: shuffle_v8i32_ba987654:
2807 ; AVX1OR2:       # %bb.0:
2808 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
2809 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2810 ; AVX1OR2-NEXT:    retq
2812 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_ba987654:
2813 ; AVX512VL-SLOW:       # %bb.0:
2814 ; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
2815 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2816 ; AVX512VL-SLOW-NEXT:    retq
2818 ; AVX512VL-FAST-LABEL: shuffle_v8i32_ba987654:
2819 ; AVX512VL-FAST:       # %bb.0:
2820 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]
2821 ; AVX512VL-FAST-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
2822 ; AVX512VL-FAST-NEXT:    vmovdqa %ymm2, %ymm0
2823 ; AVX512VL-FAST-NEXT:    retq
2824   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>
2825   ret <8 x i32> %shuffle
2828 define <8 x i32> @shuffle_v8i32_ba983210(<8 x i32> %a, <8 x i32> %b) {
2829 ; AVX1OR2-LABEL: shuffle_v8i32_ba983210:
2830 ; AVX1OR2:       # %bb.0:
2831 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
2832 ; AVX1OR2-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2833 ; AVX1OR2-NEXT:    retq
2835 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_ba983210:
2836 ; AVX512VL-SLOW:       # %bb.0:
2837 ; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
2838 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
2839 ; AVX512VL-SLOW-NEXT:    retq
2841 ; AVX512VL-FAST-LABEL: shuffle_v8i32_ba983210:
2842 ; AVX512VL-FAST:       # %bb.0:
2843 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]
2844 ; AVX512VL-FAST-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
2845 ; AVX512VL-FAST-NEXT:    vmovdqa %ymm2, %ymm0
2846 ; AVX512VL-FAST-NEXT:    retq
2847   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>
2848   ret <8 x i32> %shuffle
2851 define <8 x i32> @shuffle_v8i32_089abcde(<8 x i32> %a, <8 x i32> %b) {
2852 ; AVX1-LABEL: shuffle_v8i32_089abcde:
2853 ; AVX1:       # %bb.0:
2854 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2855 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm1[12,13,14,15],xmm2[0,1,2,3,4,5,6,7,8,9,10,11]
2856 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,2]
2857 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
2858 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
2859 ; AVX1-NEXT:    retq
2861 ; AVX2-LABEL: shuffle_v8i32_089abcde:
2862 ; AVX2:       # %bb.0:
2863 ; AVX2-NEXT:    vmovaps {{.*#+}} ymm2 = <u,0,1,2,3,4,5,6>
2864 ; AVX2-NEXT:    vpermps %ymm1, %ymm2, %ymm1
2865 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
2866 ; AVX2-NEXT:    retq
2868 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_089abcde:
2869 ; AVX512VL-SLOW:       # %bb.0:
2870 ; AVX512VL-SLOW-NEXT:    valignd {{.*#+}} ymm1 = ymm1[7,0,1,2,3,4,5,6]
2871 ; AVX512VL-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
2872 ; AVX512VL-SLOW-NEXT:    retq
2874 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_089abcde:
2875 ; AVX512VL-FAST-ALL:       # %bb.0:
2876 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa {{.*#+}} ymm2 = [8,0,1,2,3,4,5,6]
2877 ; AVX512VL-FAST-ALL-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
2878 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa %ymm2, %ymm0
2879 ; AVX512VL-FAST-ALL-NEXT:    retq
2881 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_089abcde:
2882 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2883 ; AVX512VL-FAST-PERLANE-NEXT:    valignd {{.*#+}} ymm1 = ymm1[7,0,1,2,3,4,5,6]
2884 ; AVX512VL-FAST-PERLANE-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]
2885 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2886   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
2887   ret <8 x i32> %shuffle
2890 define <8 x i32> @shuffle_v8i32_0189abcd(<8 x i32> %a, <8 x i32> %b) {
2891 ; AVX1-LABEL: shuffle_v8i32_0189abcd:
2892 ; AVX1:       # %bb.0:
2893 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
2894 ; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]
2895 ; AVX1-NEXT:    retq
2897 ; AVX2-LABEL: shuffle_v8i32_0189abcd:
2898 ; AVX2:       # %bb.0:
2899 ; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,1,2]
2900 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
2901 ; AVX2-NEXT:    retq
2903 ; AVX512VL-SLOW-LABEL: shuffle_v8i32_0189abcd:
2904 ; AVX512VL-SLOW:       # %bb.0:
2905 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,1,2]
2906 ; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
2907 ; AVX512VL-SLOW-NEXT:    retq
2909 ; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_0189abcd:
2910 ; AVX512VL-FAST-ALL:       # %bb.0:
2911 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa {{.*#+}} ymm2 = [4,0,1,2]
2912 ; AVX512VL-FAST-ALL-NEXT:    vpermi2q %ymm0, %ymm1, %ymm2
2913 ; AVX512VL-FAST-ALL-NEXT:    vmovdqa %ymm2, %ymm0
2914 ; AVX512VL-FAST-ALL-NEXT:    retq
2916 ; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_0189abcd:
2917 ; AVX512VL-FAST-PERLANE:       # %bb.0:
2918 ; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,1,2]
2919 ; AVX512VL-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]
2920 ; AVX512VL-FAST-PERLANE-NEXT:    retq
2921   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13>
2922   ret <8 x i32> %shuffle
2925 define <8 x i32> @shuffle_v8i32_zuu8zuuc(<8 x i32> %a) {
2926 ; AVX1-LABEL: shuffle_v8i32_zuu8zuuc:
2927 ; AVX1:       # %bb.0:
2928 ; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
2929 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[0,0],ymm1[4,4],ymm0[4,4]
2930 ; AVX1-NEXT:    retq
2932 ; AVX2OR512VL-LABEL: shuffle_v8i32_zuu8zuuc:
2933 ; AVX2OR512VL:       # %bb.0:
2934 ; AVX2OR512VL-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19]
2935 ; AVX2OR512VL-NEXT:    retq
2936   %shuffle = shufflevector <8 x i32> zeroinitializer, <8 x i32> %a, <8 x i32> <i32 0, i32 undef, i32 undef, i32 8, i32 0, i32 undef, i32 undef, i32 12>
2937   ret <8 x i32> %shuffle
2940 define <8 x i32> @shuffle_v8i32_9ubzdefz(<8 x i32> %a) {
2941 ; AVX1-LABEL: shuffle_v8i32_9ubzdefz:
2942 ; AVX1:       # %bb.0:
2943 ; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
2944 ; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[3,0],ymm0[3,0],ymm1[7,4],ymm0[7,4]
2945 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]
2946 ; AVX1-NEXT:    retq
2948 ; AVX2OR512VL-LABEL: shuffle_v8i32_9ubzdefz:
2949 ; AVX2OR512VL:       # %bb.0:
2950 ; AVX2OR512VL-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,ymm0[20,21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero
2951 ; AVX2OR512VL-NEXT:    retq
2952   %shuffle = shufflevector <8 x i32> zeroinitializer, <8 x i32> %a, <8 x i32> <i32 9, i32 undef, i32 11, i32 0, i32 13, i32 14, i32 15, i32 0>
2953   ret <8 x i32> %shuffle
2956 define <8 x i32> @shuffle_v8i32_80u1b4uu(<8 x i32> %a, <8 x i32> %b) {
2957 ; ALL-LABEL: shuffle_v8i32_80u1b4uu:
2958 ; ALL:       # %bb.0:
2959 ; ALL-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]
2960 ; ALL-NEXT:    retq
2961   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 0, i32 undef, i32 1, i32 12, i32 4, i32 undef, i32 undef>
2962   ret <8 x i32> %shuffle
2965 define <8 x i32> @shuffle_v8i32_uuuu1111(<8 x i32> %a, <8 x i32> %b) {
2966 ; ALL-LABEL: shuffle_v8i32_uuuu1111:
2967 ; ALL:       # %bb.0:
2968 ; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
2969 ; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
2970 ; ALL-NEXT:    retq
2971   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 1, i32 1, i32 1, i32 1>
2972   ret <8 x i32> %shuffle
2975 define <8 x i32> @shuffle_v8i32_2222uuuu(<8 x i32> %a, <8 x i32> %b) {
2976 ; ALL-LABEL: shuffle_v8i32_2222uuuu:
2977 ; ALL:       # %bb.0:
2978 ; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[2,2,2,2]
2979 ; ALL-NEXT:    retq
2980   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 undef, i32 undef, i32 undef, i32 undef>
2981   ret <8 x i32> %shuffle
2984 define <8 x i32> @shuffle_v8i32_2A3Buuuu(<8 x i32> %a, <8 x i32> %b) {
2985 ; ALL-LABEL: shuffle_v8i32_2A3Buuuu:
2986 ; ALL:       # %bb.0:
2987 ; ALL-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2988 ; ALL-NEXT:    retq
2989   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 undef, i32 undef, i32 undef, i32 undef>
2990   ret <8 x i32> %shuffle
2993 define <8 x i32> @shuffle_v8i32_44444444(<8 x i32> %a, <8 x i32> %b) {
2994 ; AVX1-LABEL: shuffle_v8i32_44444444:
2995 ; AVX1:       # %bb.0:
2996 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
2997 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]
2998 ; AVX1-NEXT:    retq
3000 ; AVX2OR512VL-LABEL: shuffle_v8i32_44444444:
3001 ; AVX2OR512VL:       # %bb.0:
3002 ; AVX2OR512VL-NEXT:    vextractf128 $1, %ymm0, %xmm0
3003 ; AVX2OR512VL-NEXT:    vbroadcastss %xmm0, %ymm0
3004 ; AVX2OR512VL-NEXT:    retq
3005   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
3006   ret <8 x i32> %shuffle
3009 define <8 x i32> @shuffle_v8i32_44444444_bc(<8 x float> %a, <8 x float> %b) {
3010 ; AVX1-LABEL: shuffle_v8i32_44444444_bc:
3011 ; AVX1:       # %bb.0:
3012 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
3013 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]
3014 ; AVX1-NEXT:    retq
3016 ; AVX2OR512VL-LABEL: shuffle_v8i32_44444444_bc:
3017 ; AVX2OR512VL:       # %bb.0:
3018 ; AVX2OR512VL-NEXT:    vextractf128 $1, %ymm0, %xmm0
3019 ; AVX2OR512VL-NEXT:    vbroadcastss %xmm0, %ymm0
3020 ; AVX2OR512VL-NEXT:    retq
3021   %tmp0 = bitcast <8 x float> %a to <8 x i32>
3022   %tmp1 = bitcast <8 x float> %b to <8 x i32>
3023   %shuffle = shufflevector <8 x i32> %tmp0, <8 x i32> %tmp1, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
3024   ret <8 x i32> %shuffle
3027 define <8 x i32> @shuffle_v8i32_5555uuuu(<8 x i32> %a, <8 x i32> %b) {
3028 ; ALL-LABEL: shuffle_v8i32_5555uuuu:
3029 ; ALL:       # %bb.0:
3030 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm0
3031 ; ALL-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,1,1]
3032 ; ALL-NEXT:    retq
3033   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 undef, i32 undef, i32 undef, i32 undef>
3034   ret <8 x i32> %shuffle
3037 define <8 x i32> @shuffle_v8i32_0dcd3f14(<8 x i32> %a, <8 x i32> %b) {
3038 ; AVX1-LABEL: shuffle_v8i32_0dcd3f14:
3039 ; AVX1:       # %bb.0:
3040 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3041 ; AVX1-NEXT:    vblendps {{.*#+}} xmm2 = xmm2[0],xmm0[1,2,3]
3042 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm2 = xmm2[3,1,1,0]
3043 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3044 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm1[2,3,2,3]
3045 ; AVX1-NEXT:    vpermilpd {{.*#+}} ymm1 = ymm1[0,0,3,2]
3046 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5],ymm0[6,7]
3047 ; AVX1-NEXT:    retq
3049 ; AVX2-LABEL: shuffle_v8i32_0dcd3f14:
3050 ; AVX2:       # %bb.0:
3051 ; AVX2-NEXT:    vmovaps {{.*#+}} ymm2 = <0,u,u,u,3,u,1,4>
3052 ; AVX2-NEXT:    vpermps %ymm0, %ymm2, %ymm0
3053 ; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,2,3,3]
3054 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5],ymm0[6,7]
3055 ; AVX2-NEXT:    retq
3057 ; AVX512VL-LABEL: shuffle_v8i32_0dcd3f14:
3058 ; AVX512VL:       # %bb.0:
3059 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm2 = [8,5,4,5,11,7,9,12]
3060 ; AVX512VL-NEXT:    vpermi2d %ymm0, %ymm1, %ymm2
3061 ; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm0
3062 ; AVX512VL-NEXT:    retq
3063   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 13, i32 12, i32 13, i32 3, i32 15, i32 1, i32 4>
3064   ret <8 x i32> %shuffle
3067 ; PR32453
3068 define <8 x i32> @shuffle_v8i32_uuuuuu7u(<8 x i32> %a, <8 x i32> %b) nounwind {
3069 ; AVX1-LABEL: shuffle_v8i32_uuuuuu7u:
3070 ; AVX1:       # %bb.0:
3071 ; AVX1-NEXT:    vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
3072 ; AVX1-NEXT:    retq
3074 ; AVX2OR512VL-LABEL: shuffle_v8i32_uuuuuu7u:
3075 ; AVX2OR512VL:       # %bb.0:
3076 ; AVX2OR512VL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,3,7,7,7,7]
3077 ; AVX2OR512VL-NEXT:    retq
3078   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 7, i32 undef>
3079   ret <8 x i32> %shuffle
3082 define <8 x i32> @shuffle_v8i32_32107654_v4i32(<4 x i32> %a, <4 x i32> %b) {
3083 ; ALL-LABEL: shuffle_v8i32_32107654_v4i32:
3084 ; ALL:       # %bb.0:
3085 ; ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0
3086 ; ALL-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3087 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]
3088 ; ALL-NEXT:    retq
3089   %1 = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
3090   %2 = shufflevector <4 x i32> %b, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
3091   %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
3092   ret <8 x i32> %3
3095 define <8 x float> @splat_mem_v8f32_2(float* %p) {
3096 ; ALL-LABEL: splat_mem_v8f32_2:
3097 ; ALL:       # %bb.0:
3098 ; ALL-NEXT:    vbroadcastss (%rdi), %ymm0
3099 ; ALL-NEXT:    retq
3100   %1 = load float, float* %p
3101   %2 = insertelement <4 x float> undef, float %1, i32 0
3102   %3 = shufflevector <4 x float> %2, <4 x float> undef, <8 x i32> zeroinitializer
3103   ret <8 x float> %3
3106 define <8 x float> @splat_v8f32(<4 x float> %r) {
3107 ; AVX1-LABEL: splat_v8f32:
3108 ; AVX1:       # %bb.0:
3109 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,0,0]
3110 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
3111 ; AVX1-NEXT:    retq
3113 ; AVX2OR512VL-LABEL: splat_v8f32:
3114 ; AVX2OR512VL:       # %bb.0:
3115 ; AVX2OR512VL-NEXT:    vbroadcastss %xmm0, %ymm0
3116 ; AVX2OR512VL-NEXT:    retq
3117   %1 = shufflevector <4 x float> %r, <4 x float> undef, <8 x i32> zeroinitializer
3118   ret <8 x float> %1
3122 ; Shuffle to logical bit shifts
3125 define <8 x i32> @shuffle_v8i32_z0U2zUz6(<8 x i32> %a) {
3126 ; AVX1-LABEL: shuffle_v8i32_z0U2zUz6:
3127 ; AVX1:       # %bb.0:
3128 ; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
3129 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6]
3130 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5]
3131 ; AVX1-NEXT:    retq
3133 ; AVX2OR512VL-LABEL: shuffle_v8i32_z0U2zUz6:
3134 ; AVX2OR512VL:       # %bb.0:
3135 ; AVX2OR512VL-NEXT:    vpsllq $32, %ymm0, %ymm0
3136 ; AVX2OR512VL-NEXT:    retq
3137   %shuffle = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 8, i32 0, i32 undef, i32 2, i32 8, i32 undef, i32 8, i32 6>
3138   ret <8 x i32> %shuffle
3141 define <8 x i32> @shuffle_v8i32_1U3z5zUU(<8 x i32> %a) {
3142 ; AVX1-LABEL: shuffle_v8i32_1U3z5zUU:
3143 ; AVX1:       # %bb.0:
3144 ; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
3145 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]
3146 ; AVX1-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
3147 ; AVX1-NEXT:    retq
3149 ; AVX2OR512VL-LABEL: shuffle_v8i32_1U3z5zUU:
3150 ; AVX2OR512VL:       # %bb.0:
3151 ; AVX2OR512VL-NEXT:    vpsrlq $32, %ymm0, %ymm0
3152 ; AVX2OR512VL-NEXT:    retq
3153   %shuffle = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 1, i32 undef, i32 3, i32 8, i32 5, i32 8, i32 undef, i32 undef>
3154   ret <8 x i32> %shuffle
3157 define <8 x i32> @shuffle_v8i32_B012F456(<8 x i32> %a, <8 x i32> %b) {
3158 ; AVX1-LABEL: shuffle_v8i32_B012F456:
3159 ; AVX1:       # %bb.0:
3160 ; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[3,0],ymm0[0,0],ymm1[7,4],ymm0[4,4]
3161 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[1,2],ymm1[4,6],ymm0[5,6]
3162 ; AVX1-NEXT:    retq
3164 ; AVX2OR512VL-LABEL: shuffle_v8i32_B012F456:
3165 ; AVX2OR512VL:       # %bb.0:
3166 ; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[12,13,14,15],ymm0[0,1,2,3,4,5,6,7,8,9,10,11],ymm1[28,29,30,31],ymm0[16,17,18,19,20,21,22,23,24,25,26,27]
3167 ; AVX2OR512VL-NEXT:    retq
3168   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 0, i32 1, i32 2, i32 15, i32 4, i32 5, i32 6>
3169   ret <8 x i32> %shuffle
3172 define <8 x i32> @shuffle_v8i32_1238567C(<8 x i32> %a, <8 x i32> %b) {
3173 ; AVX1-LABEL: shuffle_v8i32_1238567C:
3174 ; AVX1:       # %bb.0:
3175 ; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[3,0],ymm1[4,4],ymm0[7,4]
3176 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]
3177 ; AVX1-NEXT:    retq
3179 ; AVX2OR512VL-LABEL: shuffle_v8i32_1238567C:
3180 ; AVX2OR512VL:       # %bb.0:
3181 ; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3],ymm0[20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19]
3182 ; AVX2OR512VL-NEXT:    retq
3183   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 8, i32 5, i32 6, i32 7, i32 12>
3184   ret <8 x i32> %shuffle
3187 define <8 x i32> @shuffle_v8i32_9AB0DEF4(<8 x i32> %a, <8 x i32> %b) {
3188 ; AVX1-LABEL: shuffle_v8i32_9AB0DEF4:
3189 ; AVX1:       # %bb.0:
3190 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[3,0],ymm0[4,4],ymm1[7,4]
3191 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[1,2],ymm0[2,0],ymm1[5,6],ymm0[6,4]
3192 ; AVX1-NEXT:    retq
3194 ; AVX2OR512VL-LABEL: shuffle_v8i32_9AB0DEF4:
3195 ; AVX2OR512VL:       # %bb.0:
3196 ; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[4,5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3],ymm1[20,21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19]
3197 ; AVX2OR512VL-NEXT:    retq
3198   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 10, i32 11, i32 0, i32 13, i32 14, i32 15, i32 4>
3199   ret <8 x i32> %shuffle
3202 define <8 x i32> @shuffle_v8i32_389A7CDE(<8 x i32> %a, <8 x i32> %b) {
3203 ; AVX1-LABEL: shuffle_v8i32_389A7CDE:
3204 ; AVX1:       # %bb.0:
3205 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[3,0],ymm1[0,0],ymm0[7,4],ymm1[4,4]
3206 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[1,2],ymm0[4,6],ymm1[5,6]
3207 ; AVX1-NEXT:    retq
3209 ; AVX2OR512VL-LABEL: shuffle_v8i32_389A7CDE:
3210 ; AVX2OR512VL:       # %bb.0:
3211 ; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[12,13,14,15],ymm1[0,1,2,3,4,5,6,7,8,9,10,11],ymm0[28,29,30,31],ymm1[16,17,18,19,20,21,22,23,24,25,26,27]
3212 ; AVX2OR512VL-NEXT:    retq
3213   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 8, i32 9, i32 10, i32 7, i32 12, i32 13, i32 14>
3214   ret <8 x i32> %shuffle
3217 define <8 x i32> @shuffle_v8i32_30127456(<8 x i32> %a, <8 x i32> %b) {
3218 ; ALL-LABEL: shuffle_v8i32_30127456:
3219 ; ALL:       # %bb.0:
3220 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[3,0,1,2,7,4,5,6]
3221 ; ALL-NEXT:    retq
3222   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6>
3223   ret <8 x i32> %shuffle
3226 define <8 x i32> @shuffle_v8i32_12305674(<8 x i32> %a, <8 x i32> %b) {
3227 ; ALL-LABEL: shuffle_v8i32_12305674:
3228 ; ALL:       # %bb.0:
3229 ; ALL-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[1,2,3,0,5,6,7,4]
3230 ; ALL-NEXT:    retq
3231   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 5, i32 6, i32 7, i32 4>
3232   ret <8 x i32> %shuffle
3235 define <8x float> @concat_v2f32_1(<2 x float>* %tmp64, <2 x float>* %tmp65) {
3236 ; ALL-LABEL: concat_v2f32_1:
3237 ; ALL:       # %bb.0: # %entry
3238 ; ALL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
3239 ; ALL-NEXT:    vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]
3240 ; ALL-NEXT:    retq
3241 entry:
3242   %tmp74 = load <2 x float>, <2 x float>* %tmp65, align 8
3243   %tmp72 = load <2 x float>, <2 x float>* %tmp64, align 8
3244   %tmp73 = shufflevector <2 x float> %tmp72, <2 x float> undef, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
3245   %tmp75 = shufflevector <2 x float> %tmp74, <2 x float> undef, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
3246   %tmp76 = shufflevector <8 x float> %tmp73, <8 x float> %tmp75, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 undef, i32 undef, i32 undef, i32 undef>
3247   ret <8 x float> %tmp76
3250 define <8x float> @concat_v2f32_2(<2 x float>* %tmp64, <2 x float>* %tmp65) {
3251 ; ALL-LABEL: concat_v2f32_2:
3252 ; ALL:       # %bb.0: # %entry
3253 ; ALL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
3254 ; ALL-NEXT:    vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]
3255 ; ALL-NEXT:    retq
3256 entry:
3257   %tmp74 = load <2 x float>, <2 x float>* %tmp65, align 8
3258   %tmp72 = load <2 x float>, <2 x float>* %tmp64, align 8
3259   %tmp76 = shufflevector <2 x float> %tmp72, <2 x float> %tmp74, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
3260   ret <8 x float> %tmp76
3263 define <8x float> @concat_v2f32_3(<2 x float>* %tmp64, <2 x float>* %tmp65) {
3264 ; ALL-LABEL: concat_v2f32_3:
3265 ; ALL:       # %bb.0: # %entry
3266 ; ALL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
3267 ; ALL-NEXT:    vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]
3268 ; ALL-NEXT:    retq
3269 entry:
3270   %tmp74 = load <2 x float>, <2 x float>* %tmp65, align 8
3271   %tmp72 = load <2 x float>, <2 x float>* %tmp64, align 8
3272   %tmp76 = shufflevector <2 x float> %tmp72, <2 x float> %tmp74, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
3273   %res = shufflevector <4 x float> %tmp76, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
3274   ret <8 x float> %res
3277 define <8 x i32> @insert_mem_and_zero_v8i32(i32* %ptr) {
3278 ; ALL-LABEL: insert_mem_and_zero_v8i32:
3279 ; ALL:       # %bb.0:
3280 ; ALL-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
3281 ; ALL-NEXT:    retq
3282   %a = load i32, i32* %ptr
3283   %v = insertelement <8 x i32> undef, i32 %a, i32 0
3284   %shuffle = shufflevector <8 x i32> %v, <8 x i32> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
3285   ret <8 x i32> %shuffle
3288 define <8 x i32> @concat_v8i32_0123CDEF(<8 x i32> %a, <8 x i32> %b) {
3289 ; ALL-LABEL: concat_v8i32_0123CDEF:
3290 ; ALL:       # %bb.0:
3291 ; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
3292 ; ALL-NEXT:    retq
3293   %alo = shufflevector <8 x i32> %a, <8 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
3294   %bhi = shufflevector <8 x i32> %b, <8 x i32> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
3295   %shuf = shufflevector <4 x i32> %alo, <4 x i32> %bhi, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
3296   ret <8 x i32> %shuf
3299 define <8 x i32> @concat_v8i32_4567CDEF_bc(<8 x i32> %a0, <8 x i32> %a1) {
3300 ; AVX1OR2-LABEL: concat_v8i32_4567CDEF_bc:
3301 ; AVX1OR2:       # %bb.0:
3302 ; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
3303 ; AVX1OR2-NEXT:    retq
3305 ; AVX512VL-LABEL: concat_v8i32_4567CDEF_bc:
3306 ; AVX512VL:       # %bb.0:
3307 ; AVX512VL-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
3308 ; AVX512VL-NEXT:    retq
3309   %a0hi = shufflevector <8 x i32> %a0, <8 x i32> %a1, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
3310   %a1hi = shufflevector <8 x i32> %a0, <8 x i32> %a1, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
3311   %bc0hi = bitcast <4 x i32> %a0hi to <2 x i64>
3312   %bc1hi = bitcast <4 x i32> %a1hi to <2 x i64>
3313   %shuffle64 = shufflevector <2 x i64> %bc0hi, <2 x i64> %bc1hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
3314   %shuffle32 = bitcast <4 x i64> %shuffle64 to <8 x i32>
3315   ret <8 x i32> %shuffle32
3318 define <8 x float> @concat_v8f32_4567CDEF_bc(<8 x float> %f0, <8 x float> %f1) {
3319 ; ALL-LABEL: concat_v8f32_4567CDEF_bc:
3320 ; ALL:       # %bb.0:
3321 ; ALL-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]
3322 ; ALL-NEXT:    retq
3323   %a0 = bitcast <8 x float> %f0 to <4 x i64>
3324   %a1 = bitcast <8 x float> %f1 to <8 x i32>
3325   %a0hi = shufflevector <4 x i64> %a0, <4 x i64> undef, <2 x i32> <i32 2, i32 3>
3326   %a1hi = shufflevector <8 x i32> %a1, <8 x i32> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
3327   %bc0hi = bitcast <2 x i64> %a0hi to <2 x i64>
3328   %bc1hi = bitcast <4 x i32> %a1hi to <2 x i64>
3329   %shuffle64 = shufflevector <2 x i64> %bc0hi, <2 x i64> %bc1hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
3330   %shuffle32 = bitcast <4 x i64> %shuffle64 to <8 x float>
3331   ret <8 x float> %shuffle32
3334 define <8 x i32> @insert_dup_mem_v8i32(i32* %ptr) {
3335 ; ALL-LABEL: insert_dup_mem_v8i32:
3336 ; ALL:       # %bb.0:
3337 ; ALL-NEXT:    vbroadcastss (%rdi), %ymm0
3338 ; ALL-NEXT:    retq
3339   %tmp = load i32, i32* %ptr, align 4
3340   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0
3341   %tmp2 = shufflevector <4 x i32> %tmp1, <4 x i32> undef, <8 x i32> zeroinitializer
3342   ret <8 x i32> %tmp2
3345 define <8 x i32> @shuffle_v8i32_12345678(<8 x i32> %a, <8 x i32> %b) {
3346 ; AVX1-LABEL: shuffle_v8i32_12345678:
3347 ; AVX1:       # %bb.0:
3348 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3],ymm1[0,1]
3349 ; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[3,0],ymm1[4,4],ymm0[7,4]
3350 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]
3351 ; AVX1-NEXT:    retq
3353 ; AVX2-LABEL: shuffle_v8i32_12345678:
3354 ; AVX2:       # %bb.0:
3355 ; AVX2-NEXT:    vperm2i128 {{.*#+}} ymm1 = ymm0[2,3],ymm1[0,1]
3356 ; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3],ymm0[20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19]
3357 ; AVX2-NEXT:    retq
3359 ; AVX512VL-LABEL: shuffle_v8i32_12345678:
3360 ; AVX512VL:       # %bb.0:
3361 ; AVX512VL-NEXT:    valignd {{.*#+}} ymm0 = ymm0[1,2,3,4,5,6,7],ymm1[0]
3362 ; AVX512VL-NEXT:    retq
3363   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
3364   ret <8 x i32> %shuffle
3367 define <8 x i32> @shuffle_v8i32_12345670(<8 x i32> %a) {
3368 ; AVX1-LABEL: shuffle_v8i32_12345670:
3369 ; AVX1:       # %bb.0:
3370 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
3371 ; AVX1-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[3,0],ymm1[4,4],ymm0[7,4]
3372 ; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]
3373 ; AVX1-NEXT:    retq
3375 ; AVX2-LABEL: shuffle_v8i32_12345670:
3376 ; AVX2:       # %bb.0:
3377 ; AVX2-NEXT:    vmovaps {{.*#+}} ymm1 = [1,2,3,4,5,6,7,0]
3378 ; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0
3379 ; AVX2-NEXT:    retq
3381 ; AVX512VL-LABEL: shuffle_v8i32_12345670:
3382 ; AVX512VL:       # %bb.0:
3383 ; AVX512VL-NEXT:    valignd {{.*#+}} ymm0 = ymm0[1,2,3,4,5,6,7,0]
3384 ; AVX512VL-NEXT:    retq
3385   %shuffle = shufflevector <8 x i32> %a, <8 x i32> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>
3386   ret <8 x i32> %shuffle
3389 define <8 x float> @add_v8f32_02468ACE_13579BDF(<8 x float> %a, <8 x float> %b) {
3390 ; AVX1-LABEL: add_v8f32_02468ACE_13579BDF:
3391 ; AVX1:       # %bb.0: # %entry
3392 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm1[2,3]
3393 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3394 ; AVX1-NEXT:    vhaddps %ymm2, %ymm0, %ymm0
3395 ; AVX1-NEXT:    retq
3397 ; AVX2OR512VL-LABEL: add_v8f32_02468ACE_13579BDF:
3398 ; AVX2OR512VL:       # %bb.0: # %entry
3399 ; AVX2OR512VL-NEXT:    vhaddps %ymm1, %ymm0, %ymm0
3400 ; AVX2OR512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]
3401 ; AVX2OR512VL-NEXT:    retq
3402 entry:
3403   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3404   %shuffle1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3405   %add = fadd <8 x float> %shuffle, %shuffle1
3406   ret <8 x float> %add
3409 define <8 x float> @add_v8f32_8ACE0246_9BDF1357(<8 x float> %a, <8 x float> %b) {
3410 ; AVX1-LABEL: add_v8f32_8ACE0246_9BDF1357:
3411 ; AVX1:       # %bb.0: # %entry
3412 ; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3],ymm0[2,3]
3413 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
3414 ; AVX1-NEXT:    vhaddps %ymm2, %ymm0, %ymm0
3415 ; AVX1-NEXT:    retq
3417 ; AVX2OR512VL-LABEL: add_v8f32_8ACE0246_9BDF1357:
3418 ; AVX2OR512VL:       # %bb.0: # %entry
3419 ; AVX2OR512VL-NEXT:    vhaddps %ymm1, %ymm0, %ymm0
3420 ; AVX2OR512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,3,0,2]
3421 ; AVX2OR512VL-NEXT:    retq
3422 entry:
3423   %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 0, i32 2, i32 4, i32 6>
3424   %shuffle1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 9, i32 11, i32 13, i32 15, i32 1, i32 3, i32 5, i32 7>
3425   %add = fadd <8 x float> %shuffle, %shuffle1
3426   ret <8 x float> %add
3429 define <8 x i32> @add_v8i32_02468ACE_13579BDF(<8 x i32> %a, <8 x i32> %b) {
3430 ; AVX1-LABEL: add_v8i32_02468ACE_13579BDF:
3431 ; AVX1:       # %bb.0: # %entry
3432 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3433 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3434 ; AVX1-NEXT:    vphaddd %xmm2, %xmm3, %xmm2
3435 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm2, %ymm2
3436 ; AVX1-NEXT:    vphaddd %xmm1, %xmm0, %xmm0
3437 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
3438 ; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[3],ymm2[3]
3439 ; AVX1-NEXT:    retq
3441 ; AVX2OR512VL-LABEL: add_v8i32_02468ACE_13579BDF:
3442 ; AVX2OR512VL:       # %bb.0: # %entry
3443 ; AVX2OR512VL-NEXT:    vphaddd %ymm1, %ymm0, %ymm0
3444 ; AVX2OR512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3445 ; AVX2OR512VL-NEXT:    retq
3446 entry:
3447   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
3448   %shuffle1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
3449   %add = add <8 x i32> %shuffle, %shuffle1
3450   ret <8 x i32> %add
3453 define <8 x i32> @add_v8i32_8ACE0246_9BDF1357(<8 x i32> %a, <8 x i32> %b) {
3454 ; AVX1-LABEL: add_v8i32_8ACE0246_9BDF1357:
3455 ; AVX1:       # %bb.0: # %entry
3456 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3457 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3458 ; AVX1-NEXT:    vphaddd %xmm2, %xmm3, %xmm2
3459 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm2, %ymm2
3460 ; AVX1-NEXT:    vphaddd %xmm1, %xmm0, %xmm0
3461 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
3462 ; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm2[1],ymm0[2],ymm2[2]
3463 ; AVX1-NEXT:    retq
3465 ; AVX2OR512VL-LABEL: add_v8i32_8ACE0246_9BDF1357:
3466 ; AVX2OR512VL:       # %bb.0: # %entry
3467 ; AVX2OR512VL-NEXT:    vphaddd %ymm1, %ymm0, %ymm0
3468 ; AVX2OR512VL-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,3,0,2]
3469 ; AVX2OR512VL-NEXT:    retq
3470 entry:
3471   %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 0, i32 2, i32 4, i32 6>
3472   %shuffle1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 11, i32 13, i32 15, i32 1, i32 3, i32 5, i32 7>
3473   %add = add <8 x i32> %shuffle, %shuffle1
3474   ret <8 x i32> %add
3477 ; This test used to crash due to bad handling of concat_vectors after a bitcast
3478 ; in lowerVectorShuffleAsBroadcast.
3479 define <8 x float> @broadcast_concat_crash(<4 x float> %x, <4 x float> %y, float %z) {
3480 ; AVX1-LABEL: broadcast_concat_crash:
3481 ; AVX1:       # %bb.0: # %entry
3482 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm1[3,3,3,3]
3483 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[2,3]
3484 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
3485 ; AVX1-NEXT:    retq
3487 ; AVX2-LABEL: broadcast_concat_crash:
3488 ; AVX2:       # %bb.0: # %entry
3489 ; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3490 ; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]
3491 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,3,3]
3492 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[2,3]
3493 ; AVX2-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
3494 ; AVX2-NEXT:    retq
3496 ; AVX512VL-SLOW-LABEL: broadcast_concat_crash:
3497 ; AVX512VL-SLOW:       # %bb.0: # %entry
3498 ; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3499 ; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]
3500 ; AVX512VL-SLOW-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,1,3,3]
3501 ; AVX512VL-SLOW-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[2,3]
3502 ; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
3503 ; AVX512VL-SLOW-NEXT:    retq
3505 ; AVX512VL-FAST-LABEL: broadcast_concat_crash:
3506 ; AVX512VL-FAST:       # %bb.0: # %entry
3507 ; AVX512VL-FAST-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3508 ; AVX512VL-FAST-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]
3509 ; AVX512VL-FAST-NEXT:    vmovaps {{.*#+}} xmm1 = [1,4,3,3]
3510 ; AVX512VL-FAST-NEXT:    vpermi2ps %xmm2, %xmm0, %xmm1
3511 ; AVX512VL-FAST-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3512 ; AVX512VL-FAST-NEXT:    retq
3513 entry:
3514   %tmp = shufflevector <4 x float> %x, <4 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
3515   %bc = bitcast <8 x float> %tmp to <4 x i64>
3516   %tmp1 = extractelement <4 x i64> %bc, i32 3
3517   %tmp2 = bitcast i64 %tmp1 to <2 x float>
3518   %tmp4 = extractelement <2 x float> %tmp2, i32 1
3519   %tmp5 = insertelement <8 x float> undef, float %tmp4, i32 4
3520   %tmp6 = insertelement <8 x float> %tmp5, float %z, i32 5
3521   ret <8 x float> %tmp6
3524 ; PR40434: https://bugs.llvm.org/show_bug.cgi?id=40434
3526 define <8 x i32> @unpckh_v8i32(<8 x i32> %x, <8 x i32> %y) {
3527 ; ALL-LABEL: unpckh_v8i32:
3528 ; ALL:       # %bb.0:
3529 ; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm1
3530 ; ALL-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3531 ; ALL-NEXT:    retq
3532   %unpckh = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 15, i32 undef, i32 undef, i32 undef, i32 undef>
3533   ret <8 x i32> %unpckh
3536 ; Same as above but with floats.
3538 define <8 x float> @unpckh_v8f32(<8 x float> %x, <8 x float> %y) {
3539 ; ALL-LABEL: unpckh_v8f32:
3540 ; ALL:       # %bb.0:
3541 ; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm1
3542 ; ALL-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3543 ; ALL-NEXT:    retq
3544   %unpckh = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 15, i32 undef, i32 undef, i32 undef, i32 undef>
3545   ret <8 x float> %unpckh
3548 ; Alternate form of the above - make sure we don't have conflicting transforms.
3550 define <8 x i32> @blend_perm_v8i32(<8 x i32> %x, <8 x i32> %y) {
3551 ; ALL-LABEL: blend_perm_v8i32:
3552 ; ALL:       # %bb.0:
3553 ; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm1
3554 ; ALL-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3555 ; ALL-NEXT:    retq
3556   %unpckh = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 14, i32 15>
3557   %r = shufflevector <8 x i32> %unpckh, <8 x i32> undef, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
3558   ret <8 x i32> %r
3561 ; Same as above but with floats.
3563 define <8 x float> @blend_perm_v8f32(<8 x float> %x, <8 x float> %y) {
3564 ; ALL-LABEL: blend_perm_v8f32:
3565 ; ALL:       # %bb.0:
3566 ; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm1
3567 ; ALL-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3568 ; ALL-NEXT:    retq
3569   %unpckh = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 14, i32 15>
3570   %r = shufflevector <8 x float> %unpckh, <8 x float> undef, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
3571   ret <8 x float> %r
3574 ; Another variation of the above - make sure we don't have conflicting transforms.
3576 define <8 x i32> @unpckh_v8i32_unary(<8 x i32> %x) {
3577 ; ALL-LABEL: unpckh_v8i32_unary:
3578 ; ALL:       # %bb.0:
3579 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm1
3580 ; ALL-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3581 ; ALL-NEXT:    retq
3582   %r = shufflevector <8 x i32> %x, <8 x i32> undef, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
3583   ret <8 x i32> %r
3586 ; Same as above but with floats.
3588 define <8 x float> @unpckh_v8f32_unary(<8 x float> %x) {
3589 ; ALL-LABEL: unpckh_v8f32_unary:
3590 ; ALL:       # %bb.0:
3591 ; ALL-NEXT:    vextractf128 $1, %ymm0, %xmm1
3592 ; ALL-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3593 ; ALL-NEXT:    retq
3594   %r = shufflevector <8 x float> %x, <8 x float> undef, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
3595   ret <8 x float> %r
3598 ; FIXME: Why are integer and FP (below) lowering different for AVX1?
3600 define <8 x i32> @lowhalf_v8i32(<8 x i32> %x, <8 x i32> %y) {
3601 ; AVX1-LABEL: lowhalf_v8i32:
3602 ; AVX1:       # %bb.0:
3603 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
3604 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[2,2,2,2]
3605 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3]
3606 ; AVX1-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
3607 ; AVX1-NEXT:    retq
3609 ; AVX2-LABEL: lowhalf_v8i32:
3610 ; AVX2:       # %bb.0:
3611 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
3612 ; AVX2-NEXT:    vmovaps {{.*#+}} xmm1 = [2,6,3,6]
3613 ; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0
3614 ; AVX2-NEXT:    retq
3616 ; AVX512VL-LABEL: lowhalf_v8i32:
3617 ; AVX512VL:       # %bb.0:
3618 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} xmm2 = [2,14,3,14]
3619 ; AVX512VL-NEXT:    vpermt2d %ymm1, %ymm2, %ymm0
3620 ; AVX512VL-NEXT:    retq
3621   %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 14, i32 undef, i32 undef, i32 undef, i32 undef>
3622   ret <8 x i32> %r
3625 ; FIXME: AVX1 lowering is better than AVX2 (and AVX512?)
3627 define <8 x float> @lowhalf_v8f32(<8 x float> %x, <8 x float> %y) {
3628 ; AVX1-LABEL: lowhalf_v8f32:
3629 ; AVX1:       # %bb.0:
3630 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
3631 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[2,3],xmm1[2,2]
3632 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,1,3]
3633 ; AVX1-NEXT:    retq
3635 ; AVX2-LABEL: lowhalf_v8f32:
3636 ; AVX2:       # %bb.0:
3637 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
3638 ; AVX2-NEXT:    vmovaps {{.*#+}} xmm1 = [2,6,3,6]
3639 ; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0
3640 ; AVX2-NEXT:    retq
3642 ; AVX512VL-LABEL: lowhalf_v8f32:
3643 ; AVX512VL:       # %bb.0:
3644 ; AVX512VL-NEXT:    vmovaps {{.*#+}} xmm2 = [2,14,3,14]
3645 ; AVX512VL-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0
3646 ; AVX512VL-NEXT:    retq
3647   %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 14, i32 undef, i32 undef, i32 undef, i32 undef>
3648   ret <8 x float> %r