[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / X86 / vector-shuffle-128-v8.ll
blobc6926055233aebb246929da1d761e1d8e3ca5a6d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1OR2 --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1OR2 --check-prefix=AVX2OR512VL --check-prefix=AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2OR512VL --check-prefix=AVX512VL
9 define <8 x i16> @shuffle_v8i16_01012323(<8 x i16> %a, <8 x i16> %b) {
10 ; SSE-LABEL: shuffle_v8i16_01012323:
11 ; SSE:       # BB#0:
12 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
13 ; SSE-NEXT:    retq
15 ; AVX-LABEL: shuffle_v8i16_01012323:
16 ; AVX:       # BB#0:
17 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
18 ; AVX-NEXT:    retq
19   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 2, i32 3, i32 2, i32 3>
20   ret <8 x i16> %shuffle
22 define <8 x i16> @shuffle_v8i16_67452301(<8 x i16> %a, <8 x i16> %b) {
23 ; SSE-LABEL: shuffle_v8i16_67452301:
24 ; SSE:       # BB#0:
25 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
26 ; SSE-NEXT:    retq
28 ; AVX-LABEL: shuffle_v8i16_67452301:
29 ; AVX:       # BB#0:
30 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
31 ; AVX-NEXT:    retq
32   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 6, i32 7, i32 4, i32 5, i32 2, i32 3, i32 0, i32 1>
33   ret <8 x i16> %shuffle
35 define <8 x i16> @shuffle_v8i16_456789AB(<8 x i16> %a, <8 x i16> %b) {
36 ; SSE2-LABEL: shuffle_v8i16_456789AB:
37 ; SSE2:       # BB#0:
38 ; SSE2-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]
39 ; SSE2-NEXT:    retq
41 ; SSSE3-LABEL: shuffle_v8i16_456789AB:
42 ; SSSE3:       # BB#0:
43 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
44 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
45 ; SSSE3-NEXT:    retq
47 ; SSE41-LABEL: shuffle_v8i16_456789AB:
48 ; SSE41:       # BB#0:
49 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
50 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
51 ; SSE41-NEXT:    retq
53 ; AVX-LABEL: shuffle_v8i16_456789AB:
54 ; AVX:       # BB#0:
55 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
56 ; AVX-NEXT:    retq
57   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>
58   ret <8 x i16> %shuffle
61 define <8 x i16> @shuffle_v8i16_00000000(<8 x i16> %a, <8 x i16> %b) {
62 ; SSE-LABEL: shuffle_v8i16_00000000:
63 ; SSE:       # BB#0:
64 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
65 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
66 ; SSE-NEXT:    retq
68 ; AVX1-LABEL: shuffle_v8i16_00000000:
69 ; AVX1:       # BB#0:
70 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
71 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
72 ; AVX1-NEXT:    retq
74 ; AVX2OR512VL-LABEL: shuffle_v8i16_00000000:
75 ; AVX2OR512VL:       # BB#0:
76 ; AVX2OR512VL-NEXT:    vpbroadcastw %xmm0, %xmm0
77 ; AVX2OR512VL-NEXT:    retq
78   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
79   ret <8 x i16> %shuffle
81 define <8 x i16> @shuffle_v8i16_00004444(<8 x i16> %a, <8 x i16> %b) {
82 ; SSE-LABEL: shuffle_v8i16_00004444:
83 ; SSE:       # BB#0:
84 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
85 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
86 ; SSE-NEXT:    retq
88 ; AVX-LABEL: shuffle_v8i16_00004444:
89 ; AVX:       # BB#0:
90 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
91 ; AVX-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
92 ; AVX-NEXT:    retq
93   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
94   ret <8 x i16> %shuffle
96 define <8 x i16> @shuffle_v8i16_u0u1u2u3(<8 x i16> %a, <8 x i16> %b) {
97 ; SSE-LABEL: shuffle_v8i16_u0u1u2u3:
98 ; SSE:       # BB#0:
99 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
100 ; SSE-NEXT:    retq
102 ; AVX-LABEL: shuffle_v8i16_u0u1u2u3:
103 ; AVX:       # BB#0:
104 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
105 ; AVX-NEXT:    retq
106   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 0, i32 undef, i32 1, i32 undef, i32 2, i32 undef, i32 3>
107   ret <8 x i16> %shuffle
109 define <8 x i16> @shuffle_v8i16_u4u5u6u7(<8 x i16> %a, <8 x i16> %b) {
110 ; SSE-LABEL: shuffle_v8i16_u4u5u6u7:
111 ; SSE:       # BB#0:
112 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
113 ; SSE-NEXT:    retq
115 ; AVX-LABEL: shuffle_v8i16_u4u5u6u7:
116 ; AVX:       # BB#0:
117 ; AVX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
118 ; AVX-NEXT:    retq
119   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 4, i32 undef, i32 5, i32 undef, i32 6, i32 undef, i32 7>
120   ret <8 x i16> %shuffle
122 define <8 x i16> @shuffle_v8i16_31206745(<8 x i16> %a, <8 x i16> %b) {
123 ; SSE-LABEL: shuffle_v8i16_31206745:
124 ; SSE:       # BB#0:
125 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
126 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
127 ; SSE-NEXT:    retq
129 ; AVX-LABEL: shuffle_v8i16_31206745:
130 ; AVX:       # BB#0:
131 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
132 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
133 ; AVX-NEXT:    retq
134   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 6, i32 7, i32 4, i32 5>
135   ret <8 x i16> %shuffle
137 define <8 x i16> @shuffle_v8i16_44440000(<8 x i16> %a, <8 x i16> %b) {
138 ; SSE2-LABEL: shuffle_v8i16_44440000:
139 ; SSE2:       # BB#0:
140 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,0,3]
141 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
142 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
143 ; SSE2-NEXT:    retq
145 ; SSSE3-LABEL: shuffle_v8i16_44440000:
146 ; SSSE3:       # BB#0:
147 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
148 ; SSSE3-NEXT:    retq
150 ; SSE41-LABEL: shuffle_v8i16_44440000:
151 ; SSE41:       # BB#0:
152 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
153 ; SSE41-NEXT:    retq
155 ; AVX-LABEL: shuffle_v8i16_44440000:
156 ; AVX:       # BB#0:
157 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
158 ; AVX-NEXT:    retq
159   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 0, i32 0, i32 0, i32 0>
160   ret <8 x i16> %shuffle
162 define <8 x i16> @shuffle_v8i16_23016745(<8 x i16> %a, <8 x i16> %b) {
163 ; SSE-LABEL: shuffle_v8i16_23016745:
164 ; SSE:       # BB#0:
165 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
166 ; SSE-NEXT:    retq
168 ; AVX-LABEL: shuffle_v8i16_23016745:
169 ; AVX:       # BB#0:
170 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,0,3,2]
171 ; AVX-NEXT:    retq
172   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 5>
173   ret <8 x i16> %shuffle
175 define <8 x i16> @shuffle_v8i16_23026745(<8 x i16> %a, <8 x i16> %b) {
176 ; SSE-LABEL: shuffle_v8i16_23026745:
177 ; SSE:       # BB#0:
178 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]
179 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
180 ; SSE-NEXT:    retq
182 ; AVX-LABEL: shuffle_v8i16_23026745:
183 ; AVX:       # BB#0:
184 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]
185 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
186 ; AVX-NEXT:    retq
187   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 3, i32 0, i32 2, i32 6, i32 7, i32 4, i32 5>
188   ret <8 x i16> %shuffle
190 define <8 x i16> @shuffle_v8i16_23016747(<8 x i16> %a, <8 x i16> %b) {
191 ; SSE-LABEL: shuffle_v8i16_23016747:
192 ; SSE:       # BB#0:
193 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
194 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
195 ; SSE-NEXT:    retq
197 ; AVX-LABEL: shuffle_v8i16_23016747:
198 ; AVX:       # BB#0:
199 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
200 ; AVX-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
201 ; AVX-NEXT:    retq
202   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 7>
203   ret <8 x i16> %shuffle
205 define <8 x i16> @shuffle_v8i16_75643120(<8 x i16> %a, <8 x i16> %b) {
206 ; SSE2-LABEL: shuffle_v8i16_75643120:
207 ; SSE2:       # BB#0:
208 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
209 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
210 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
211 ; SSE2-NEXT:    retq
213 ; SSSE3-LABEL: shuffle_v8i16_75643120:
214 ; SSSE3:       # BB#0:
215 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
216 ; SSSE3-NEXT:    retq
218 ; SSE41-LABEL: shuffle_v8i16_75643120:
219 ; SSE41:       # BB#0:
220 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
221 ; SSE41-NEXT:    retq
223 ; AVX-LABEL: shuffle_v8i16_75643120:
224 ; AVX:       # BB#0:
225 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
226 ; AVX-NEXT:    retq
227   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 7, i32 5, i32 6, i32 4, i32 3, i32 1, i32 2, i32 0>
228   ret <8 x i16> %shuffle
231 define <8 x i16> @shuffle_v8i16_10545410(<8 x i16> %a, <8 x i16> %b) {
232 ; SSE2-LABEL: shuffle_v8i16_10545410:
233 ; SSE2:       # BB#0:
234 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
235 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
236 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
237 ; SSE2-NEXT:    retq
239 ; SSSE3-LABEL: shuffle_v8i16_10545410:
240 ; SSSE3:       # BB#0:
241 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
242 ; SSSE3-NEXT:    retq
244 ; SSE41-LABEL: shuffle_v8i16_10545410:
245 ; SSE41:       # BB#0:
246 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
247 ; SSE41-NEXT:    retq
249 ; AVX-LABEL: shuffle_v8i16_10545410:
250 ; AVX:       # BB#0:
251 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
252 ; AVX-NEXT:    retq
253   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 0, i32 5, i32 4, i32 5, i32 4, i32 1, i32 0>
254   ret <8 x i16> %shuffle
256 define <8 x i16> @shuffle_v8i16_54105410(<8 x i16> %a, <8 x i16> %b) {
257 ; SSE2-LABEL: shuffle_v8i16_54105410:
258 ; SSE2:       # BB#0:
259 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
260 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
261 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
262 ; SSE2-NEXT:    retq
264 ; SSSE3-LABEL: shuffle_v8i16_54105410:
265 ; SSSE3:       # BB#0:
266 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
267 ; SSSE3-NEXT:    retq
269 ; SSE41-LABEL: shuffle_v8i16_54105410:
270 ; SSE41:       # BB#0:
271 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
272 ; SSE41-NEXT:    retq
274 ; AVX-LABEL: shuffle_v8i16_54105410:
275 ; AVX:       # BB#0:
276 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
277 ; AVX-NEXT:    retq
278   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 4, i32 1, i32 0, i32 5, i32 4, i32 1, i32 0>
279   ret <8 x i16> %shuffle
281 define <8 x i16> @shuffle_v8i16_54101054(<8 x i16> %a, <8 x i16> %b) {
282 ; SSE2-LABEL: shuffle_v8i16_54101054:
283 ; SSE2:       # BB#0:
284 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
285 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
286 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
287 ; SSE2-NEXT:    retq
289 ; SSSE3-LABEL: shuffle_v8i16_54101054:
290 ; SSSE3:       # BB#0:
291 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
292 ; SSSE3-NEXT:    retq
294 ; SSE41-LABEL: shuffle_v8i16_54101054:
295 ; SSE41:       # BB#0:
296 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
297 ; SSE41-NEXT:    retq
299 ; AVX-LABEL: shuffle_v8i16_54101054:
300 ; AVX:       # BB#0:
301 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
302 ; AVX-NEXT:    retq
303   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 4, i32 1, i32 0, i32 1, i32 0, i32 5, i32 4>
304   ret <8 x i16> %shuffle
306 define <8 x i16> @shuffle_v8i16_04400440(<8 x i16> %a, <8 x i16> %b) {
307 ; SSE2-LABEL: shuffle_v8i16_04400440:
308 ; SSE2:       # BB#0:
309 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
310 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
311 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,4,6]
312 ; SSE2-NEXT:    retq
314 ; SSSE3-LABEL: shuffle_v8i16_04400440:
315 ; SSSE3:       # BB#0:
316 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
317 ; SSSE3-NEXT:    retq
319 ; SSE41-LABEL: shuffle_v8i16_04400440:
320 ; SSE41:       # BB#0:
321 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
322 ; SSE41-NEXT:    retq
324 ; AVX-LABEL: shuffle_v8i16_04400440:
325 ; AVX:       # BB#0:
326 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
327 ; AVX-NEXT:    retq
328   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 0, i32 4, i32 4, i32 0>
329   ret <8 x i16> %shuffle
331 define <8 x i16> @shuffle_v8i16_40044004(<8 x i16> %a, <8 x i16> %b) {
332 ; SSE2-LABEL: shuffle_v8i16_40044004:
333 ; SSE2:       # BB#0:
334 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
335 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,0,0,2,4,5,6,7]
336 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,4]
337 ; SSE2-NEXT:    retq
339 ; SSSE3-LABEL: shuffle_v8i16_40044004:
340 ; SSSE3:       # BB#0:
341 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
342 ; SSSE3-NEXT:    retq
344 ; SSE41-LABEL: shuffle_v8i16_40044004:
345 ; SSE41:       # BB#0:
346 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
347 ; SSE41-NEXT:    retq
349 ; AVX-LABEL: shuffle_v8i16_40044004:
350 ; AVX:       # BB#0:
351 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
352 ; AVX-NEXT:    retq
353   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 0, i32 0, i32 4, i32 4, i32 0, i32 0, i32 4>
354   ret <8 x i16> %shuffle
357 define <8 x i16> @shuffle_v8i16_26405173(<8 x i16> %a, <8 x i16> %b) {
358 ; SSE2-LABEL: shuffle_v8i16_26405173:
359 ; SSE2:       # BB#0:
360 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
361 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
362 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
363 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]
364 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,4,7]
365 ; SSE2-NEXT:    retq
367 ; SSSE3-LABEL: shuffle_v8i16_26405173:
368 ; SSSE3:       # BB#0:
369 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
370 ; SSSE3-NEXT:    retq
372 ; SSE41-LABEL: shuffle_v8i16_26405173:
373 ; SSE41:       # BB#0:
374 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
375 ; SSE41-NEXT:    retq
377 ; AVX-LABEL: shuffle_v8i16_26405173:
378 ; AVX:       # BB#0:
379 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
380 ; AVX-NEXT:    retq
381   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 6, i32 4, i32 0, i32 5, i32 1, i32 7, i32 3>
382   ret <8 x i16> %shuffle
384 define <8 x i16> @shuffle_v8i16_20645173(<8 x i16> %a, <8 x i16> %b) {
385 ; SSE2-LABEL: shuffle_v8i16_20645173:
386 ; SSE2:       # BB#0:
387 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
388 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
389 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
390 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,2,3,4,5,6,7]
391 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,4,7]
392 ; SSE2-NEXT:    retq
394 ; SSSE3-LABEL: shuffle_v8i16_20645173:
395 ; SSSE3:       # BB#0:
396 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
397 ; SSSE3-NEXT:    retq
399 ; SSE41-LABEL: shuffle_v8i16_20645173:
400 ; SSE41:       # BB#0:
401 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
402 ; SSE41-NEXT:    retq
404 ; AVX-LABEL: shuffle_v8i16_20645173:
405 ; AVX:       # BB#0:
406 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
407 ; AVX-NEXT:    retq
408   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 0, i32 6, i32 4, i32 5, i32 1, i32 7, i32 3>
409   ret <8 x i16> %shuffle
411 define <8 x i16> @shuffle_v8i16_26401375(<8 x i16> %a, <8 x i16> %b) {
412 ; SSE2-LABEL: shuffle_v8i16_26401375:
413 ; SSE2:       # BB#0:
414 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
415 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
416 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
417 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]
418 ; SSE2-NEXT:    retq
420 ; SSSE3-LABEL: shuffle_v8i16_26401375:
421 ; SSSE3:       # BB#0:
422 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
423 ; SSSE3-NEXT:    retq
425 ; SSE41-LABEL: shuffle_v8i16_26401375:
426 ; SSE41:       # BB#0:
427 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
428 ; SSE41-NEXT:    retq
430 ; AVX-LABEL: shuffle_v8i16_26401375:
431 ; AVX:       # BB#0:
432 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
433 ; AVX-NEXT:    retq
434   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 2, i32 6, i32 4, i32 0, i32 1, i32 3, i32 7, i32 5>
435   ret <8 x i16> %shuffle
438 define <8 x i16> @shuffle_v8i16_66751643(<8 x i16> %a, <8 x i16> %b) {
439 ; SSE2-LABEL: shuffle_v8i16_66751643:
440 ; SSE2:       # BB#0:
441 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]
442 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
443 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,0]
444 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,3,2,4,5,6,7]
445 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,4,6]
446 ; SSE2-NEXT:    retq
448 ; SSSE3-LABEL: shuffle_v8i16_66751643:
449 ; SSSE3:       # BB#0:
450 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
451 ; SSSE3-NEXT:    retq
453 ; SSE41-LABEL: shuffle_v8i16_66751643:
454 ; SSE41:       # BB#0:
455 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
456 ; SSE41-NEXT:    retq
458 ; AVX-LABEL: shuffle_v8i16_66751643:
459 ; AVX:       # BB#0:
460 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
461 ; AVX-NEXT:    retq
462   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 6, i32 6, i32 7, i32 5, i32 1, i32 6, i32 4, i32 3>
463   ret <8 x i16> %shuffle
466 define <8 x i16> @shuffle_v8i16_60514754(<8 x i16> %a, <8 x i16> %b) {
467 ; SSE2-LABEL: shuffle_v8i16_60514754:
468 ; SSE2:       # BB#0:
469 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]
470 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
471 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
472 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,5,6]
473 ; SSE2-NEXT:    retq
475 ; SSSE3-LABEL: shuffle_v8i16_60514754:
476 ; SSSE3:       # BB#0:
477 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
478 ; SSSE3-NEXT:    retq
480 ; SSE41-LABEL: shuffle_v8i16_60514754:
481 ; SSE41:       # BB#0:
482 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
483 ; SSE41-NEXT:    retq
485 ; AVX-LABEL: shuffle_v8i16_60514754:
486 ; AVX:       # BB#0:
487 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
488 ; AVX-NEXT:    retq
489   %shuffle = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 6, i32 0, i32 5, i32 1, i32 4, i32 7, i32 5, i32 4>
490   ret <8 x i16> %shuffle
493 define <8 x i16> @shuffle_v8i16_00444444(<8 x i16> %a, <8 x i16> %b) {
494 ; SSE2-LABEL: shuffle_v8i16_00444444:
495 ; SSE2:       # BB#0:
496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
497 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]
498 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
499 ; SSE2-NEXT:    retq
501 ; SSSE3-LABEL: shuffle_v8i16_00444444:
502 ; SSSE3:       # BB#0:
503 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
504 ; SSSE3-NEXT:    retq
506 ; SSE41-LABEL: shuffle_v8i16_00444444:
507 ; SSE41:       # BB#0:
508 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
509 ; SSE41-NEXT:    retq
511 ; AVX-LABEL: shuffle_v8i16_00444444:
512 ; AVX:       # BB#0:
513 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
514 ; AVX-NEXT:    retq
515   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
516   ret <8 x i16> %shuffle
518 define <8 x i16> @shuffle_v8i16_44004444(<8 x i16> %a, <8 x i16> %b) {
519 ; SSE2-LABEL: shuffle_v8i16_44004444:
520 ; SSE2:       # BB#0:
521 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
522 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,2,0,0,4,5,6,7]
523 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
524 ; SSE2-NEXT:    retq
526 ; SSSE3-LABEL: shuffle_v8i16_44004444:
527 ; SSSE3:       # BB#0:
528 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
529 ; SSSE3-NEXT:    retq
531 ; SSE41-LABEL: shuffle_v8i16_44004444:
532 ; SSE41:       # BB#0:
533 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
534 ; SSE41-NEXT:    retq
536 ; AVX-LABEL: shuffle_v8i16_44004444:
537 ; AVX:       # BB#0:
538 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
539 ; AVX-NEXT:    retq
540   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>
541   ret <8 x i16> %shuffle
543 define <8 x i16> @shuffle_v8i16_04404444(<8 x i16> %a, <8 x i16> %b) {
544 ; SSE2-LABEL: shuffle_v8i16_04404444:
545 ; SSE2:       # BB#0:
546 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
547 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
548 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
549 ; SSE2-NEXT:    retq
551 ; SSSE3-LABEL: shuffle_v8i16_04404444:
552 ; SSSE3:       # BB#0:
553 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
554 ; SSSE3-NEXT:    retq
556 ; SSE41-LABEL: shuffle_v8i16_04404444:
557 ; SSE41:       # BB#0:
558 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
559 ; SSE41-NEXT:    retq
561 ; AVX-LABEL: shuffle_v8i16_04404444:
562 ; AVX:       # BB#0:
563 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
564 ; AVX-NEXT:    retq
565   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 4, i32 4, i32 4, i32 4>
566   ret <8 x i16> %shuffle
568 define <8 x i16> @shuffle_v8i16_04400000(<8 x i16> %a, <8 x i16> %b) {
569 ; SSE2-LABEL: shuffle_v8i16_04400000:
570 ; SSE2:       # BB#0:
571 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,0,3]
572 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
573 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
574 ; SSE2-NEXT:    retq
576 ; SSSE3-LABEL: shuffle_v8i16_04400000:
577 ; SSSE3:       # BB#0:
578 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
579 ; SSSE3-NEXT:    retq
581 ; SSE41-LABEL: shuffle_v8i16_04400000:
582 ; SSE41:       # BB#0:
583 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
584 ; SSE41-NEXT:    retq
586 ; AVX-LABEL: shuffle_v8i16_04400000:
587 ; AVX:       # BB#0:
588 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
589 ; AVX-NEXT:    retq
590   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 0, i32 0, i32 0, i32 0>
591   ret <8 x i16> %shuffle
593 define <8 x i16> @shuffle_v8i16_04404567(<8 x i16> %a, <8 x i16> %b) {
594 ; SSE-LABEL: shuffle_v8i16_04404567:
595 ; SSE:       # BB#0:
596 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
597 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
598 ; SSE-NEXT:    retq
600 ; AVX-LABEL: shuffle_v8i16_04404567:
601 ; AVX:       # BB#0:
602 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
603 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
604 ; AVX-NEXT:    retq
605   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 4, i32 0, i32 4, i32 5, i32 6, i32 7>
606   ret <8 x i16> %shuffle
609 define <8 x i16> @shuffle_v8i16_0X444444(<8 x i16> %a, <8 x i16> %b) {
610 ; SSE2-LABEL: shuffle_v8i16_0X444444:
611 ; SSE2:       # BB#0:
612 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
613 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,2,2,4,5,6,7]
614 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
615 ; SSE2-NEXT:    retq
617 ; SSSE3-LABEL: shuffle_v8i16_0X444444:
618 ; SSSE3:       # BB#0:
619 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]
620 ; SSSE3-NEXT:    retq
622 ; SSE41-LABEL: shuffle_v8i16_0X444444:
623 ; SSE41:       # BB#0:
624 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]
625 ; SSE41-NEXT:    retq
627 ; AVX-LABEL: shuffle_v8i16_0X444444:
628 ; AVX:       # BB#0:
629 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]
630 ; AVX-NEXT:    retq
631   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 undef, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
632   ret <8 x i16> %shuffle
634 define <8 x i16> @shuffle_v8i16_44X04444(<8 x i16> %a, <8 x i16> %b) {
635 ; SSE2-LABEL: shuffle_v8i16_44X04444:
636 ; SSE2:       # BB#0:
637 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
638 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,2,2,0,4,5,6,7]
639 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
640 ; SSE2-NEXT:    retq
642 ; SSSE3-LABEL: shuffle_v8i16_44X04444:
643 ; SSSE3:       # BB#0:
644 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
645 ; SSSE3-NEXT:    retq
647 ; SSE41-LABEL: shuffle_v8i16_44X04444:
648 ; SSE41:       # BB#0:
649 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
650 ; SSE41-NEXT:    retq
652 ; AVX-LABEL: shuffle_v8i16_44X04444:
653 ; AVX:       # BB#0:
654 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
655 ; AVX-NEXT:    retq
656   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 undef, i32 0, i32 4, i32 4, i32 4, i32 4>
657   ret <8 x i16> %shuffle
659 define <8 x i16> @shuffle_v8i16_X4404444(<8 x i16> %a, <8 x i16> %b) {
660 ; SSE2-LABEL: shuffle_v8i16_X4404444:
661 ; SSE2:       # BB#0:
662 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
663 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
664 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
665 ; SSE2-NEXT:    retq
667 ; SSSE3-LABEL: shuffle_v8i16_X4404444:
668 ; SSSE3:       # BB#0:
669 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
670 ; SSSE3-NEXT:    retq
672 ; SSE41-LABEL: shuffle_v8i16_X4404444:
673 ; SSE41:       # BB#0:
674 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
675 ; SSE41-NEXT:    retq
677 ; AVX-LABEL: shuffle_v8i16_X4404444:
678 ; AVX:       # BB#0:
679 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
680 ; AVX-NEXT:    retq
681   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 4, i32 4, i32 0, i32 4, i32 4, i32 4, i32 4>
682   ret <8 x i16> %shuffle
685 define <8 x i16> @shuffle_v8i16_0127XXXX(<8 x i16> %a, <8 x i16> %b) {
686 ; SSE2-LABEL: shuffle_v8i16_0127XXXX:
687 ; SSE2:       # BB#0:
688 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
689 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,7]
690 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
691 ; SSE2-NEXT:    retq
693 ; SSSE3-LABEL: shuffle_v8i16_0127XXXX:
694 ; SSSE3:       # BB#0:
695 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]
696 ; SSSE3-NEXT:    retq
698 ; SSE41-LABEL: shuffle_v8i16_0127XXXX:
699 ; SSE41:       # BB#0:
700 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]
701 ; SSE41-NEXT:    retq
703 ; AVX1OR2-LABEL: shuffle_v8i16_0127XXXX:
704 ; AVX1OR2:       # BB#0:
705 ; AVX1OR2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]
706 ; AVX1OR2-NEXT:    retq
708 ; AVX512VL-LABEL: shuffle_v8i16_0127XXXX:
709 ; AVX512VL:       # BB#0:
710 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
711 ; AVX512VL-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,7]
712 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
713 ; AVX512VL-NEXT:    retq
714   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
715   ret <8 x i16> %shuffle
718 define <8 x i16> @shuffle_v8i16_XXXX4563(<8 x i16> %a, <8 x i16> %b) {
719 ; SSE2-LABEL: shuffle_v8i16_XXXX4563:
720 ; SSE2:       # BB#0:
721 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
722 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]
723 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,2,0]
724 ; SSE2-NEXT:    retq
726 ; SSSE3-LABEL: shuffle_v8i16_XXXX4563:
727 ; SSSE3:       # BB#0:
728 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]
729 ; SSSE3-NEXT:    retq
731 ; SSE41-LABEL: shuffle_v8i16_XXXX4563:
732 ; SSE41:       # BB#0:
733 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]
734 ; SSE41-NEXT:    retq
736 ; AVX1OR2-LABEL: shuffle_v8i16_XXXX4563:
737 ; AVX1OR2:       # BB#0:
738 ; AVX1OR2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]
739 ; AVX1OR2-NEXT:    retq
741 ; AVX512VL-LABEL: shuffle_v8i16_XXXX4563:
742 ; AVX512VL:       # BB#0:
743 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
744 ; AVX512VL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]
745 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,2,0]
746 ; AVX512VL-NEXT:    retq
747   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 4, i32 5, i32 6, i32 3>
748   ret <8 x i16> %shuffle
751 define <8 x i16> @shuffle_v8i16_4563XXXX(<8 x i16> %a, <8 x i16> %b) {
752 ; SSE2-LABEL: shuffle_v8i16_4563XXXX:
753 ; SSE2:       # BB#0:
754 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
755 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]
756 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,0,2,3]
757 ; SSE2-NEXT:    retq
759 ; SSSE3-LABEL: shuffle_v8i16_4563XXXX:
760 ; SSSE3:       # BB#0:
761 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]
762 ; SSSE3-NEXT:    retq
764 ; SSE41-LABEL: shuffle_v8i16_4563XXXX:
765 ; SSE41:       # BB#0:
766 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]
767 ; SSE41-NEXT:    retq
769 ; AVX1OR2-LABEL: shuffle_v8i16_4563XXXX:
770 ; AVX1OR2:       # BB#0:
771 ; AVX1OR2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]
772 ; AVX1OR2-NEXT:    retq
774 ; AVX512VL-LABEL: shuffle_v8i16_4563XXXX:
775 ; AVX512VL:       # BB#0:
776 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
777 ; AVX512VL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]
778 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,0,2,3]
779 ; AVX512VL-NEXT:    retq
780   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
781   ret <8 x i16> %shuffle
784 define <8 x i16> @shuffle_v8i16_01274563(<8 x i16> %a, <8 x i16> %b) {
785 ; SSE2-LABEL: shuffle_v8i16_01274563:
786 ; SSE2:       # BB#0:
787 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
788 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]
789 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
790 ; SSE2-NEXT:    retq
792 ; SSSE3-LABEL: shuffle_v8i16_01274563:
793 ; SSSE3:       # BB#0:
794 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
795 ; SSSE3-NEXT:    retq
797 ; SSE41-LABEL: shuffle_v8i16_01274563:
798 ; SSE41:       # BB#0:
799 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
800 ; SSE41-NEXT:    retq
802 ; AVX1OR2-LABEL: shuffle_v8i16_01274563:
803 ; AVX1OR2:       # BB#0:
804 ; AVX1OR2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
805 ; AVX1OR2-NEXT:    retq
807 ; AVX512VL-LABEL: shuffle_v8i16_01274563:
808 ; AVX512VL:       # BB#0:
809 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
810 ; AVX512VL-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]
811 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
812 ; AVX512VL-NEXT:    retq
813   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 3>
814   ret <8 x i16> %shuffle
817 define <8 x i16> @shuffle_v8i16_45630127(<8 x i16> %a, <8 x i16> %b) {
818 ; SSE2-LABEL: shuffle_v8i16_45630127:
819 ; SSE2:       # BB#0:
820 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
821 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
822 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,0,3,1]
823 ; SSE2-NEXT:    retq
825 ; SSSE3-LABEL: shuffle_v8i16_45630127:
826 ; SSSE3:       # BB#0:
827 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
828 ; SSSE3-NEXT:    retq
830 ; SSE41-LABEL: shuffle_v8i16_45630127:
831 ; SSE41:       # BB#0:
832 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
833 ; SSE41-NEXT:    retq
835 ; AVX1OR2-LABEL: shuffle_v8i16_45630127:
836 ; AVX1OR2:       # BB#0:
837 ; AVX1OR2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
838 ; AVX1OR2-NEXT:    retq
840 ; AVX512VL-LABEL: shuffle_v8i16_45630127:
841 ; AVX512VL:       # BB#0:
842 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
843 ; AVX512VL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
844 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,0,3,1]
845 ; AVX512VL-NEXT:    retq
846   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 3, i32 0, i32 1, i32 2, i32 7>
847   ret <8 x i16> %shuffle
850 define <8 x i16> @shuffle_v8i16_37102735(<8 x i16> %a, <8 x i16> %b) {
851 ; SSE2-LABEL: shuffle_v8i16_37102735:
852 ; SSE2:       # BB#0:
853 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
854 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
855 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
856 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
857 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
858 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,4,5,6]
859 ; SSE2-NEXT:    retq
861 ; SSSE3-LABEL: shuffle_v8i16_37102735:
862 ; SSSE3:       # BB#0:
863 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
864 ; SSSE3-NEXT:    retq
866 ; SSE41-LABEL: shuffle_v8i16_37102735:
867 ; SSE41:       # BB#0:
868 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
869 ; SSE41-NEXT:    retq
871 ; AVX-LABEL: shuffle_v8i16_37102735:
872 ; AVX:       # BB#0:
873 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
874 ; AVX-NEXT:    retq
875   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 7, i32 1, i32 0, i32 2, i32 7, i32 3, i32 5>
876   ret <8 x i16> %shuffle
879 define <8 x i16> @shuffle_v8i16_08192a3b(<8 x i16> %a, <8 x i16> %b) {
880 ; SSE-LABEL: shuffle_v8i16_08192a3b:
881 ; SSE:       # BB#0:
882 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
883 ; SSE-NEXT:    retq
885 ; AVX-LABEL: shuffle_v8i16_08192a3b:
886 ; AVX:       # BB#0:
887 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
888 ; AVX-NEXT:    retq
889   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
890   ret <8 x i16> %shuffle
893 define <8 x i16> @shuffle_v8i16_0c1d2e3f(<8 x i16> %a, <8 x i16> %b) {
894 ; SSE-LABEL: shuffle_v8i16_0c1d2e3f:
895 ; SSE:       # BB#0:
896 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
897 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
898 ; SSE-NEXT:    retq
900 ; AVX-LABEL: shuffle_v8i16_0c1d2e3f:
901 ; AVX:       # BB#0:
902 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
903 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
904 ; AVX-NEXT:    retq
905   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 12, i32 1, i32 13, i32 2, i32 14, i32 3, i32 15>
906   ret <8 x i16> %shuffle
909 define <8 x i16> @shuffle_v8i16_4c5d6e7f(<8 x i16> %a, <8 x i16> %b) {
910 ; SSE-LABEL: shuffle_v8i16_4c5d6e7f:
911 ; SSE:       # BB#0:
912 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
913 ; SSE-NEXT:    retq
915 ; AVX-LABEL: shuffle_v8i16_4c5d6e7f:
916 ; AVX:       # BB#0:
917 ; AVX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
918 ; AVX-NEXT:    retq
919   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
920   ret <8 x i16> %shuffle
923 define <8 x i16> @shuffle_v8i16_48596a7b(<8 x i16> %a, <8 x i16> %b) {
924 ; SSE-LABEL: shuffle_v8i16_48596a7b:
925 ; SSE:       # BB#0:
926 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
927 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
928 ; SSE-NEXT:    retq
930 ; AVX-LABEL: shuffle_v8i16_48596a7b:
931 ; AVX:       # BB#0:
932 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
933 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
934 ; AVX-NEXT:    retq
935   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 8, i32 5, i32 9, i32 6, i32 10, i32 7, i32 11>
936   ret <8 x i16> %shuffle
939 define <8 x i16> @shuffle_v8i16_08196e7f(<8 x i16> %a, <8 x i16> %b) {
940 ; SSE-LABEL: shuffle_v8i16_08196e7f:
941 ; SSE:       # BB#0:
942 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]
943 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
944 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
945 ; SSE-NEXT:    retq
947 ; AVX-LABEL: shuffle_v8i16_08196e7f:
948 ; AVX:       # BB#0:
949 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]
950 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
951 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
952 ; AVX-NEXT:    retq
953   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 6, i32 14, i32 7, i32 15>
954   ret <8 x i16> %shuffle
957 define <8 x i16> @shuffle_v8i16_0c1d6879(<8 x i16> %a, <8 x i16> %b) {
958 ; SSE-LABEL: shuffle_v8i16_0c1d6879:
959 ; SSE:       # BB#0:
960 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]
961 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
962 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
963 ; SSE-NEXT:    retq
965 ; AVX-LABEL: shuffle_v8i16_0c1d6879:
966 ; AVX:       # BB#0:
967 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]
968 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
969 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
970 ; AVX-NEXT:    retq
971   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 12, i32 1, i32 13, i32 6, i32 8, i32 7, i32 9>
972   ret <8 x i16> %shuffle
975 define <8 x i16> @shuffle_v8i16_109832ba(<8 x i16> %a, <8 x i16> %b) {
976 ; SSE-LABEL: shuffle_v8i16_109832ba:
977 ; SSE:       # BB#0:
978 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
979 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
980 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]
981 ; SSE-NEXT:    retq
983 ; AVX-LABEL: shuffle_v8i16_109832ba:
984 ; AVX:       # BB#0:
985 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
986 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
987 ; AVX-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]
988 ; AVX-NEXT:    retq
989   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 0, i32 9, i32 8, i32 3, i32 2, i32 11, i32 10>
990   ret <8 x i16> %shuffle
993 define <8 x i16> @shuffle_v8i16_8091a2b3(<8 x i16> %a, <8 x i16> %b) {
994 ; SSE-LABEL: shuffle_v8i16_8091a2b3:
995 ; SSE:       # BB#0:
996 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
997 ; SSE-NEXT:    movdqa %xmm1, %xmm0
998 ; SSE-NEXT:    retq
1000 ; AVX-LABEL: shuffle_v8i16_8091a2b3:
1001 ; AVX:       # BB#0:
1002 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1003 ; AVX-NEXT:    retq
1004   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 0, i32 9, i32 1, i32 10, i32 2, i32 11, i32 3>
1005   ret <8 x i16> %shuffle
1007 define <8 x i16> @shuffle_v8i16_c4d5e6f7(<8 x i16> %a, <8 x i16> %b) {
1008 ; SSE-LABEL: shuffle_v8i16_c4d5e6f7:
1009 ; SSE:       # BB#0:
1010 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1011 ; SSE-NEXT:    movdqa %xmm1, %xmm0
1012 ; SSE-NEXT:    retq
1014 ; AVX-LABEL: shuffle_v8i16_c4d5e6f7:
1015 ; AVX:       # BB#0:
1016 ; AVX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1017 ; AVX-NEXT:    retq
1018   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 12, i32 4, i32 13, i32 5, i32 14, i32 6, i32 15, i32 7>
1019   ret <8 x i16> %shuffle
1022 define <8 x i16> @shuffle_v8i16_0213cedf(<8 x i16> %a, <8 x i16> %b) {
1023 ; SSE-LABEL: shuffle_v8i16_0213cedf:
1024 ; SSE:       # BB#0:
1025 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
1026 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
1027 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,1,3,4,5,6,7]
1028 ; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1029 ; SSE-NEXT:    retq
1031 ; AVX-LABEL: shuffle_v8i16_0213cedf:
1032 ; AVX:       # BB#0:
1033 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
1034 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
1035 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,2,1,3,4,5,6,7]
1036 ; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1037 ; AVX-NEXT:    retq
1038   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 1, i32 3, i32 12, i32 14, i32 13, i32 15>
1039   ret <8 x i16> %shuffle
1042 define <8 x i16> @shuffle_v8i16_443aXXXX(<8 x i16> %a, <8 x i16> %b) {
1043 ; SSE2-LABEL: shuffle_v8i16_443aXXXX:
1044 ; SSE2:       # BB#0:
1045 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,0,65535,65535,65535,65535,65535]
1046 ; SSE2-NEXT:    pand %xmm2, %xmm0
1047 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1048 ; SSE2-NEXT:    por %xmm0, %xmm2
1049 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,1,2,3]
1050 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1051 ; SSE2-NEXT:    retq
1053 ; SSSE3-LABEL: shuffle_v8i16_443aXXXX:
1054 ; SSSE3:       # BB#0:
1055 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[4,5,u,u,u,u,u,u,u,u]
1056 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7],zero,zero,xmm0[u,u,u,u,u,u,u,u]
1057 ; SSSE3-NEXT:    por %xmm1, %xmm0
1058 ; SSSE3-NEXT:    retq
1060 ; SSE41-LABEL: shuffle_v8i16_443aXXXX:
1061 ; SSE41:       # BB#0:
1062 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
1063 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1064 ; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1065 ; SSE41-NEXT:    retq
1067 ; AVX-LABEL: shuffle_v8i16_443aXXXX:
1068 ; AVX:       # BB#0:
1069 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
1070 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1071 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1072 ; AVX-NEXT:    retq
1073   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 4, i32 3, i32 10, i32 undef, i32 undef, i32 undef, i32 undef>
1074   ret <8 x i16> %shuffle
1077 define <8 x i16> @shuffle_v8i16_032dXXXX(<8 x i16> %a, <8 x i16> %b) {
1078 ; SSE2-LABEL: shuffle_v8i16_032dXXXX:
1079 ; SSE2:       # BB#0:
1080 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
1081 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[3,1,2,0]
1082 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,6,7]
1083 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1084 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
1085 ; SSE2-NEXT:    retq
1087 ; SSSE3-LABEL: shuffle_v8i16_032dXXXX:
1088 ; SSSE3:       # BB#0:
1089 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,u,u,u,u,u,u,u,u]
1090 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5],zero,zero,xmm0[u,u,u,u,u,u,u,u]
1091 ; SSSE3-NEXT:    por %xmm1, %xmm0
1092 ; SSSE3-NEXT:    retq
1094 ; SSE41-LABEL: shuffle_v8i16_032dXXXX:
1095 ; SSE41:       # BB#0:
1096 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1097 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]
1098 ; SSE41-NEXT:    retq
1100 ; AVX1-LABEL: shuffle_v8i16_032dXXXX:
1101 ; AVX1:       # BB#0:
1102 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1103 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]
1104 ; AVX1-NEXT:    retq
1106 ; AVX2OR512VL-LABEL: shuffle_v8i16_032dXXXX:
1107 ; AVX2OR512VL:       # BB#0:
1108 ; AVX2OR512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1109 ; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]
1110 ; AVX2OR512VL-NEXT:    retq
1111   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 3, i32 2, i32 13, i32 undef, i32 undef, i32 undef, i32 undef>
1112   ret <8 x i16> %shuffle
1114 define <8 x i16> @shuffle_v8i16_XXXdXXXX(<8 x i16> %a, <8 x i16> %b) {
1115 ; SSE-LABEL: shuffle_v8i16_XXXdXXXX:
1116 ; SSE:       # BB#0:
1117 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,2,3,3]
1118 ; SSE-NEXT:    retq
1120 ; AVX-LABEL: shuffle_v8i16_XXXdXXXX:
1121 ; AVX:       # BB#0:
1122 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm1[2,2,3,3]
1123 ; AVX-NEXT:    retq
1124   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 13, i32 undef, i32 undef, i32 undef, i32 undef>
1125   ret <8 x i16> %shuffle
1128 define <8 x i16> @shuffle_v8i16_012dXXXX(<8 x i16> %a, <8 x i16> %b) {
1129 ; SSE2-LABEL: shuffle_v8i16_012dXXXX:
1130 ; SSE2:       # BB#0:
1131 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,0,65535,65535,65535,65535]
1132 ; SSE2-NEXT:    pand %xmm2, %xmm0
1133 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
1134 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1135 ; SSE2-NEXT:    por %xmm2, %xmm0
1136 ; SSE2-NEXT:    retq
1138 ; SSSE3-LABEL: shuffle_v8i16_012dXXXX:
1139 ; SSSE3:       # BB#0:
1140 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,u,u,u,u,u,u,u,u]
1141 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],zero,zero,xmm0[u,u,u,u,u,u,u,u]
1142 ; SSSE3-NEXT:    por %xmm1, %xmm0
1143 ; SSSE3-NEXT:    retq
1145 ; SSE41-LABEL: shuffle_v8i16_012dXXXX:
1146 ; SSE41:       # BB#0:
1147 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
1148 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]
1149 ; SSE41-NEXT:    retq
1151 ; AVX-LABEL: shuffle_v8i16_012dXXXX:
1152 ; AVX:       # BB#0:
1153 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
1154 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]
1155 ; AVX-NEXT:    retq
1156   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 13, i32 undef, i32 undef, i32 undef, i32 undef>
1157   ret <8 x i16> %shuffle
1160 define <8 x i16> @shuffle_v8i16_XXXXcde3(<8 x i16> %a, <8 x i16> %b) {
1161 ; SSE2-LABEL: shuffle_v8i16_XXXXcde3:
1162 ; SSE2:       # BB#0:
1163 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535,65535,65535,65535,0]
1164 ; SSE2-NEXT:    pand %xmm2, %xmm1
1165 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1166 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1167 ; SSE2-NEXT:    por %xmm1, %xmm2
1168 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1169 ; SSE2-NEXT:    retq
1171 ; SSSE3-LABEL: shuffle_v8i16_XXXXcde3:
1172 ; SSSE3:       # BB#0:
1173 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,u,u,u,u],zero,zero,zero,zero,zero,zero,xmm0[6,7]
1174 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,8,9,10,11,12,13],zero,zero
1175 ; SSSE3-NEXT:    por %xmm1, %xmm0
1176 ; SSSE3-NEXT:    retq
1178 ; SSE41-LABEL: shuffle_v8i16_XXXXcde3:
1179 ; SSE41:       # BB#0:
1180 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1181 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1182 ; SSE41-NEXT:    retq
1184 ; AVX1-LABEL: shuffle_v8i16_XXXXcde3:
1185 ; AVX1:       # BB#0:
1186 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1187 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1188 ; AVX1-NEXT:    retq
1190 ; AVX2OR512VL-LABEL: shuffle_v8i16_XXXXcde3:
1191 ; AVX2OR512VL:       # BB#0:
1192 ; AVX2OR512VL-NEXT:    vpbroadcastq %xmm0, %xmm0
1193 ; AVX2OR512VL-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1194 ; AVX2OR512VL-NEXT:    retq
1195   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 12, i32 13, i32 14, i32 3>
1196   ret <8 x i16> %shuffle
1199 define <8 x i16> @shuffle_v8i16_cde3XXXX(<8 x i16> %a, <8 x i16> %b) {
1200 ; SSE2-LABEL: shuffle_v8i16_cde3XXXX:
1201 ; SSE2:       # BB#0:
1202 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,0,65535,65535,65535,65535]
1203 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
1204 ; SSE2-NEXT:    pand %xmm2, %xmm1
1205 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1206 ; SSE2-NEXT:    por %xmm1, %xmm2
1207 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1208 ; SSE2-NEXT:    retq
1210 ; SSSE3-LABEL: shuffle_v8i16_cde3XXXX:
1211 ; SSSE3:       # BB#0:
1212 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[6,7,u,u,u,u,u,u,u,u]
1213 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13],zero,zero,xmm1[u,u,u,u,u,u,u,u]
1214 ; SSSE3-NEXT:    por %xmm1, %xmm0
1215 ; SSSE3-NEXT:    retq
1217 ; SSE41-LABEL: shuffle_v8i16_cde3XXXX:
1218 ; SSE41:       # BB#0:
1219 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
1220 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]
1221 ; SSE41-NEXT:    retq
1223 ; AVX-LABEL: shuffle_v8i16_cde3XXXX:
1224 ; AVX:       # BB#0:
1225 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
1226 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]
1227 ; AVX-NEXT:    retq
1228   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 12, i32 13, i32 14, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
1229   ret <8 x i16> %shuffle
1232 define <8 x i16> @shuffle_v8i16_012dcde3(<8 x i16> %a, <8 x i16> %b) {
1233 ; SSE2-LABEL: shuffle_v8i16_012dcde3:
1234 ; SSE2:       # BB#0:
1235 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1]
1236 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,3,2,1]
1237 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
1238 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
1239 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
1240 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,5,7]
1241 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
1242 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7]
1243 ; SSE2-NEXT:    retq
1245 ; SSSE3-LABEL: shuffle_v8i16_012dcde3:
1246 ; SSSE3:       # BB#0:
1247 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,8,9,10,11,12,13],zero,zero
1248 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],zero,zero,zero,zero,zero,zero,zero,zero,xmm0[6,7]
1249 ; SSSE3-NEXT:    por %xmm1, %xmm0
1250 ; SSSE3-NEXT:    retq
1252 ; SSE41-LABEL: shuffle_v8i16_012dcde3:
1253 ; SSE41:       # BB#0:
1254 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1255 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]
1256 ; SSE41-NEXT:    retq
1258 ; AVX1-LABEL: shuffle_v8i16_012dcde3:
1259 ; AVX1:       # BB#0:
1260 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1261 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]
1262 ; AVX1-NEXT:    retq
1264 ; AVX2OR512VL-LABEL: shuffle_v8i16_012dcde3:
1265 ; AVX2OR512VL:       # BB#0:
1266 ; AVX2OR512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1267 ; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]
1268 ; AVX2OR512VL-NEXT:    retq
1269   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 13, i32 12, i32 13, i32 14, i32 3>
1270   ret <8 x i16> %shuffle
1273 define <8 x i16> @shuffle_v8i16_0923cde7(<8 x i16> %a, <8 x i16> %b) {
1274 ; SSE2-LABEL: shuffle_v8i16_0923cde7:
1275 ; SSE2:       # BB#0:
1276 ; SSE2-NEXT:    movaps {{.*#+}} xmm2 = [65535,0,65535,65535,0,0,0,65535]
1277 ; SSE2-NEXT:    andps %xmm2, %xmm0
1278 ; SSE2-NEXT:    andnps %xmm1, %xmm2
1279 ; SSE2-NEXT:    orps %xmm2, %xmm0
1280 ; SSE2-NEXT:    retq
1282 ; SSSE3-LABEL: shuffle_v8i16_0923cde7:
1283 ; SSSE3:       # BB#0:
1284 ; SSSE3-NEXT:    movaps {{.*#+}} xmm2 = [65535,0,65535,65535,0,0,0,65535]
1285 ; SSSE3-NEXT:    andps %xmm2, %xmm0
1286 ; SSSE3-NEXT:    andnps %xmm1, %xmm2
1287 ; SSSE3-NEXT:    orps %xmm2, %xmm0
1288 ; SSSE3-NEXT:    retq
1290 ; SSE41-LABEL: shuffle_v8i16_0923cde7:
1291 ; SSE41:       # BB#0:
1292 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]
1293 ; SSE41-NEXT:    retq
1295 ; AVX-LABEL: shuffle_v8i16_0923cde7:
1296 ; AVX:       # BB#0:
1297 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]
1298 ; AVX-NEXT:    retq
1299   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 3, i32 12, i32 13, i32 14, i32 7>
1300   ret <8 x i16> %shuffle
1303 define <8 x i16> @shuffle_v8i16_XXX1X579(<8 x i16> %a, <8 x i16> %b) {
1304 ; SSE2-LABEL: shuffle_v8i16_XXX1X579:
1305 ; SSE2:       # BB#0:
1306 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,1,2,0]
1307 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535,65535,65535,65535,0]
1308 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,2,1,4,5,6,7]
1309 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1310 ; SSE2-NEXT:    pand %xmm1, %xmm0
1311 ; SSE2-NEXT:    pandn %xmm2, %xmm1
1312 ; SSE2-NEXT:    por %xmm0, %xmm1
1313 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1314 ; SSE2-NEXT:    retq
1316 ; SSSE3-LABEL: shuffle_v8i16_XXX1X579:
1317 ; SSSE3:       # BB#0:
1318 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u],zero,zero,xmm1[u,u],zero,zero,zero,zero,xmm1[2,3]
1319 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,u,u,2,3,u,u,10,11,14,15],zero,zero
1320 ; SSSE3-NEXT:    por %xmm1, %xmm0
1321 ; SSSE3-NEXT:    retq
1323 ; SSE41-LABEL: shuffle_v8i16_XXX1X579:
1324 ; SSE41:       # BB#0:
1325 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]
1326 ; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,2,1,4,5,6,7]
1327 ; SSE41-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1328 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1329 ; SSE41-NEXT:    retq
1331 ; AVX1-LABEL: shuffle_v8i16_XXX1X579:
1332 ; AVX1:       # BB#0:
1333 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]
1334 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,2,1,4,5,6,7]
1335 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1336 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1337 ; AVX1-NEXT:    retq
1339 ; AVX2OR512VL-LABEL: shuffle_v8i16_XXX1X579:
1340 ; AVX2OR512VL:       # BB#0:
1341 ; AVX2OR512VL-NEXT:    vpbroadcastd %xmm1, %xmm1
1342 ; AVX2OR512VL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,2,1,4,5,6,7]
1343 ; AVX2OR512VL-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1344 ; AVX2OR512VL-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1345 ; AVX2OR512VL-NEXT:    retq
1346   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 1, i32 undef, i32 5, i32 7, i32 9>
1347   ret <8 x i16> %shuffle
1350 define <8 x i16> @shuffle_v8i16_XX4X8acX(<8 x i16> %a, <8 x i16> %b) {
1351 ; SSE2-LABEL: shuffle_v8i16_XX4X8acX:
1352 ; SSE2:       # BB#0:
1353 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,2,3,3]
1354 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]
1355 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,2,0]
1356 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
1357 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
1358 ; SSE2-NEXT:    retq
1360 ; SSSE3-LABEL: shuffle_v8i16_XX4X8acX:
1361 ; SSSE3:       # BB#0:
1362 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,8,9,u,u],zero,zero,zero,zero,zero,zero,xmm0[u,u]
1363 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u],zero,zero,xmm1[u,u,0,1,4,5,8,9,u,u]
1364 ; SSSE3-NEXT:    por %xmm1, %xmm0
1365 ; SSSE3-NEXT:    retq
1367 ; SSE41-LABEL: shuffle_v8i16_XX4X8acX:
1368 ; SSE41:       # BB#0:
1369 ; SSE41-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,4,5,6,7,0,1,4,5,8,9,4,5]
1370 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]
1371 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1372 ; SSE41-NEXT:    retq
1374 ; AVX1-LABEL: shuffle_v8i16_XX4X8acX:
1375 ; AVX1:       # BB#0:
1376 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,4,5,6,7,0,1,4,5,8,9,4,5]
1377 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]
1378 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1379 ; AVX1-NEXT:    retq
1381 ; AVX2OR512VL-LABEL: shuffle_v8i16_XX4X8acX:
1382 ; AVX2OR512VL:       # BB#0:
1383 ; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,4,5,6,7,0,1,4,5,8,9,4,5]
1384 ; AVX2OR512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]
1385 ; AVX2OR512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1386 ; AVX2OR512VL-NEXT:    retq
1387   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 undef, i32 4, i32 undef, i32 8, i32 10, i32 12, i32 undef>
1388   ret <8 x i16> %shuffle
1391 define <8 x i16> @shuffle_v8i16_8zzzzzzz(i16 %i) {
1392 ; SSE-LABEL: shuffle_v8i16_8zzzzzzz:
1393 ; SSE:       # BB#0:
1394 ; SSE-NEXT:    movzwl %di, %eax
1395 ; SSE-NEXT:    movd %eax, %xmm0
1396 ; SSE-NEXT:    retq
1398 ; AVX-LABEL: shuffle_v8i16_8zzzzzzz:
1399 ; AVX:       # BB#0:
1400 ; AVX-NEXT:    movzwl %di, %eax
1401 ; AVX-NEXT:    vmovd %eax, %xmm0
1402 ; AVX-NEXT:    retq
1403   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1404   %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 8, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1405   ret <8 x i16> %shuffle
1408 define <8 x i16> @shuffle_v8i16_z8zzzzzz(i16 %i) {
1409 ; SSE-LABEL: shuffle_v8i16_z8zzzzzz:
1410 ; SSE:       # BB#0:
1411 ; SSE-NEXT:    pxor %xmm0, %xmm0
1412 ; SSE-NEXT:    pinsrw $1, %edi, %xmm0
1413 ; SSE-NEXT:    retq
1415 ; AVX-LABEL: shuffle_v8i16_z8zzzzzz:
1416 ; AVX:       # BB#0:
1417 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1418 ; AVX-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0
1419 ; AVX-NEXT:    retq
1420   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1421   %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 2, i32 8, i32 3, i32 7, i32 6, i32 5, i32 4, i32 3>
1422   ret <8 x i16> %shuffle
1425 define <8 x i16> @shuffle_v8i16_zzzzz8zz(i16 %i) {
1426 ; SSE-LABEL: shuffle_v8i16_zzzzz8zz:
1427 ; SSE:       # BB#0:
1428 ; SSE-NEXT:    pxor %xmm0, %xmm0
1429 ; SSE-NEXT:    pinsrw $5, %edi, %xmm0
1430 ; SSE-NEXT:    retq
1432 ; AVX-LABEL: shuffle_v8i16_zzzzz8zz:
1433 ; AVX:       # BB#0:
1434 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1435 ; AVX-NEXT:    vpinsrw $5, %edi, %xmm0, %xmm0
1436 ; AVX-NEXT:    retq
1437   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1438   %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0>
1439   ret <8 x i16> %shuffle
1442 define <8 x i16> @shuffle_v8i16_zuuzuuz8(i16 %i) {
1443 ; SSE-LABEL: shuffle_v8i16_zuuzuuz8:
1444 ; SSE:       # BB#0:
1445 ; SSE-NEXT:    pxor %xmm0, %xmm0
1446 ; SSE-NEXT:    pinsrw $7, %edi, %xmm0
1447 ; SSE-NEXT:    retq
1449 ; AVX-LABEL: shuffle_v8i16_zuuzuuz8:
1450 ; AVX:       # BB#0:
1451 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1452 ; AVX-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0
1453 ; AVX-NEXT:    retq
1454   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1455   %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 0, i32 undef, i32 undef, i32 3, i32 undef, i32 undef, i32 6, i32 8>
1456   ret <8 x i16> %shuffle
1459 define <8 x i16> @shuffle_v8i16_zzBzzzzz(i16 %i) {
1460 ; SSE-LABEL: shuffle_v8i16_zzBzzzzz:
1461 ; SSE:       # BB#0:
1462 ; SSE-NEXT:    pxor %xmm0, %xmm0
1463 ; SSE-NEXT:    pinsrw $2, %edi, %xmm0
1464 ; SSE-NEXT:    retq
1466 ; AVX-LABEL: shuffle_v8i16_zzBzzzzz:
1467 ; AVX:       # BB#0:
1468 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1469 ; AVX-NEXT:    vpinsrw $2, %edi, %xmm0, %xmm0
1470 ; AVX-NEXT:    retq
1471   %a = insertelement <8 x i16> undef, i16 %i, i32 3
1472   %shuffle = shufflevector <8 x i16> zeroinitializer, <8 x i16> %a, <8 x i32> <i32 0, i32 1, i32 11, i32 3, i32 4, i32 5, i32 6, i32 7>
1473   ret <8 x i16> %shuffle
1476 define <8 x i16> @shuffle_v8i16_def01234(<8 x i16> %a, <8 x i16> %b) {
1477 ; SSE2-LABEL: shuffle_v8i16_def01234:
1478 ; SSE2:       # BB#0:
1479 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1480 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1481 ; SSE2-NEXT:    por %xmm1, %xmm0
1482 ; SSE2-NEXT:    retq
1484 ; SSSE3-LABEL: shuffle_v8i16_def01234:
1485 ; SSSE3:       # BB#0:
1486 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1487 ; SSSE3-NEXT:    retq
1489 ; SSE41-LABEL: shuffle_v8i16_def01234:
1490 ; SSE41:       # BB#0:
1491 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1492 ; SSE41-NEXT:    retq
1494 ; AVX-LABEL: shuffle_v8i16_def01234:
1495 ; AVX:       # BB#0:
1496 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1497 ; AVX-NEXT:    retq
1498   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4>
1499   ret <8 x i16> %shuffle
1502 define <8 x i16> @shuffle_v8i16_ueuu123u(<8 x i16> %a, <8 x i16> %b) {
1503 ; SSE2-LABEL: shuffle_v8i16_ueuu123u:
1504 ; SSE2:       # BB#0:
1505 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1506 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1507 ; SSE2-NEXT:    por %xmm1, %xmm0
1508 ; SSE2-NEXT:    retq
1510 ; SSSE3-LABEL: shuffle_v8i16_ueuu123u:
1511 ; SSSE3:       # BB#0:
1512 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1513 ; SSSE3-NEXT:    retq
1515 ; SSE41-LABEL: shuffle_v8i16_ueuu123u:
1516 ; SSE41:       # BB#0:
1517 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1518 ; SSE41-NEXT:    retq
1520 ; AVX-LABEL: shuffle_v8i16_ueuu123u:
1521 ; AVX:       # BB#0:
1522 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1523 ; AVX-NEXT:    retq
1524   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 14, i32 undef, i32 undef, i32 1, i32 2, i32 3, i32 undef>
1525   ret <8 x i16> %shuffle
1528 define <8 x i16> @shuffle_v8i16_56701234(<8 x i16> %a, <8 x i16> %b) {
1529 ; SSE2-LABEL: shuffle_v8i16_56701234:
1530 ; SSE2:       # BB#0:
1531 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1532 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1533 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1534 ; SSE2-NEXT:    por %xmm1, %xmm0
1535 ; SSE2-NEXT:    retq
1537 ; SSSE3-LABEL: shuffle_v8i16_56701234:
1538 ; SSSE3:       # BB#0:
1539 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1540 ; SSSE3-NEXT:    retq
1542 ; SSE41-LABEL: shuffle_v8i16_56701234:
1543 ; SSE41:       # BB#0:
1544 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1545 ; SSE41-NEXT:    retq
1547 ; AVX-LABEL: shuffle_v8i16_56701234:
1548 ; AVX:       # BB#0:
1549 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1550 ; AVX-NEXT:    retq
1551   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4>
1552   ret <8 x i16> %shuffle
1555 define <8 x i16> @shuffle_v8i16_u6uu123u(<8 x i16> %a, <8 x i16> %b) {
1556 ; SSE2-LABEL: shuffle_v8i16_u6uu123u:
1557 ; SSE2:       # BB#0:
1558 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1559 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1560 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1561 ; SSE2-NEXT:    por %xmm1, %xmm0
1562 ; SSE2-NEXT:    retq
1564 ; SSSE3-LABEL: shuffle_v8i16_u6uu123u:
1565 ; SSSE3:       # BB#0:
1566 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1567 ; SSSE3-NEXT:    retq
1569 ; SSE41-LABEL: shuffle_v8i16_u6uu123u:
1570 ; SSE41:       # BB#0:
1571 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1572 ; SSE41-NEXT:    retq
1574 ; AVX-LABEL: shuffle_v8i16_u6uu123u:
1575 ; AVX:       # BB#0:
1576 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1577 ; AVX-NEXT:    retq
1578   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 6, i32 undef, i32 undef, i32 1, i32 2, i32 3, i32 undef>
1579   ret <8 x i16> %shuffle
1582 define <8 x i16> @shuffle_v8i16_uuuu123u(<8 x i16> %a, <8 x i16> %b) {
1583 ; SSE-LABEL: shuffle_v8i16_uuuu123u:
1584 ; SSE:       # BB#0:
1585 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1586 ; SSE-NEXT:    retq
1588 ; AVX-LABEL: shuffle_v8i16_uuuu123u:
1589 ; AVX:       # BB#0:
1590 ; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1591 ; AVX-NEXT:    retq
1592   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 1, i32 2, i32 3, i32 undef>
1593   ret <8 x i16> %shuffle
1596 define <8 x i16> @shuffle_v8i16_bcdef012(<8 x i16> %a, <8 x i16> %b) {
1597 ; SSE2-LABEL: shuffle_v8i16_bcdef012:
1598 ; SSE2:       # BB#0:
1599 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1600 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
1601 ; SSE2-NEXT:    por %xmm1, %xmm0
1602 ; SSE2-NEXT:    retq
1604 ; SSSE3-LABEL: shuffle_v8i16_bcdef012:
1605 ; SSSE3:       # BB#0:
1606 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1607 ; SSSE3-NEXT:    retq
1609 ; SSE41-LABEL: shuffle_v8i16_bcdef012:
1610 ; SSE41:       # BB#0:
1611 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1612 ; SSE41-NEXT:    retq
1614 ; AVX-LABEL: shuffle_v8i16_bcdef012:
1615 ; AVX:       # BB#0:
1616 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1617 ; AVX-NEXT:    retq
1618   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2>
1619   ret <8 x i16> %shuffle
1622 define <8 x i16> @shuffle_v8i16_ucdeuu1u(<8 x i16> %a, <8 x i16> %b) {
1623 ; SSE2-LABEL: shuffle_v8i16_ucdeuu1u:
1624 ; SSE2:       # BB#0:
1625 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1626 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
1627 ; SSE2-NEXT:    por %xmm1, %xmm0
1628 ; SSE2-NEXT:    retq
1630 ; SSSE3-LABEL: shuffle_v8i16_ucdeuu1u:
1631 ; SSSE3:       # BB#0:
1632 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1633 ; SSSE3-NEXT:    retq
1635 ; SSE41-LABEL: shuffle_v8i16_ucdeuu1u:
1636 ; SSE41:       # BB#0:
1637 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1638 ; SSE41-NEXT:    retq
1640 ; AVX-LABEL: shuffle_v8i16_ucdeuu1u:
1641 ; AVX:       # BB#0:
1642 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1643 ; AVX-NEXT:    retq
1644   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 12, i32 13, i32 14, i32 undef, i32 undef, i32 1, i32 undef>
1645   ret <8 x i16> %shuffle
1648 define <8 x i16> @shuffle_v8i16_34567012(<8 x i16> %a, <8 x i16> %b) {
1649 ; SSE2-LABEL: shuffle_v8i16_34567012:
1650 ; SSE2:       # BB#0:
1651 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1652 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1653 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
1654 ; SSE2-NEXT:    por %xmm1, %xmm0
1655 ; SSE2-NEXT:    retq
1657 ; SSSE3-LABEL: shuffle_v8i16_34567012:
1658 ; SSSE3:       # BB#0:
1659 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1660 ; SSSE3-NEXT:    retq
1662 ; SSE41-LABEL: shuffle_v8i16_34567012:
1663 ; SSE41:       # BB#0:
1664 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1665 ; SSE41-NEXT:    retq
1667 ; AVX-LABEL: shuffle_v8i16_34567012:
1668 ; AVX:       # BB#0:
1669 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1670 ; AVX-NEXT:    retq
1671   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2>
1672   ret <8 x i16> %shuffle
1675 define <8 x i16> @shuffle_v8i16_u456uu1u(<8 x i16> %a, <8 x i16> %b) {
1676 ; SSE2-LABEL: shuffle_v8i16_u456uu1u:
1677 ; SSE2:       # BB#0:
1678 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1679 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1680 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
1681 ; SSE2-NEXT:    por %xmm1, %xmm0
1682 ; SSE2-NEXT:    retq
1684 ; SSSE3-LABEL: shuffle_v8i16_u456uu1u:
1685 ; SSSE3:       # BB#0:
1686 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1687 ; SSSE3-NEXT:    retq
1689 ; SSE41-LABEL: shuffle_v8i16_u456uu1u:
1690 ; SSE41:       # BB#0:
1691 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1692 ; SSE41-NEXT:    retq
1694 ; AVX-LABEL: shuffle_v8i16_u456uu1u:
1695 ; AVX:       # BB#0:
1696 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1697 ; AVX-NEXT:    retq
1698   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 4, i32 5, i32 6, i32 undef, i32 undef, i32 1, i32 undef>
1699   ret <8 x i16> %shuffle
1702 define <8 x i16> @shuffle_v8i16_u456uuuu(<8 x i16> %a, <8 x i16> %b) {
1703 ; SSE-LABEL: shuffle_v8i16_u456uuuu:
1704 ; SSE:       # BB#0:
1705 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1706 ; SSE-NEXT:    retq
1708 ; AVX-LABEL: shuffle_v8i16_u456uuuu:
1709 ; AVX:       # BB#0:
1710 ; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1711 ; AVX-NEXT:    retq
1712   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 4, i32 5, i32 6, i32 undef, i32 undef, i32 undef, i32 undef>
1713   ret <8 x i16> %shuffle
1716 define <8 x i16> @shuffle_v8i16_3456789a(<8 x i16> %a, <8 x i16> %b) {
1717 ; SSE2-LABEL: shuffle_v8i16_3456789a:
1718 ; SSE2:       # BB#0:
1719 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1720 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]
1721 ; SSE2-NEXT:    por %xmm1, %xmm0
1722 ; SSE2-NEXT:    retq
1724 ; SSSE3-LABEL: shuffle_v8i16_3456789a:
1725 ; SSSE3:       # BB#0:
1726 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
1727 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1728 ; SSSE3-NEXT:    retq
1730 ; SSE41-LABEL: shuffle_v8i16_3456789a:
1731 ; SSE41:       # BB#0:
1732 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
1733 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1734 ; SSE41-NEXT:    retq
1736 ; AVX-LABEL: shuffle_v8i16_3456789a:
1737 ; AVX:       # BB#0:
1738 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
1739 ; AVX-NEXT:    retq
1740   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>
1741   ret <8 x i16> %shuffle
1744 define <8 x i16> @shuffle_v8i16_u456uu9u(<8 x i16> %a, <8 x i16> %b) {
1745 ; SSE2-LABEL: shuffle_v8i16_u456uu9u:
1746 ; SSE2:       # BB#0:
1747 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1748 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]
1749 ; SSE2-NEXT:    por %xmm1, %xmm0
1750 ; SSE2-NEXT:    retq
1752 ; SSSE3-LABEL: shuffle_v8i16_u456uu9u:
1753 ; SSSE3:       # BB#0:
1754 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
1755 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1756 ; SSSE3-NEXT:    retq
1758 ; SSE41-LABEL: shuffle_v8i16_u456uu9u:
1759 ; SSE41:       # BB#0:
1760 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
1761 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1762 ; SSE41-NEXT:    retq
1764 ; AVX-LABEL: shuffle_v8i16_u456uu9u:
1765 ; AVX:       # BB#0:
1766 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
1767 ; AVX-NEXT:    retq
1768   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 4, i32 5, i32 6, i32 undef, i32 undef, i32 9, i32 undef>
1769   ret <8 x i16> %shuffle
1772 define <8 x i16> @shuffle_v8i16_56789abc(<8 x i16> %a, <8 x i16> %b) {
1773 ; SSE2-LABEL: shuffle_v8i16_56789abc:
1774 ; SSE2:       # BB#0:
1775 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1776 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9]
1777 ; SSE2-NEXT:    por %xmm1, %xmm0
1778 ; SSE2-NEXT:    retq
1780 ; SSSE3-LABEL: shuffle_v8i16_56789abc:
1781 ; SSSE3:       # BB#0:
1782 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
1783 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1784 ; SSSE3-NEXT:    retq
1786 ; SSE41-LABEL: shuffle_v8i16_56789abc:
1787 ; SSE41:       # BB#0:
1788 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
1789 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1790 ; SSE41-NEXT:    retq
1792 ; AVX-LABEL: shuffle_v8i16_56789abc:
1793 ; AVX:       # BB#0:
1794 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
1795 ; AVX-NEXT:    retq
1796   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12>
1797   ret <8 x i16> %shuffle
1800 define <8 x i16> @shuffle_v8i16_u6uu9abu(<8 x i16> %a, <8 x i16> %b) {
1801 ; SSE2-LABEL: shuffle_v8i16_u6uu9abu:
1802 ; SSE2:       # BB#0:
1803 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1804 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9]
1805 ; SSE2-NEXT:    por %xmm1, %xmm0
1806 ; SSE2-NEXT:    retq
1808 ; SSSE3-LABEL: shuffle_v8i16_u6uu9abu:
1809 ; SSSE3:       # BB#0:
1810 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
1811 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1812 ; SSSE3-NEXT:    retq
1814 ; SSE41-LABEL: shuffle_v8i16_u6uu9abu:
1815 ; SSE41:       # BB#0:
1816 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
1817 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1818 ; SSE41-NEXT:    retq
1820 ; AVX-LABEL: shuffle_v8i16_u6uu9abu:
1821 ; AVX:       # BB#0:
1822 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
1823 ; AVX-NEXT:    retq
1824   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 undef, i32 6, i32 undef, i32 undef, i32 9, i32 10, i32 11, i32 undef>
1825   ret <8 x i16> %shuffle
1828 define <8 x i16> @shuffle_v8i16_0uuu1uuu(<8 x i16> %a) {
1829 ; SSE2-LABEL: shuffle_v8i16_0uuu1uuu:
1830 ; SSE2:       # BB#0:
1831 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,3]
1832 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,6,7]
1833 ; SSE2-NEXT:    retq
1835 ; SSSE3-LABEL: shuffle_v8i16_0uuu1uuu:
1836 ; SSSE3:       # BB#0:
1837 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,3]
1838 ; SSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,6,7]
1839 ; SSSE3-NEXT:    retq
1841 ; SSE41-LABEL: shuffle_v8i16_0uuu1uuu:
1842 ; SSE41:       # BB#0:
1843 ; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
1844 ; SSE41-NEXT:    retq
1846 ; AVX-LABEL: shuffle_v8i16_0uuu1uuu:
1847 ; AVX:       # BB#0:
1848 ; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
1849 ; AVX-NEXT:    retq
1850   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 undef, i32 undef, i32 undef, i32 1, i32 undef, i32 undef, i32 undef>
1851   ret <8 x i16> %shuffle
1854 define <8 x i16> @shuffle_v8i16_0zzz1zzz(<8 x i16> %a) {
1855 ; SSE2-LABEL: shuffle_v8i16_0zzz1zzz:
1856 ; SSE2:       # BB#0:
1857 ; SSE2-NEXT:    pxor %xmm1, %xmm1
1858 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1859 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1860 ; SSE2-NEXT:    retq
1862 ; SSSE3-LABEL: shuffle_v8i16_0zzz1zzz:
1863 ; SSSE3:       # BB#0:
1864 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
1865 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1866 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1867 ; SSSE3-NEXT:    retq
1869 ; SSE41-LABEL: shuffle_v8i16_0zzz1zzz:
1870 ; SSE41:       # BB#0:
1871 ; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
1872 ; SSE41-NEXT:    retq
1874 ; AVX-LABEL: shuffle_v8i16_0zzz1zzz:
1875 ; AVX:       # BB#0:
1876 ; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
1877 ; AVX-NEXT:    retq
1878   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>
1879   ret <8 x i16> %shuffle
1882 define <8 x i16> @shuffle_v8i16_0u1u2u3u(<8 x i16> %a) {
1883 ; SSE2-LABEL: shuffle_v8i16_0u1u2u3u:
1884 ; SSE2:       # BB#0:
1885 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
1886 ; SSE2-NEXT:    retq
1888 ; SSSE3-LABEL: shuffle_v8i16_0u1u2u3u:
1889 ; SSSE3:       # BB#0:
1890 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
1891 ; SSSE3-NEXT:    retq
1893 ; SSE41-LABEL: shuffle_v8i16_0u1u2u3u:
1894 ; SSE41:       # BB#0:
1895 ; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1896 ; SSE41-NEXT:    retq
1898 ; AVX-LABEL: shuffle_v8i16_0u1u2u3u:
1899 ; AVX:       # BB#0:
1900 ; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1901 ; AVX-NEXT:    retq
1902   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 undef, i32 1, i32 undef, i32 2, i32 undef, i32 3, i32 undef>
1903   ret <8 x i16> %shuffle
1906 define <8 x i16> @shuffle_v8i16_0z1z2z3z(<8 x i16> %a) {
1907 ; SSE2-LABEL: shuffle_v8i16_0z1z2z3z:
1908 ; SSE2:       # BB#0:
1909 ; SSE2-NEXT:    pxor %xmm1, %xmm1
1910 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1911 ; SSE2-NEXT:    retq
1913 ; SSSE3-LABEL: shuffle_v8i16_0z1z2z3z:
1914 ; SSSE3:       # BB#0:
1915 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
1916 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1917 ; SSSE3-NEXT:    retq
1919 ; SSE41-LABEL: shuffle_v8i16_0z1z2z3z:
1920 ; SSE41:       # BB#0:
1921 ; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1922 ; SSE41-NEXT:    retq
1924 ; AVX-LABEL: shuffle_v8i16_0z1z2z3z:
1925 ; AVX:       # BB#0:
1926 ; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1927 ; AVX-NEXT:    retq
1928   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>
1929   ret <8 x i16> %shuffle
1932 define <8 x i16> @shuffle_v8i16_01100110(<8 x i16> %a) {
1933 ; SSE2-LABEL: shuffle_v8i16_01100110:
1934 ; SSE2:       # BB#0:
1935 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,3]
1936 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
1937 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,5,4]
1938 ; SSE2-NEXT:    retq
1940 ; SSSE3-LABEL: shuffle_v8i16_01100110:
1941 ; SSSE3:       # BB#0:
1942 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]
1943 ; SSSE3-NEXT:    retq
1945 ; SSE41-LABEL: shuffle_v8i16_01100110:
1946 ; SSE41:       # BB#0:
1947 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]
1948 ; SSE41-NEXT:    retq
1950 ; AVX-LABEL: shuffle_v8i16_01100110:
1951 ; AVX:       # BB#0:
1952 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]
1953 ; AVX-NEXT:    retq
1954   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 1, i32 0>
1955   ret <8 x i16> %shuffle
1958 define <8 x i16> @shuffle_v8i16_01u0u110(<8 x i16> %a) {
1959 ; SSE2-LABEL: shuffle_v8i16_01u0u110:
1960 ; SSE2:       # BB#0:
1961 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,3]
1962 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,2,0,4,5,6,7]
1963 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,5,4]
1964 ; SSE2-NEXT:    retq
1966 ; SSSE3-LABEL: shuffle_v8i16_01u0u110:
1967 ; SSSE3:       # BB#0:
1968 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,0,1,0,1,2,3,2,3,0,1]
1969 ; SSSE3-NEXT:    retq
1971 ; SSE41-LABEL: shuffle_v8i16_01u0u110:
1972 ; SSE41:       # BB#0:
1973 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,0,1,0,1,2,3,2,3,0,1]
1974 ; SSE41-NEXT:    retq
1976 ; AVX-LABEL: shuffle_v8i16_01u0u110:
1977 ; AVX:       # BB#0:
1978 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,0,1,0,1,2,3,2,3,0,1]
1979 ; AVX-NEXT:    retq
1980   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 undef, i32 0, i32 undef, i32 1, i32 1, i32 0>
1981   ret <8 x i16> %shuffle
1984 define <8 x i16> @shuffle_v8i16_467uu675(<8 x i16> %a) {
1985 ; SSE2-LABEL: shuffle_v8i16_467uu675:
1986 ; SSE2:       # BB#0:
1987 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
1988 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,3,3,4,5,6,7]
1989 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]
1990 ; SSE2-NEXT:    retq
1992 ; SSSE3-LABEL: shuffle_v8i16_467uu675:
1993 ; SSSE3:       # BB#0:
1994 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,12,13,14,15,14,15,8,9,12,13,14,15,10,11]
1995 ; SSSE3-NEXT:    retq
1997 ; SSE41-LABEL: shuffle_v8i16_467uu675:
1998 ; SSE41:       # BB#0:
1999 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,12,13,14,15,14,15,8,9,12,13,14,15,10,11]
2000 ; SSE41-NEXT:    retq
2002 ; AVX-LABEL: shuffle_v8i16_467uu675:
2003 ; AVX:       # BB#0:
2004 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,12,13,14,15,14,15,8,9,12,13,14,15,10,11]
2005 ; AVX-NEXT:    retq
2006   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 4, i32 6, i32 7, i32 undef, i32 undef, i32 6, i32 7, i32 5>
2007   ret <8 x i16> %shuffle
2011 ; Shuffle to logical bit shifts
2013 define <8 x i16> @shuffle_v8i16_z0z2z4z6(<8 x i16> %a) {
2014 ; SSE-LABEL: shuffle_v8i16_z0z2z4z6:
2015 ; SSE:       # BB#0:
2016 ; SSE-NEXT:    pslld $16, %xmm0
2017 ; SSE-NEXT:    retq
2019 ; AVX-LABEL: shuffle_v8i16_z0z2z4z6:
2020 ; AVX:       # BB#0:
2021 ; AVX-NEXT:    vpslld $16, %xmm0, %xmm0
2022 ; AVX-NEXT:    retq
2023   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 0, i32 8, i32 2, i32 8, i32 4, i32 8, i32 6>
2024   ret <8 x i16> %shuffle
2027 define <8 x i16> @shuffle_v8i16_zzz0zzz4(<8 x i16> %a) {
2028 ; SSE-LABEL: shuffle_v8i16_zzz0zzz4:
2029 ; SSE:       # BB#0:
2030 ; SSE-NEXT:    psllq $48, %xmm0
2031 ; SSE-NEXT:    retq
2033 ; AVX-LABEL: shuffle_v8i16_zzz0zzz4:
2034 ; AVX:       # BB#0:
2035 ; AVX-NEXT:    vpsllq $48, %xmm0, %xmm0
2036 ; AVX-NEXT:    retq
2037   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 8, i32 8, i32 0, i32 8, i32 8, i32 8, i32 4>
2038   ret <8 x i16> %shuffle
2041 define <8 x i16> @shuffle_v8i16_zz01zX4X(<8 x i16> %a) {
2042 ; SSE-LABEL: shuffle_v8i16_zz01zX4X:
2043 ; SSE:       # BB#0:
2044 ; SSE-NEXT:    psllq $32, %xmm0
2045 ; SSE-NEXT:    retq
2047 ; AVX-LABEL: shuffle_v8i16_zz01zX4X:
2048 ; AVX:       # BB#0:
2049 ; AVX-NEXT:    vpsllq $32, %xmm0, %xmm0
2050 ; AVX-NEXT:    retq
2051   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 8, i32 0, i32 1, i32 8, i32 undef, i32 4, i32 undef>
2052   ret <8 x i16> %shuffle
2055 define <8 x i16> @shuffle_v8i16_z0X2z456(<8 x i16> %a) {
2056 ; SSE-LABEL: shuffle_v8i16_z0X2z456:
2057 ; SSE:       # BB#0:
2058 ; SSE-NEXT:    psllq $16, %xmm0
2059 ; SSE-NEXT:    retq
2061 ; AVX-LABEL: shuffle_v8i16_z0X2z456:
2062 ; AVX:       # BB#0:
2063 ; AVX-NEXT:    vpsllq $16, %xmm0, %xmm0
2064 ; AVX-NEXT:    retq
2065   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 0, i32 undef, i32 2, i32 8, i32 4, i32 5, i32 6>
2066   ret <8 x i16> %shuffle
2069 define <8 x i16> @shuffle_v8i16_1z3zXz7z(<8 x i16> %a) {
2070 ; SSE-LABEL: shuffle_v8i16_1z3zXz7z:
2071 ; SSE:       # BB#0:
2072 ; SSE-NEXT:    psrld $16, %xmm0
2073 ; SSE-NEXT:    retq
2075 ; AVX-LABEL: shuffle_v8i16_1z3zXz7z:
2076 ; AVX:       # BB#0:
2077 ; AVX-NEXT:    vpsrld $16, %xmm0, %xmm0
2078 ; AVX-NEXT:    retq
2079   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 1, i32 8, i32 3, i32 8, i32 undef, i32 8, i32 7, i32 8>
2080   ret <8 x i16> %shuffle
2083 define <8 x i16> @shuffle_v8i16_1X3z567z(<8 x i16> %a) {
2084 ; SSE-LABEL: shuffle_v8i16_1X3z567z:
2085 ; SSE:       # BB#0:
2086 ; SSE-NEXT:    psrlq $16, %xmm0
2087 ; SSE-NEXT:    retq
2089 ; AVX-LABEL: shuffle_v8i16_1X3z567z:
2090 ; AVX:       # BB#0:
2091 ; AVX-NEXT:    vpsrlq $16, %xmm0, %xmm0
2092 ; AVX-NEXT:    retq
2093   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 1, i32 undef, i32 3, i32 8, i32 5, i32 6, i32 7, i32 8>
2094   ret <8 x i16> %shuffle
2097 define <8 x i16> @shuffle_v8i16_23zz67zz(<8 x i16> %a) {
2098 ; SSE-LABEL: shuffle_v8i16_23zz67zz:
2099 ; SSE:       # BB#0:
2100 ; SSE-NEXT:    psrlq $32, %xmm0
2101 ; SSE-NEXT:    retq
2103 ; AVX-LABEL: shuffle_v8i16_23zz67zz:
2104 ; AVX:       # BB#0:
2105 ; AVX-NEXT:    vpsrlq $32, %xmm0, %xmm0
2106 ; AVX-NEXT:    retq
2107   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 2, i32 3, i32 8, i32 8, i32 6, i32 7, i32 8, i32 8>
2108   ret <8 x i16> %shuffle
2111 define <8 x i16> @shuffle_v8i16_3zXXXzzz(<8 x i16> %a) {
2112 ; SSE-LABEL: shuffle_v8i16_3zXXXzzz:
2113 ; SSE:       # BB#0:
2114 ; SSE-NEXT:    psrlq $48, %xmm0
2115 ; SSE-NEXT:    retq
2117 ; AVX-LABEL: shuffle_v8i16_3zXXXzzz:
2118 ; AVX:       # BB#0:
2119 ; AVX-NEXT:    vpsrlq $48, %xmm0, %xmm0
2120 ; AVX-NEXT:    retq
2121   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 3, i32 8, i32 undef, i32 undef, i32 undef, i32 8, i32 8, i32 8>
2122   ret <8 x i16> %shuffle
2125 define <8 x i16> @shuffle_v8i16_01u3zzuz(<8 x i16> %a) {
2126 ; SSE-LABEL: shuffle_v8i16_01u3zzuz:
2127 ; SSE:       # BB#0:
2128 ; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
2129 ; SSE-NEXT:    retq
2131 ; AVX-LABEL: shuffle_v8i16_01u3zzuz:
2132 ; AVX:       # BB#0:
2133 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
2134 ; AVX-NEXT:    retq
2135   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 undef, i32 3, i32 8, i32 8, i32 undef, i32 8>
2136   ret <8 x i16> %shuffle
2139 define <8 x i16> @shuffle_v8i16_0z234567(<8 x i16> %a) {
2140 ; SSE2-LABEL: shuffle_v8i16_0z234567:
2141 ; SSE2:       # BB#0:
2142 ; SSE2-NEXT:    andps {{.*}}(%rip), %xmm0
2143 ; SSE2-NEXT:    retq
2145 ; SSSE3-LABEL: shuffle_v8i16_0z234567:
2146 ; SSSE3:       # BB#0:
2147 ; SSSE3-NEXT:    andps {{.*}}(%rip), %xmm0
2148 ; SSSE3-NEXT:    retq
2150 ; SSE41-LABEL: shuffle_v8i16_0z234567:
2151 ; SSE41:       # BB#0:
2152 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2153 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]
2154 ; SSE41-NEXT:    retq
2156 ; AVX-LABEL: shuffle_v8i16_0z234567:
2157 ; AVX:       # BB#0:
2158 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2159 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]
2160 ; AVX-NEXT:    retq
2161   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2162   ret <8 x i16> %shuffle
2165 define <8 x i16> @shuffle_v8i16_0zzzz5z7(<8 x i16> %a) {
2166 ; SSE2-LABEL: shuffle_v8i16_0zzzz5z7:
2167 ; SSE2:       # BB#0:
2168 ; SSE2-NEXT:    andps {{.*}}(%rip), %xmm0
2169 ; SSE2-NEXT:    retq
2171 ; SSSE3-LABEL: shuffle_v8i16_0zzzz5z7:
2172 ; SSSE3:       # BB#0:
2173 ; SSSE3-NEXT:    andps {{.*}}(%rip), %xmm0
2174 ; SSSE3-NEXT:    retq
2176 ; SSE41-LABEL: shuffle_v8i16_0zzzz5z7:
2177 ; SSE41:       # BB#0:
2178 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2179 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]
2180 ; SSE41-NEXT:    retq
2182 ; AVX-LABEL: shuffle_v8i16_0zzzz5z7:
2183 ; AVX:       # BB#0:
2184 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2185 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]
2186 ; AVX-NEXT:    retq
2187   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 5, i32 8, i32 7>
2188   ret <8 x i16> %shuffle
2191 define <8 x i16> @shuffle_v8i16_0123456z(<8 x i16> %a) {
2192 ; SSE2-LABEL: shuffle_v8i16_0123456z:
2193 ; SSE2:       # BB#0:
2194 ; SSE2-NEXT:    andps {{.*}}(%rip), %xmm0
2195 ; SSE2-NEXT:    retq
2197 ; SSSE3-LABEL: shuffle_v8i16_0123456z:
2198 ; SSSE3:       # BB#0:
2199 ; SSSE3-NEXT:    andps {{.*}}(%rip), %xmm0
2200 ; SSSE3-NEXT:    retq
2202 ; SSE41-LABEL: shuffle_v8i16_0123456z:
2203 ; SSE41:       # BB#0:
2204 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2205 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]
2206 ; SSE41-NEXT:    retq
2208 ; AVX-LABEL: shuffle_v8i16_0123456z:
2209 ; AVX:       # BB#0:
2210 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2211 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]
2212 ; AVX-NEXT:    retq
2213   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 15>
2214   ret <8 x i16> %shuffle
2217 define <8 x i16> @shuffle_v8i16_fu3ucc5u(<8 x i16> %a, <8 x i16> %b) {
2218 ; SSE-LABEL: shuffle_v8i16_fu3ucc5u:
2219 ; SSE:       # BB#0:
2220 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2221 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2222 ; SSE-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2223 ; SSE-NEXT:    movdqa %xmm1, %xmm0
2224 ; SSE-NEXT:    retq
2226 ; AVX-LABEL: shuffle_v8i16_fu3ucc5u:
2227 ; AVX:       # BB#0:
2228 ; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2229 ; AVX-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2230 ; AVX-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2231 ; AVX-NEXT:    retq
2232   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 15, i32 undef, i32 3, i32 undef, i32 12, i32 12, i32 5, i32 undef>
2233   ret <8 x i16> %shuffle
2236 define <8 x i16> @shuffle_v8i16_8012345u(<8 x i16> %a) {
2237 ; SSE-LABEL: shuffle_v8i16_8012345u:
2238 ; SSE:       # BB#0:
2239 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2240 ; SSE-NEXT:    retq
2242 ; AVX-LABEL: shuffle_v8i16_8012345u:
2243 ; AVX:       # BB#0:
2244 ; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2245 ; AVX-NEXT:    retq
2246   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 undef>
2248   ret <8 x i16> %shuffle
2251 define <8 x i16> @mask_v8i16_012345ef(<8 x i16> %a, <8 x i16> %b) {
2252 ; SSE2-LABEL: mask_v8i16_012345ef:
2253 ; SSE2:       # BB#0:
2254 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
2255 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
2256 ; SSE2-NEXT:    movaps %xmm1, %xmm0
2257 ; SSE2-NEXT:    retq
2259 ; SSSE3-LABEL: mask_v8i16_012345ef:
2260 ; SSSE3:       # BB#0:
2261 ; SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
2262 ; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
2263 ; SSSE3-NEXT:    movaps %xmm1, %xmm0
2264 ; SSSE3-NEXT:    retq
2266 ; SSE41-LABEL: mask_v8i16_012345ef:
2267 ; SSE41:       # BB#0:
2268 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5],xmm0[6,7]
2269 ; SSE41-NEXT:    retq
2271 ; AVX1-LABEL: mask_v8i16_012345ef:
2272 ; AVX1:       # BB#0:
2273 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5],xmm0[6,7]
2274 ; AVX1-NEXT:    retq
2276 ; AVX2OR512VL-LABEL: mask_v8i16_012345ef:
2277 ; AVX2OR512VL:       # BB#0:
2278 ; AVX2OR512VL-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]
2279 ; AVX2OR512VL-NEXT:    retq
2280   %1 = bitcast <8 x i16> %a to <2 x i64>
2281   %2 = bitcast <8 x i16> %b to <2 x i64>
2282   %3 = and <2 x i64> %1, <i64 0, i64 -4294967296>
2283   %4 = and <2 x i64> %2, <i64 -1, i64 4294967295>
2284   %5 = or <2 x i64> %4, %3
2285   %6 = bitcast <2 x i64> %5 to <8 x i16>
2286   ret <8 x i16> %6
2289 define <8 x i16> @insert_dup_mem_v8i16_i32(i32* %ptr) {
2290 ; SSE-LABEL: insert_dup_mem_v8i16_i32:
2291 ; SSE:       # BB#0:
2292 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2293 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
2294 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2295 ; SSE-NEXT:    retq
2297 ; AVX1-LABEL: insert_dup_mem_v8i16_i32:
2298 ; AVX1:       # BB#0:
2299 ; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2300 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
2301 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2302 ; AVX1-NEXT:    retq
2304 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_i32:
2305 ; AVX2OR512VL:       # BB#0:
2306 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
2307 ; AVX2OR512VL-NEXT:    retq
2308   %tmp = load i32, i32* %ptr, align 4
2309   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0
2310   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
2311   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> zeroinitializer
2312   ret <8 x i16> %tmp3
2315 define <8 x i16> @insert_dup_mem_v8i16_sext_i16(i16* %ptr) {
2316 ; SSE2-LABEL: insert_dup_mem_v8i16_sext_i16:
2317 ; SSE2:       # BB#0:
2318 ; SSE2-NEXT:    movswl (%rdi), %eax
2319 ; SSE2-NEXT:    movd %eax, %xmm0
2320 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
2321 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2322 ; SSE2-NEXT:    retq
2324 ; SSSE3-LABEL: insert_dup_mem_v8i16_sext_i16:
2325 ; SSSE3:       # BB#0:
2326 ; SSSE3-NEXT:    movswl (%rdi), %eax
2327 ; SSSE3-NEXT:    movd %eax, %xmm0
2328 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
2329 ; SSSE3-NEXT:    retq
2331 ; SSE41-LABEL: insert_dup_mem_v8i16_sext_i16:
2332 ; SSE41:       # BB#0:
2333 ; SSE41-NEXT:    movswl (%rdi), %eax
2334 ; SSE41-NEXT:    movd %eax, %xmm0
2335 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
2336 ; SSE41-NEXT:    retq
2338 ; AVX1-LABEL: insert_dup_mem_v8i16_sext_i16:
2339 ; AVX1:       # BB#0:
2340 ; AVX1-NEXT:    movswl (%rdi), %eax
2341 ; AVX1-NEXT:    vmovd %eax, %xmm0
2342 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
2343 ; AVX1-NEXT:    retq
2345 ; AVX2-LABEL: insert_dup_mem_v8i16_sext_i16:
2346 ; AVX2:       # BB#0:
2347 ; AVX2-NEXT:    movswl (%rdi), %eax
2348 ; AVX2-NEXT:    vmovd %eax, %xmm0
2349 ; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
2350 ; AVX2-NEXT:    retq
2352 ; AVX512VL-LABEL: insert_dup_mem_v8i16_sext_i16:
2353 ; AVX512VL:       # BB#0:
2354 ; AVX512VL-NEXT:    movswl (%rdi), %eax
2355 ; AVX512VL-NEXT:    vpbroadcastw %eax, %xmm0
2356 ; AVX512VL-NEXT:    retq
2357   %tmp = load i16, i16* %ptr, align 2
2358   %tmp1 = sext i16 %tmp to i32
2359   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 0
2360   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
2361   %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> undef, <8 x i32> zeroinitializer
2362   ret <8 x i16> %tmp4
2365 define <8 x i16> @insert_dup_elt1_mem_v8i16_i32(i32* %ptr) {
2366 ; SSE-LABEL: insert_dup_elt1_mem_v8i16_i32:
2367 ; SSE:       # BB#0:
2368 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2369 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
2370 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2371 ; SSE-NEXT:    retq
2373 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_i32:
2374 ; AVX1:       # BB#0:
2375 ; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2376 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
2377 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2378 ; AVX1-NEXT:    retq
2380 ; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v8i16_i32:
2381 ; AVX2OR512VL:       # BB#0:
2382 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
2383 ; AVX2OR512VL-NEXT:    retq
2384   %tmp = load i32, i32* %ptr, align 4
2385   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0
2386   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
2387   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
2388   ret <8 x i16> %tmp3
2391 define <8 x i16> @insert_dup_elt3_mem_v8i16_i32(i32* %ptr) {
2392 ; SSE2-LABEL: insert_dup_elt3_mem_v8i16_i32:
2393 ; SSE2:       # BB#0:
2394 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2395 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,1,1]
2396 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
2397 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2398 ; SSE2-NEXT:    retq
2400 ; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_i32:
2401 ; SSSE3:       # BB#0:
2402 ; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2403 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2404 ; SSSE3-NEXT:    retq
2406 ; SSE41-LABEL: insert_dup_elt3_mem_v8i16_i32:
2407 ; SSE41:       # BB#0:
2408 ; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2409 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2410 ; SSE41-NEXT:    retq
2412 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_i32:
2413 ; AVX1:       # BB#0:
2414 ; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2415 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2416 ; AVX1-NEXT:    retq
2418 ; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v8i16_i32:
2419 ; AVX2OR512VL:       # BB#0:
2420 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
2421 ; AVX2OR512VL-NEXT:    retq
2422   %tmp = load i32, i32* %ptr, align 4
2423   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 1
2424   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
2425   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
2426   ret <8 x i16> %tmp3
2429 define <8 x i16> @insert_dup_elt1_mem_v8i16_sext_i16(i16* %ptr) {
2430 ; SSE2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
2431 ; SSE2:       # BB#0:
2432 ; SSE2-NEXT:    movswl (%rdi), %eax
2433 ; SSE2-NEXT:    movd %eax, %xmm0
2434 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
2435 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2436 ; SSE2-NEXT:    retq
2438 ; SSSE3-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
2439 ; SSSE3:       # BB#0:
2440 ; SSSE3-NEXT:    movswl (%rdi), %eax
2441 ; SSSE3-NEXT:    movd %eax, %xmm0
2442 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2443 ; SSSE3-NEXT:    retq
2445 ; SSE41-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
2446 ; SSE41:       # BB#0:
2447 ; SSE41-NEXT:    movswl (%rdi), %eax
2448 ; SSE41-NEXT:    movd %eax, %xmm0
2449 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2450 ; SSE41-NEXT:    retq
2452 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
2453 ; AVX1:       # BB#0:
2454 ; AVX1-NEXT:    movswl (%rdi), %eax
2455 ; AVX1-NEXT:    vmovd %eax, %xmm0
2456 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2457 ; AVX1-NEXT:    retq
2459 ; AVX2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
2460 ; AVX2:       # BB#0:
2461 ; AVX2-NEXT:    movswl (%rdi), %eax
2462 ; AVX2-NEXT:    shrl $16, %eax
2463 ; AVX2-NEXT:    vmovd %eax, %xmm0
2464 ; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
2465 ; AVX2-NEXT:    retq
2467 ; AVX512VL-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
2468 ; AVX512VL:       # BB#0:
2469 ; AVX512VL-NEXT:    movswl (%rdi), %eax
2470 ; AVX512VL-NEXT:    shrl $16, %eax
2471 ; AVX512VL-NEXT:    vpbroadcastw %eax, %xmm0
2472 ; AVX512VL-NEXT:    retq
2473   %tmp = load i16, i16* %ptr, align 2
2474   %tmp1 = sext i16 %tmp to i32
2475   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 0
2476   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
2477   %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> undef, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
2478   ret <8 x i16> %tmp4
2481 define <8 x i16> @insert_dup_elt3_mem_v8i16_sext_i16(i16* %ptr) {
2482 ; SSE2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
2483 ; SSE2:       # BB#0:
2484 ; SSE2-NEXT:    movswl (%rdi), %eax
2485 ; SSE2-NEXT:    movd %eax, %xmm0
2486 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,1,1]
2487 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
2488 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
2489 ; SSE2-NEXT:    retq
2491 ; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
2492 ; SSSE3:       # BB#0:
2493 ; SSSE3-NEXT:    movswl (%rdi), %eax
2494 ; SSSE3-NEXT:    movd %eax, %xmm0
2495 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2496 ; SSSE3-NEXT:    retq
2498 ; SSE41-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
2499 ; SSE41:       # BB#0:
2500 ; SSE41-NEXT:    movswl (%rdi), %eax
2501 ; SSE41-NEXT:    movd %eax, %xmm0
2502 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2503 ; SSE41-NEXT:    retq
2505 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
2506 ; AVX1:       # BB#0:
2507 ; AVX1-NEXT:    movswl (%rdi), %eax
2508 ; AVX1-NEXT:    vmovd %eax, %xmm0
2509 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
2510 ; AVX1-NEXT:    retq
2512 ; AVX2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
2513 ; AVX2:       # BB#0:
2514 ; AVX2-NEXT:    movswl (%rdi), %eax
2515 ; AVX2-NEXT:    shrl $16, %eax
2516 ; AVX2-NEXT:    vmovd %eax, %xmm0
2517 ; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
2518 ; AVX2-NEXT:    retq
2520 ; AVX512VL-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
2521 ; AVX512VL:       # BB#0:
2522 ; AVX512VL-NEXT:    movswl (%rdi), %eax
2523 ; AVX512VL-NEXT:    shrl $16, %eax
2524 ; AVX512VL-NEXT:    vpbroadcastw %eax, %xmm0
2525 ; AVX512VL-NEXT:    retq
2526   %tmp = load i16, i16* %ptr, align 2
2527   %tmp1 = sext i16 %tmp to i32
2528   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 1
2529   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
2530   %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
2531   ret <8 x i16> %tmp4