[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-shuffle-128-v8.ll
blob2159fa4f918516de00c6774be9956f88466377cd
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-prefixes=SSE,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE,SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX2,AVX2-SLOW
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX2,AVX2-FAST
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX2,AVX2-FAST
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX512VL,AVX512VL-SLOW
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX512VL,AVX512VL-FAST
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2OR512VL,AVX512VL,AVX512VL-FAST
12 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=AVX,XOP,XOPAVX1
13 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=AVX,XOP,XOPAVX2
15 define <8 x i16> @shuffle_v8i16_01012323(<8 x i16> %a, <8 x i16> %b) {
16 ; SSE-LABEL: shuffle_v8i16_01012323:
17 ; SSE:       # %bb.0:
18 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
19 ; SSE-NEXT:    retq
21 ; AVX-LABEL: shuffle_v8i16_01012323:
22 ; AVX:       # %bb.0:
23 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1]
24 ; AVX-NEXT:    retq
25   %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>
26   ret <8 x i16> %shuffle
28 define <8 x i16> @shuffle_v8i16_67452301(<8 x i16> %a, <8 x i16> %b) {
29 ; SSE-LABEL: shuffle_v8i16_67452301:
30 ; SSE:       # %bb.0:
31 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0]
32 ; SSE-NEXT:    retq
34 ; AVX-LABEL: shuffle_v8i16_67452301:
35 ; AVX:       # %bb.0:
36 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0]
37 ; AVX-NEXT:    retq
38   %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>
39   ret <8 x i16> %shuffle
41 define <8 x i16> @shuffle_v8i16_456789AB(<8 x i16> %a, <8 x i16> %b) {
42 ; SSE2-LABEL: shuffle_v8i16_456789AB:
43 ; SSE2:       # %bb.0:
44 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,3],xmm1[0,1]
45 ; SSE2-NEXT:    retq
47 ; SSSE3-LABEL: shuffle_v8i16_456789AB:
48 ; SSSE3:       # %bb.0:
49 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
50 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
51 ; SSSE3-NEXT:    retq
53 ; SSE41-LABEL: shuffle_v8i16_456789AB:
54 ; SSE41:       # %bb.0:
55 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
56 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
57 ; SSE41-NEXT:    retq
59 ; AVX-LABEL: shuffle_v8i16_456789AB:
60 ; AVX:       # %bb.0:
61 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
62 ; AVX-NEXT:    retq
63   %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>
64   ret <8 x i16> %shuffle
67 define <8 x i16> @shuffle_v8i16_00000000(<8 x i16> %a, <8 x i16> %b) {
68 ; SSE-LABEL: shuffle_v8i16_00000000:
69 ; SSE:       # %bb.0:
70 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
71 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
72 ; SSE-NEXT:    retq
74 ; AVX1-LABEL: shuffle_v8i16_00000000:
75 ; AVX1:       # %bb.0:
76 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
77 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
78 ; AVX1-NEXT:    retq
80 ; AVX2OR512VL-LABEL: shuffle_v8i16_00000000:
81 ; AVX2OR512VL:       # %bb.0:
82 ; AVX2OR512VL-NEXT:    vpbroadcastw %xmm0, %xmm0
83 ; AVX2OR512VL-NEXT:    retq
85 ; XOPAVX1-LABEL: shuffle_v8i16_00000000:
86 ; XOPAVX1:       # %bb.0:
87 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
88 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
89 ; XOPAVX1-NEXT:    retq
91 ; XOPAVX2-LABEL: shuffle_v8i16_00000000:
92 ; XOPAVX2:       # %bb.0:
93 ; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
94 ; XOPAVX2-NEXT:    retq
95   %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>
96   ret <8 x i16> %shuffle
98 define <8 x i16> @shuffle_v8i16_00004444(<8 x i16> %a, <8 x i16> %b) {
99 ; SSE-LABEL: shuffle_v8i16_00004444:
100 ; SSE:       # %bb.0:
101 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
102 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
103 ; SSE-NEXT:    retq
105 ; AVX1-LABEL: shuffle_v8i16_00004444:
106 ; AVX1:       # %bb.0:
107 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
108 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
109 ; AVX1-NEXT:    retq
111 ; AVX2-SLOW-LABEL: shuffle_v8i16_00004444:
112 ; AVX2-SLOW:       # %bb.0:
113 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
114 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
115 ; AVX2-SLOW-NEXT:    retq
117 ; AVX2-FAST-LABEL: shuffle_v8i16_00004444:
118 ; AVX2-FAST:       # %bb.0:
119 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9]
120 ; AVX2-FAST-NEXT:    retq
122 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_00004444:
123 ; AVX512VL-SLOW:       # %bb.0:
124 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
125 ; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
126 ; AVX512VL-SLOW-NEXT:    retq
128 ; AVX512VL-FAST-LABEL: shuffle_v8i16_00004444:
129 ; AVX512VL-FAST:       # %bb.0:
130 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9]
131 ; AVX512VL-FAST-NEXT:    retq
133 ; XOP-LABEL: shuffle_v8i16_00004444:
134 ; XOP:       # %bb.0:
135 ; XOP-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
136 ; XOP-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
137 ; XOP-NEXT:    retq
138   %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>
139   ret <8 x i16> %shuffle
141 define <8 x i16> @shuffle_v8i16_u0u1u2u3(<8 x i16> %a, <8 x i16> %b) {
142 ; SSE-LABEL: shuffle_v8i16_u0u1u2u3:
143 ; SSE:       # %bb.0:
144 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
145 ; SSE-NEXT:    retq
147 ; AVX-LABEL: shuffle_v8i16_u0u1u2u3:
148 ; AVX:       # %bb.0:
149 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
150 ; AVX-NEXT:    retq
151   %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>
152   ret <8 x i16> %shuffle
154 define <8 x i16> @shuffle_v8i16_u4u5u6u7(<8 x i16> %a, <8 x i16> %b) {
155 ; SSE-LABEL: shuffle_v8i16_u4u5u6u7:
156 ; SSE:       # %bb.0:
157 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
158 ; SSE-NEXT:    retq
160 ; AVX-LABEL: shuffle_v8i16_u4u5u6u7:
161 ; AVX:       # %bb.0:
162 ; AVX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
163 ; AVX-NEXT:    retq
164   %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>
165   ret <8 x i16> %shuffle
167 define <8 x i16> @shuffle_v8i16_31206745(<8 x i16> %a, <8 x i16> %b) {
168 ; SSE-LABEL: shuffle_v8i16_31206745:
169 ; SSE:       # %bb.0:
170 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
171 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
172 ; SSE-NEXT:    retq
174 ; AVX1-LABEL: shuffle_v8i16_31206745:
175 ; AVX1:       # %bb.0:
176 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
177 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
178 ; AVX1-NEXT:    retq
180 ; AVX2-SLOW-LABEL: shuffle_v8i16_31206745:
181 ; AVX2-SLOW:       # %bb.0:
182 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
183 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
184 ; AVX2-SLOW-NEXT:    retq
186 ; AVX2-FAST-LABEL: shuffle_v8i16_31206745:
187 ; AVX2-FAST:       # %bb.0:
188 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,2,3,4,5,0,1,12,13,14,15,8,9,10,11]
189 ; AVX2-FAST-NEXT:    retq
191 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_31206745:
192 ; AVX512VL-SLOW:       # %bb.0:
193 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
194 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
195 ; AVX512VL-SLOW-NEXT:    retq
197 ; AVX512VL-FAST-LABEL: shuffle_v8i16_31206745:
198 ; AVX512VL-FAST:       # %bb.0:
199 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,2,3,4,5,0,1,12,13,14,15,8,9,10,11]
200 ; AVX512VL-FAST-NEXT:    retq
202 ; XOP-LABEL: shuffle_v8i16_31206745:
203 ; XOP:       # %bb.0:
204 ; XOP-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
205 ; XOP-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
206 ; XOP-NEXT:    retq
207   %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>
208   ret <8 x i16> %shuffle
210 define <8 x i16> @shuffle_v8i16_44440000(<8 x i16> %a, <8 x i16> %b) {
211 ; SSE2-LABEL: shuffle_v8i16_44440000:
212 ; SSE2:       # %bb.0:
213 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,0,3]
214 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
215 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
216 ; SSE2-NEXT:    retq
218 ; SSSE3-LABEL: shuffle_v8i16_44440000:
219 ; SSSE3:       # %bb.0:
220 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
221 ; SSSE3-NEXT:    retq
223 ; SSE41-LABEL: shuffle_v8i16_44440000:
224 ; SSE41:       # %bb.0:
225 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
226 ; SSE41-NEXT:    retq
228 ; AVX-LABEL: shuffle_v8i16_44440000:
229 ; AVX:       # %bb.0:
230 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
231 ; AVX-NEXT:    retq
232   %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>
233   ret <8 x i16> %shuffle
235 define <8 x i16> @shuffle_v8i16_23016745(<8 x i16> %a, <8 x i16> %b) {
236 ; SSE-LABEL: shuffle_v8i16_23016745:
237 ; SSE:       # %bb.0:
238 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]
239 ; SSE-NEXT:    retq
241 ; AVX-LABEL: shuffle_v8i16_23016745:
242 ; AVX:       # %bb.0:
243 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[1,0,3,2]
244 ; AVX-NEXT:    retq
245   %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>
246   ret <8 x i16> %shuffle
248 define <8 x i16> @shuffle_v8i16_23026745(<8 x i16> %a, <8 x i16> %b) {
249 ; SSE-LABEL: shuffle_v8i16_23026745:
250 ; SSE:       # %bb.0:
251 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]
252 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
253 ; SSE-NEXT:    retq
255 ; AVX1-LABEL: shuffle_v8i16_23026745:
256 ; AVX1:       # %bb.0:
257 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]
258 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
259 ; AVX1-NEXT:    retq
261 ; AVX2-SLOW-LABEL: shuffle_v8i16_23026745:
262 ; AVX2-SLOW:       # %bb.0:
263 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]
264 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
265 ; AVX2-SLOW-NEXT:    retq
267 ; AVX2-FAST-LABEL: shuffle_v8i16_23026745:
268 ; AVX2-FAST:       # %bb.0:
269 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,4,5,12,13,14,15,8,9,10,11]
270 ; AVX2-FAST-NEXT:    retq
272 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_23026745:
273 ; AVX512VL-SLOW:       # %bb.0:
274 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]
275 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
276 ; AVX512VL-SLOW-NEXT:    retq
278 ; AVX512VL-FAST-LABEL: shuffle_v8i16_23026745:
279 ; AVX512VL-FAST:       # %bb.0:
280 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,4,5,12,13,14,15,8,9,10,11]
281 ; AVX512VL-FAST-NEXT:    retq
283 ; XOP-LABEL: shuffle_v8i16_23026745:
284 ; XOP:       # %bb.0:
285 ; XOP-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]
286 ; XOP-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,3,2]
287 ; XOP-NEXT:    retq
288   %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>
289   ret <8 x i16> %shuffle
291 define <8 x i16> @shuffle_v8i16_23016747(<8 x i16> %a, <8 x i16> %b) {
292 ; SSE-LABEL: shuffle_v8i16_23016747:
293 ; SSE:       # %bb.0:
294 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
295 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
296 ; SSE-NEXT:    retq
298 ; AVX1-LABEL: shuffle_v8i16_23016747:
299 ; AVX1:       # %bb.0:
300 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
301 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
302 ; AVX1-NEXT:    retq
304 ; AVX2-SLOW-LABEL: shuffle_v8i16_23016747:
305 ; AVX2-SLOW:       # %bb.0:
306 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
307 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
308 ; AVX2-SLOW-NEXT:    retq
310 ; AVX2-FAST-LABEL: shuffle_v8i16_23016747:
311 ; AVX2-FAST:       # %bb.0:
312 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3,12,13,14,15,8,9,14,15]
313 ; AVX2-FAST-NEXT:    retq
315 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_23016747:
316 ; AVX512VL-SLOW:       # %bb.0:
317 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
318 ; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
319 ; AVX512VL-SLOW-NEXT:    retq
321 ; AVX512VL-FAST-LABEL: shuffle_v8i16_23016747:
322 ; AVX512VL-FAST:       # %bb.0:
323 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3,12,13,14,15,8,9,14,15]
324 ; AVX512VL-FAST-NEXT:    retq
326 ; XOP-LABEL: shuffle_v8i16_23016747:
327 ; XOP:       # %bb.0:
328 ; XOP-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,2,3]
329 ; XOP-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,4,7]
330 ; XOP-NEXT:    retq
331   %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>
332   ret <8 x i16> %shuffle
334 define <8 x i16> @shuffle_v8i16_75643120(<8 x i16> %a, <8 x i16> %b) {
335 ; SSE2-LABEL: shuffle_v8i16_75643120:
336 ; SSE2:       # %bb.0:
337 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
338 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
339 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
340 ; SSE2-NEXT:    retq
342 ; SSSE3-LABEL: shuffle_v8i16_75643120:
343 ; SSSE3:       # %bb.0:
344 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
345 ; SSSE3-NEXT:    retq
347 ; SSE41-LABEL: shuffle_v8i16_75643120:
348 ; SSE41:       # %bb.0:
349 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
350 ; SSE41-NEXT:    retq
352 ; AVX-LABEL: shuffle_v8i16_75643120:
353 ; AVX:       # %bb.0:
354 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
355 ; AVX-NEXT:    retq
356   %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>
357   ret <8 x i16> %shuffle
360 define <8 x i16> @shuffle_v8i16_10545410(<8 x i16> %a, <8 x i16> %b) {
361 ; SSE2-LABEL: shuffle_v8i16_10545410:
362 ; SSE2:       # %bb.0:
363 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
364 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
365 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
366 ; SSE2-NEXT:    retq
368 ; SSSE3-LABEL: shuffle_v8i16_10545410:
369 ; SSSE3:       # %bb.0:
370 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
371 ; SSSE3-NEXT:    retq
373 ; SSE41-LABEL: shuffle_v8i16_10545410:
374 ; SSE41:       # %bb.0:
375 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
376 ; SSE41-NEXT:    retq
378 ; AVX-LABEL: shuffle_v8i16_10545410:
379 ; AVX:       # %bb.0:
380 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
381 ; AVX-NEXT:    retq
382   %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>
383   ret <8 x i16> %shuffle
385 define <8 x i16> @shuffle_v8i16_54105410(<8 x i16> %a, <8 x i16> %b) {
386 ; SSE2-LABEL: shuffle_v8i16_54105410:
387 ; SSE2:       # %bb.0:
388 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
389 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
390 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
391 ; SSE2-NEXT:    retq
393 ; SSSE3-LABEL: shuffle_v8i16_54105410:
394 ; SSSE3:       # %bb.0:
395 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
396 ; SSSE3-NEXT:    retq
398 ; SSE41-LABEL: shuffle_v8i16_54105410:
399 ; SSE41:       # %bb.0:
400 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
401 ; SSE41-NEXT:    retq
403 ; AVX-LABEL: shuffle_v8i16_54105410:
404 ; AVX:       # %bb.0:
405 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
406 ; AVX-NEXT:    retq
407   %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>
408   ret <8 x i16> %shuffle
410 define <8 x i16> @shuffle_v8i16_54101054(<8 x i16> %a, <8 x i16> %b) {
411 ; SSE2-LABEL: shuffle_v8i16_54101054:
412 ; SSE2:       # %bb.0:
413 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
414 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
415 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
416 ; SSE2-NEXT:    retq
418 ; SSSE3-LABEL: shuffle_v8i16_54101054:
419 ; SSSE3:       # %bb.0:
420 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
421 ; SSSE3-NEXT:    retq
423 ; SSE41-LABEL: shuffle_v8i16_54101054:
424 ; SSE41:       # %bb.0:
425 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
426 ; SSE41-NEXT:    retq
428 ; AVX-LABEL: shuffle_v8i16_54101054:
429 ; AVX:       # %bb.0:
430 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
431 ; AVX-NEXT:    retq
432   %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>
433   ret <8 x i16> %shuffle
435 define <8 x i16> @shuffle_v8i16_04400440(<8 x i16> %a, <8 x i16> %b) {
436 ; SSE2-LABEL: shuffle_v8i16_04400440:
437 ; SSE2:       # %bb.0:
438 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
439 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
440 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,4,6]
441 ; SSE2-NEXT:    retq
443 ; SSSE3-LABEL: shuffle_v8i16_04400440:
444 ; SSSE3:       # %bb.0:
445 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
446 ; SSSE3-NEXT:    retq
448 ; SSE41-LABEL: shuffle_v8i16_04400440:
449 ; SSE41:       # %bb.0:
450 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
451 ; SSE41-NEXT:    retq
453 ; AVX-LABEL: shuffle_v8i16_04400440:
454 ; AVX:       # %bb.0:
455 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
456 ; AVX-NEXT:    retq
457   %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>
458   ret <8 x i16> %shuffle
460 define <8 x i16> @shuffle_v8i16_40044004(<8 x i16> %a, <8 x i16> %b) {
461 ; SSE2-LABEL: shuffle_v8i16_40044004:
462 ; SSE2:       # %bb.0:
463 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
464 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,0,0,2,4,5,6,7]
465 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,4]
466 ; SSE2-NEXT:    retq
468 ; SSSE3-LABEL: shuffle_v8i16_40044004:
469 ; SSSE3:       # %bb.0:
470 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
471 ; SSSE3-NEXT:    retq
473 ; SSE41-LABEL: shuffle_v8i16_40044004:
474 ; SSE41:       # %bb.0:
475 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
476 ; SSE41-NEXT:    retq
478 ; AVX-LABEL: shuffle_v8i16_40044004:
479 ; AVX:       # %bb.0:
480 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
481 ; AVX-NEXT:    retq
482   %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>
483   ret <8 x i16> %shuffle
486 define <8 x i16> @shuffle_v8i16_26405173(<8 x i16> %a, <8 x i16> %b) {
487 ; SSE2-LABEL: shuffle_v8i16_26405173:
488 ; SSE2:       # %bb.0:
489 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
490 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
491 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
492 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]
493 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,4,7]
494 ; SSE2-NEXT:    retq
496 ; SSSE3-LABEL: shuffle_v8i16_26405173:
497 ; SSSE3:       # %bb.0:
498 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
499 ; SSSE3-NEXT:    retq
501 ; SSE41-LABEL: shuffle_v8i16_26405173:
502 ; SSE41:       # %bb.0:
503 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
504 ; SSE41-NEXT:    retq
506 ; AVX-LABEL: shuffle_v8i16_26405173:
507 ; AVX:       # %bb.0:
508 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
509 ; AVX-NEXT:    retq
510   %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>
511   ret <8 x i16> %shuffle
513 define <8 x i16> @shuffle_v8i16_20645173(<8 x i16> %a, <8 x i16> %b) {
514 ; SSE2-LABEL: shuffle_v8i16_20645173:
515 ; SSE2:       # %bb.0:
516 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
517 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
518 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
519 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,2,3,4,5,6,7]
520 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,4,7]
521 ; SSE2-NEXT:    retq
523 ; SSSE3-LABEL: shuffle_v8i16_20645173:
524 ; SSSE3:       # %bb.0:
525 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
526 ; SSSE3-NEXT:    retq
528 ; SSE41-LABEL: shuffle_v8i16_20645173:
529 ; SSE41:       # %bb.0:
530 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
531 ; SSE41-NEXT:    retq
533 ; AVX-LABEL: shuffle_v8i16_20645173:
534 ; AVX:       # %bb.0:
535 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
536 ; AVX-NEXT:    retq
537   %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>
538   ret <8 x i16> %shuffle
540 define <8 x i16> @shuffle_v8i16_26401375(<8 x i16> %a, <8 x i16> %b) {
541 ; SSE2-LABEL: shuffle_v8i16_26401375:
542 ; SSE2:       # %bb.0:
543 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
544 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
545 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
546 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]
547 ; SSE2-NEXT:    retq
549 ; SSSE3-LABEL: shuffle_v8i16_26401375:
550 ; SSSE3:       # %bb.0:
551 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
552 ; SSSE3-NEXT:    retq
554 ; SSE41-LABEL: shuffle_v8i16_26401375:
555 ; SSE41:       # %bb.0:
556 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
557 ; SSE41-NEXT:    retq
559 ; AVX-LABEL: shuffle_v8i16_26401375:
560 ; AVX:       # %bb.0:
561 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
562 ; AVX-NEXT:    retq
563   %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>
564   ret <8 x i16> %shuffle
567 define <8 x i16> @shuffle_v8i16_66751643(<8 x i16> %a, <8 x i16> %b) {
568 ; SSE2-LABEL: shuffle_v8i16_66751643:
569 ; SSE2:       # %bb.0:
570 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]
571 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
572 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,0]
573 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,3,2,4,5,6,7]
574 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,4,6]
575 ; SSE2-NEXT:    retq
577 ; SSSE3-LABEL: shuffle_v8i16_66751643:
578 ; SSSE3:       # %bb.0:
579 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
580 ; SSSE3-NEXT:    retq
582 ; SSE41-LABEL: shuffle_v8i16_66751643:
583 ; SSE41:       # %bb.0:
584 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
585 ; SSE41-NEXT:    retq
587 ; AVX-LABEL: shuffle_v8i16_66751643:
588 ; AVX:       # %bb.0:
589 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
590 ; AVX-NEXT:    retq
591   %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>
592   ret <8 x i16> %shuffle
595 define <8 x i16> @shuffle_v8i16_60514754(<8 x i16> %a, <8 x i16> %b) {
596 ; SSE2-LABEL: shuffle_v8i16_60514754:
597 ; SSE2:       # %bb.0:
598 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]
599 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
600 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
601 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,7,5,6]
602 ; SSE2-NEXT:    retq
604 ; SSSE3-LABEL: shuffle_v8i16_60514754:
605 ; SSSE3:       # %bb.0:
606 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
607 ; SSSE3-NEXT:    retq
609 ; SSE41-LABEL: shuffle_v8i16_60514754:
610 ; SSE41:       # %bb.0:
611 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
612 ; SSE41-NEXT:    retq
614 ; AVX-LABEL: shuffle_v8i16_60514754:
615 ; AVX:       # %bb.0:
616 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
617 ; AVX-NEXT:    retq
618   %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>
619   ret <8 x i16> %shuffle
622 define <8 x i16> @shuffle_v8i16_00444444(<8 x i16> %a, <8 x i16> %b) {
623 ; SSE2-LABEL: shuffle_v8i16_00444444:
624 ; SSE2:       # %bb.0:
625 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
626 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]
627 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
628 ; SSE2-NEXT:    retq
630 ; SSSE3-LABEL: shuffle_v8i16_00444444:
631 ; SSSE3:       # %bb.0:
632 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
633 ; SSSE3-NEXT:    retq
635 ; SSE41-LABEL: shuffle_v8i16_00444444:
636 ; SSE41:       # %bb.0:
637 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
638 ; SSE41-NEXT:    retq
640 ; AVX-LABEL: shuffle_v8i16_00444444:
641 ; AVX:       # %bb.0:
642 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
643 ; AVX-NEXT:    retq
644   %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>
645   ret <8 x i16> %shuffle
647 define <8 x i16> @shuffle_v8i16_44004444(<8 x i16> %a, <8 x i16> %b) {
648 ; SSE2-LABEL: shuffle_v8i16_44004444:
649 ; SSE2:       # %bb.0:
650 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
651 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,2,0,0,4,5,6,7]
652 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
653 ; SSE2-NEXT:    retq
655 ; SSSE3-LABEL: shuffle_v8i16_44004444:
656 ; SSSE3:       # %bb.0:
657 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
658 ; SSSE3-NEXT:    retq
660 ; SSE41-LABEL: shuffle_v8i16_44004444:
661 ; SSE41:       # %bb.0:
662 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
663 ; SSE41-NEXT:    retq
665 ; AVX-LABEL: shuffle_v8i16_44004444:
666 ; AVX:       # %bb.0:
667 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
668 ; AVX-NEXT:    retq
669   %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>
670   ret <8 x i16> %shuffle
672 define <8 x i16> @shuffle_v8i16_04404444(<8 x i16> %a, <8 x i16> %b) {
673 ; SSE2-LABEL: shuffle_v8i16_04404444:
674 ; SSE2:       # %bb.0:
675 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
676 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
677 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
678 ; SSE2-NEXT:    retq
680 ; SSSE3-LABEL: shuffle_v8i16_04404444:
681 ; SSSE3:       # %bb.0:
682 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
683 ; SSSE3-NEXT:    retq
685 ; SSE41-LABEL: shuffle_v8i16_04404444:
686 ; SSE41:       # %bb.0:
687 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
688 ; SSE41-NEXT:    retq
690 ; AVX-LABEL: shuffle_v8i16_04404444:
691 ; AVX:       # %bb.0:
692 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
693 ; AVX-NEXT:    retq
694   %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>
695   ret <8 x i16> %shuffle
697 define <8 x i16> @shuffle_v8i16_04400000(<8 x i16> %a, <8 x i16> %b) {
698 ; SSE2-LABEL: shuffle_v8i16_04400000:
699 ; SSE2:       # %bb.0:
700 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,0,3]
701 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
702 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
703 ; SSE2-NEXT:    retq
705 ; SSSE3-LABEL: shuffle_v8i16_04400000:
706 ; SSSE3:       # %bb.0:
707 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
708 ; SSSE3-NEXT:    retq
710 ; SSE41-LABEL: shuffle_v8i16_04400000:
711 ; SSE41:       # %bb.0:
712 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
713 ; SSE41-NEXT:    retq
715 ; AVX-LABEL: shuffle_v8i16_04400000:
716 ; AVX:       # %bb.0:
717 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
718 ; AVX-NEXT:    retq
719   %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>
720   ret <8 x i16> %shuffle
722 define <8 x i16> @shuffle_v8i16_04404567(<8 x i16> %a, <8 x i16> %b) {
723 ; SSE-LABEL: shuffle_v8i16_04404567:
724 ; SSE:       # %bb.0:
725 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
726 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
727 ; SSE-NEXT:    retq
729 ; AVX1-LABEL: shuffle_v8i16_04404567:
730 ; AVX1:       # %bb.0:
731 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
732 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
733 ; AVX1-NEXT:    retq
735 ; AVX2-SLOW-LABEL: shuffle_v8i16_04404567:
736 ; AVX2-SLOW:       # %bb.0:
737 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
738 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
739 ; AVX2-SLOW-NEXT:    retq
741 ; AVX2-FAST-LABEL: shuffle_v8i16_04404567:
742 ; AVX2-FAST:       # %bb.0:
743 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,10,11,12,13,14,15]
744 ; AVX2-FAST-NEXT:    retq
746 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_04404567:
747 ; AVX512VL-SLOW:       # %bb.0:
748 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
749 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
750 ; AVX512VL-SLOW-NEXT:    retq
752 ; AVX512VL-FAST-LABEL: shuffle_v8i16_04404567:
753 ; AVX512VL-FAST:       # %bb.0:
754 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,10,11,12,13,14,15]
755 ; AVX512VL-FAST-NEXT:    retq
757 ; XOP-LABEL: shuffle_v8i16_04404567:
758 ; XOP:       # %bb.0:
759 ; XOP-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
760 ; XOP-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
761 ; XOP-NEXT:    retq
762   %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>
763   ret <8 x i16> %shuffle
766 define <8 x i16> @shuffle_v8i16_0X444444(<8 x i16> %a, <8 x i16> %b) {
767 ; SSE2-LABEL: shuffle_v8i16_0X444444:
768 ; SSE2:       # %bb.0:
769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
770 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,2,2,4,5,6,7]
771 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
772 ; SSE2-NEXT:    retq
774 ; SSSE3-LABEL: shuffle_v8i16_0X444444:
775 ; SSSE3:       # %bb.0:
776 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]
777 ; SSSE3-NEXT:    retq
779 ; SSE41-LABEL: shuffle_v8i16_0X444444:
780 ; SSE41:       # %bb.0:
781 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]
782 ; SSE41-NEXT:    retq
784 ; AVX-LABEL: shuffle_v8i16_0X444444:
785 ; AVX:       # %bb.0:
786 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]
787 ; AVX-NEXT:    retq
788   %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>
789   ret <8 x i16> %shuffle
791 define <8 x i16> @shuffle_v8i16_44X04444(<8 x i16> %a, <8 x i16> %b) {
792 ; SSE2-LABEL: shuffle_v8i16_44X04444:
793 ; SSE2:       # %bb.0:
794 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
795 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,2,2,0,4,5,6,7]
796 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
797 ; SSE2-NEXT:    retq
799 ; SSSE3-LABEL: shuffle_v8i16_44X04444:
800 ; SSSE3:       # %bb.0:
801 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
802 ; SSSE3-NEXT:    retq
804 ; SSE41-LABEL: shuffle_v8i16_44X04444:
805 ; SSE41:       # %bb.0:
806 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
807 ; SSE41-NEXT:    retq
809 ; AVX-LABEL: shuffle_v8i16_44X04444:
810 ; AVX:       # %bb.0:
811 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
812 ; AVX-NEXT:    retq
813   %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>
814   ret <8 x i16> %shuffle
816 define <8 x i16> @shuffle_v8i16_X4404444(<8 x i16> %a, <8 x i16> %b) {
817 ; SSE2-LABEL: shuffle_v8i16_X4404444:
818 ; SSE2:       # %bb.0:
819 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
820 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
821 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
822 ; SSE2-NEXT:    retq
824 ; SSSE3-LABEL: shuffle_v8i16_X4404444:
825 ; SSSE3:       # %bb.0:
826 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
827 ; SSSE3-NEXT:    retq
829 ; SSE41-LABEL: shuffle_v8i16_X4404444:
830 ; SSE41:       # %bb.0:
831 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
832 ; SSE41-NEXT:    retq
834 ; AVX-LABEL: shuffle_v8i16_X4404444:
835 ; AVX:       # %bb.0:
836 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
837 ; AVX-NEXT:    retq
838   %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>
839   ret <8 x i16> %shuffle
842 define <8 x i16> @shuffle_v8i16_0127XXXX(<8 x i16> %a, <8 x i16> %b) {
843 ; SSE2-LABEL: shuffle_v8i16_0127XXXX:
844 ; SSE2:       # %bb.0:
845 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
846 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,7]
847 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
848 ; SSE2-NEXT:    retq
850 ; SSSE3-LABEL: shuffle_v8i16_0127XXXX:
851 ; SSSE3:       # %bb.0:
852 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]
853 ; SSSE3-NEXT:    retq
855 ; SSE41-LABEL: shuffle_v8i16_0127XXXX:
856 ; SSE41:       # %bb.0:
857 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]
858 ; SSE41-NEXT:    retq
860 ; AVX-LABEL: shuffle_v8i16_0127XXXX:
861 ; AVX:       # %bb.0:
862 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]
863 ; AVX-NEXT:    retq
864   %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>
865   ret <8 x i16> %shuffle
868 define <8 x i16> @shuffle_v8i16_XXXX4563(<8 x i16> %a, <8 x i16> %b) {
869 ; SSE2-LABEL: shuffle_v8i16_XXXX4563:
870 ; SSE2:       # %bb.0:
871 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
872 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]
873 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,2,0]
874 ; SSE2-NEXT:    retq
876 ; SSSE3-LABEL: shuffle_v8i16_XXXX4563:
877 ; SSSE3:       # %bb.0:
878 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]
879 ; SSSE3-NEXT:    retq
881 ; SSE41-LABEL: shuffle_v8i16_XXXX4563:
882 ; SSE41:       # %bb.0:
883 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]
884 ; SSE41-NEXT:    retq
886 ; AVX-LABEL: shuffle_v8i16_XXXX4563:
887 ; AVX:       # %bb.0:
888 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]
889 ; AVX-NEXT:    retq
890   %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>
891   ret <8 x i16> %shuffle
894 define <8 x i16> @shuffle_v8i16_4563XXXX(<8 x i16> %a, <8 x i16> %b) {
895 ; SSE2-LABEL: shuffle_v8i16_4563XXXX:
896 ; SSE2:       # %bb.0:
897 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
898 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]
899 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,0,2,3]
900 ; SSE2-NEXT:    retq
902 ; SSSE3-LABEL: shuffle_v8i16_4563XXXX:
903 ; SSSE3:       # %bb.0:
904 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]
905 ; SSSE3-NEXT:    retq
907 ; SSE41-LABEL: shuffle_v8i16_4563XXXX:
908 ; SSE41:       # %bb.0:
909 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]
910 ; SSE41-NEXT:    retq
912 ; AVX-LABEL: shuffle_v8i16_4563XXXX:
913 ; AVX:       # %bb.0:
914 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]
915 ; AVX-NEXT:    retq
916   %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>
917   ret <8 x i16> %shuffle
920 define <8 x i16> @shuffle_v8i16_01274563(<8 x i16> %a, <8 x i16> %b) {
921 ; SSE2-LABEL: shuffle_v8i16_01274563:
922 ; SSE2:       # %bb.0:
923 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
924 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]
925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
926 ; SSE2-NEXT:    retq
928 ; SSSE3-LABEL: shuffle_v8i16_01274563:
929 ; SSSE3:       # %bb.0:
930 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
931 ; SSSE3-NEXT:    retq
933 ; SSE41-LABEL: shuffle_v8i16_01274563:
934 ; SSE41:       # %bb.0:
935 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
936 ; SSE41-NEXT:    retq
938 ; AVX-LABEL: shuffle_v8i16_01274563:
939 ; AVX:       # %bb.0:
940 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
941 ; AVX-NEXT:    retq
942   %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>
943   ret <8 x i16> %shuffle
946 define <8 x i16> @shuffle_v8i16_45630127(<8 x i16> %a, <8 x i16> %b) {
947 ; SSE2-LABEL: shuffle_v8i16_45630127:
948 ; SSE2:       # %bb.0:
949 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
950 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
951 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,0,3,1]
952 ; SSE2-NEXT:    retq
954 ; SSSE3-LABEL: shuffle_v8i16_45630127:
955 ; SSSE3:       # %bb.0:
956 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
957 ; SSSE3-NEXT:    retq
959 ; SSE41-LABEL: shuffle_v8i16_45630127:
960 ; SSE41:       # %bb.0:
961 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
962 ; SSE41-NEXT:    retq
964 ; AVX-LABEL: shuffle_v8i16_45630127:
965 ; AVX:       # %bb.0:
966 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
967 ; AVX-NEXT:    retq
968   %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>
969   ret <8 x i16> %shuffle
972 define <8 x i16> @shuffle_v8i16_37102735(<8 x i16> %a, <8 x i16> %b) {
973 ; SSE2-LABEL: shuffle_v8i16_37102735:
974 ; SSE2:       # %bb.0:
975 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7]
976 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
977 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,4]
978 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
979 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
980 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,4,5,6]
981 ; SSE2-NEXT:    retq
983 ; SSSE3-LABEL: shuffle_v8i16_37102735:
984 ; SSSE3:       # %bb.0:
985 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
986 ; SSSE3-NEXT:    retq
988 ; SSE41-LABEL: shuffle_v8i16_37102735:
989 ; SSE41:       # %bb.0:
990 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
991 ; SSE41-NEXT:    retq
993 ; AVX-LABEL: shuffle_v8i16_37102735:
994 ; AVX:       # %bb.0:
995 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
996 ; AVX-NEXT:    retq
997   %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>
998   ret <8 x i16> %shuffle
1001 define <8 x i16> @shuffle_v8i16_08192a3b(<8 x i16> %a, <8 x i16> %b) {
1002 ; SSE-LABEL: shuffle_v8i16_08192a3b:
1003 ; SSE:       # %bb.0:
1004 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1005 ; SSE-NEXT:    retq
1007 ; AVX-LABEL: shuffle_v8i16_08192a3b:
1008 ; AVX:       # %bb.0:
1009 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1010 ; AVX-NEXT:    retq
1011   %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>
1012   ret <8 x i16> %shuffle
1015 define <8 x i16> @shuffle_v8i16_0c1d2e3f(<8 x i16> %a, <8 x i16> %b) {
1016 ; SSE-LABEL: shuffle_v8i16_0c1d2e3f:
1017 ; SSE:       # %bb.0:
1018 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
1019 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1020 ; SSE-NEXT:    retq
1022 ; AVX-LABEL: shuffle_v8i16_0c1d2e3f:
1023 ; AVX:       # %bb.0:
1024 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
1025 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1026 ; AVX-NEXT:    retq
1027   %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>
1028   ret <8 x i16> %shuffle
1031 define <8 x i16> @shuffle_v8i16_4c5d6e7f(<8 x i16> %a, <8 x i16> %b) {
1032 ; SSE-LABEL: shuffle_v8i16_4c5d6e7f:
1033 ; SSE:       # %bb.0:
1034 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1035 ; SSE-NEXT:    retq
1037 ; AVX-LABEL: shuffle_v8i16_4c5d6e7f:
1038 ; AVX:       # %bb.0:
1039 ; AVX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1040 ; AVX-NEXT:    retq
1041   %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>
1042   ret <8 x i16> %shuffle
1045 define <8 x i16> @shuffle_v8i16_48596a7b(<8 x i16> %a, <8 x i16> %b) {
1046 ; SSE-LABEL: shuffle_v8i16_48596a7b:
1047 ; SSE:       # %bb.0:
1048 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
1049 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1050 ; SSE-NEXT:    retq
1052 ; AVX-LABEL: shuffle_v8i16_48596a7b:
1053 ; AVX:       # %bb.0:
1054 ; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
1055 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1056 ; AVX-NEXT:    retq
1057   %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>
1058   ret <8 x i16> %shuffle
1061 define <8 x i16> @shuffle_v8i16_08196e7f(<8 x i16> %a, <8 x i16> %b) {
1062 ; SSE-LABEL: shuffle_v8i16_08196e7f:
1063 ; SSE:       # %bb.0:
1064 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]
1065 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
1066 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1067 ; SSE-NEXT:    retq
1069 ; AVX1-LABEL: shuffle_v8i16_08196e7f:
1070 ; AVX1:       # %bb.0:
1071 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]
1072 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
1073 ; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1074 ; AVX1-NEXT:    retq
1076 ; AVX2OR512VL-LABEL: shuffle_v8i16_08196e7f:
1077 ; AVX2OR512VL:       # %bb.0:
1078 ; AVX2OR512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]
1079 ; AVX2OR512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
1080 ; AVX2OR512VL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1081 ; AVX2OR512VL-NEXT:    retq
1083 ; XOP-LABEL: shuffle_v8i16_08196e7f:
1084 ; XOP:       # %bb.0:
1085 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,1],xmm0[2,3],xmm1[2,3],xmm0[12,13],xmm1[12,13],xmm0[14,15],xmm1[14,15]
1086 ; XOP-NEXT:    retq
1087   %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>
1088   ret <8 x i16> %shuffle
1091 define <8 x i16> @shuffle_v8i16_0c1d6879(<8 x i16> %a, <8 x i16> %b) {
1092 ; SSE-LABEL: shuffle_v8i16_0c1d6879:
1093 ; SSE:       # %bb.0:
1094 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]
1095 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
1096 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1097 ; SSE-NEXT:    retq
1099 ; AVX1-LABEL: shuffle_v8i16_0c1d6879:
1100 ; AVX1:       # %bb.0:
1101 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]
1102 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
1103 ; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1104 ; AVX1-NEXT:    retq
1106 ; AVX2OR512VL-LABEL: shuffle_v8i16_0c1d6879:
1107 ; AVX2OR512VL:       # %bb.0:
1108 ; AVX2OR512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]
1109 ; AVX2OR512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]
1110 ; AVX2OR512VL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1111 ; AVX2OR512VL-NEXT:    retq
1113 ; XOP-LABEL: shuffle_v8i16_0c1d6879:
1114 ; XOP:       # %bb.0:
1115 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1],xmm1[8,9],xmm0[2,3],xmm1[10,11],xmm0[12,13],xmm1[0,1],xmm0[14,15],xmm1[2,3]
1116 ; XOP-NEXT:    retq
1117   %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>
1118   ret <8 x i16> %shuffle
1121 define <8 x i16> @shuffle_v8i16_109832ba(<8 x i16> %a, <8 x i16> %b) {
1122 ; SSE-LABEL: shuffle_v8i16_109832ba:
1123 ; SSE:       # %bb.0:
1124 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1125 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
1126 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]
1127 ; SSE-NEXT:    retq
1129 ; AVX1-LABEL: shuffle_v8i16_109832ba:
1130 ; AVX1:       # %bb.0:
1131 ; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1132 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
1133 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]
1134 ; AVX1-NEXT:    retq
1136 ; AVX2-SLOW-LABEL: shuffle_v8i16_109832ba:
1137 ; AVX2-SLOW:       # %bb.0:
1138 ; AVX2-SLOW-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1139 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
1140 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]
1141 ; AVX2-SLOW-NEXT:    retq
1143 ; AVX2-FAST-LABEL: shuffle_v8i16_109832ba:
1144 ; AVX2-FAST:       # %bb.0:
1145 ; AVX2-FAST-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1146 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,0,1,6,7,2,3,12,13,8,9,14,15,10,11]
1147 ; AVX2-FAST-NEXT:    retq
1149 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_109832ba:
1150 ; AVX512VL-SLOW:       # %bb.0:
1151 ; AVX512VL-SLOW-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1152 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]
1153 ; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]
1154 ; AVX512VL-SLOW-NEXT:    retq
1156 ; AVX512VL-FAST-LABEL: shuffle_v8i16_109832ba:
1157 ; AVX512VL-FAST:       # %bb.0:
1158 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,0,9,8,3,2,11,10]
1159 ; AVX512VL-FAST-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
1160 ; AVX512VL-FAST-NEXT:    retq
1162 ; XOP-LABEL: shuffle_v8i16_109832ba:
1163 ; XOP:       # %bb.0:
1164 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[2,3,0,1],xmm1[2,3,0,1],xmm0[6,7,4,5],xmm1[6,7,4,5]
1165 ; XOP-NEXT:    retq
1166   %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>
1167   ret <8 x i16> %shuffle
1170 define <8 x i16> @shuffle_v8i16_8091a2b3(<8 x i16> %a, <8 x i16> %b) {
1171 ; SSE-LABEL: shuffle_v8i16_8091a2b3:
1172 ; SSE:       # %bb.0:
1173 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1174 ; SSE-NEXT:    movdqa %xmm1, %xmm0
1175 ; SSE-NEXT:    retq
1177 ; AVX-LABEL: shuffle_v8i16_8091a2b3:
1178 ; AVX:       # %bb.0:
1179 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1180 ; AVX-NEXT:    retq
1181   %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>
1182   ret <8 x i16> %shuffle
1184 define <8 x i16> @shuffle_v8i16_c4d5e6f7(<8 x i16> %a, <8 x i16> %b) {
1185 ; SSE-LABEL: shuffle_v8i16_c4d5e6f7:
1186 ; SSE:       # %bb.0:
1187 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1188 ; SSE-NEXT:    movdqa %xmm1, %xmm0
1189 ; SSE-NEXT:    retq
1191 ; AVX-LABEL: shuffle_v8i16_c4d5e6f7:
1192 ; AVX:       # %bb.0:
1193 ; AVX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1194 ; AVX-NEXT:    retq
1195   %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>
1196   ret <8 x i16> %shuffle
1199 define <8 x i16> @shuffle_v8i16_0213cedf(<8 x i16> %a, <8 x i16> %b) {
1200 ; SSE2-LABEL: shuffle_v8i16_0213cedf:
1201 ; SSE2:       # %bb.0:
1202 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm0[0,2,1,3,4,5,6,7]
1203 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,6,5,7]
1204 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
1205 ; SSE2-NEXT:    retq
1207 ; SSSE3-LABEL: shuffle_v8i16_0213cedf:
1208 ; SSSE3:       # %bb.0:
1209 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm0[0,2,1,3,4,5,6,7]
1210 ; SSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,6,5,7]
1211 ; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]
1212 ; SSSE3-NEXT:    retq
1214 ; SSE41-LABEL: shuffle_v8i16_0213cedf:
1215 ; SSE41:       # %bb.0:
1216 ; SSE41-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]
1217 ; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
1218 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1219 ; SSE41-NEXT:    retq
1221 ; AVX1-LABEL: shuffle_v8i16_0213cedf:
1222 ; AVX1:       # %bb.0:
1223 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]
1224 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
1225 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1226 ; AVX1-NEXT:    retq
1228 ; AVX2-SLOW-LABEL: shuffle_v8i16_0213cedf:
1229 ; AVX2-SLOW:       # %bb.0:
1230 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]
1231 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
1232 ; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1233 ; AVX2-SLOW-NEXT:    retq
1235 ; AVX2-FAST-LABEL: shuffle_v8i16_0213cedf:
1236 ; AVX2-FAST:       # %bb.0:
1237 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,12,13,10,11,14,15,u,u,u,u,u,u,u,u]
1238 ; AVX2-FAST-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
1239 ; AVX2-FAST-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1240 ; AVX2-FAST-NEXT:    retq
1242 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_0213cedf:
1243 ; AVX512VL-SLOW:       # %bb.0:
1244 ; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,5,7]
1245 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]
1246 ; AVX512VL-SLOW-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1247 ; AVX512VL-SLOW-NEXT:    retq
1249 ; AVX512VL-FAST-LABEL: shuffle_v8i16_0213cedf:
1250 ; AVX512VL-FAST:       # %bb.0:
1251 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,2,1,3,12,14,13,15]
1252 ; AVX512VL-FAST-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
1253 ; AVX512VL-FAST-NEXT:    retq
1255 ; XOP-LABEL: shuffle_v8i16_0213cedf:
1256 ; XOP:       # %bb.0:
1257 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,4,5,2,3,6,7],xmm1[8,9,12,13,10,11,14,15]
1258 ; XOP-NEXT:    retq
1259   %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>
1260   ret <8 x i16> %shuffle
1263 define <8 x i16> @shuffle_v8i16_443aXXXX(<8 x i16> %a, <8 x i16> %b) {
1264 ; SSE2-LABEL: shuffle_v8i16_443aXXXX:
1265 ; SSE2:       # %bb.0:
1266 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,0,65535,65535,65535,65535,65535]
1267 ; SSE2-NEXT:    pand %xmm2, %xmm0
1268 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1269 ; SSE2-NEXT:    por %xmm0, %xmm2
1270 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,1,2,3]
1271 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1272 ; SSE2-NEXT:    retq
1274 ; SSSE3-LABEL: shuffle_v8i16_443aXXXX:
1275 ; SSSE3:       # %bb.0:
1276 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[4,5,u,u,u,u,u,u,u,u]
1277 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7],zero,zero,xmm0[u,u,u,u,u,u,u,u]
1278 ; SSSE3-NEXT:    por %xmm1, %xmm0
1279 ; SSSE3-NEXT:    retq
1281 ; SSE41-LABEL: shuffle_v8i16_443aXXXX:
1282 ; SSE41:       # %bb.0:
1283 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
1284 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1285 ; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1286 ; SSE41-NEXT:    retq
1288 ; AVX1-LABEL: shuffle_v8i16_443aXXXX:
1289 ; AVX1:       # %bb.0:
1290 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
1291 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1292 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1293 ; AVX1-NEXT:    retq
1295 ; AVX2-SLOW-LABEL: shuffle_v8i16_443aXXXX:
1296 ; AVX2-SLOW:       # %bb.0:
1297 ; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
1298 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1299 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1300 ; AVX2-SLOW-NEXT:    retq
1302 ; AVX2-FAST-LABEL: shuffle_v8i16_443aXXXX:
1303 ; AVX2-FAST:       # %bb.0:
1304 ; AVX2-FAST-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
1305 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7,4,5,8,9,10,11,12,13,14,15]
1306 ; AVX2-FAST-NEXT:    retq
1308 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_443aXXXX:
1309 ; AVX512VL-SLOW:       # %bb.0:
1310 ; AVX512VL-SLOW-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
1311 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1312 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]
1313 ; AVX512VL-SLOW-NEXT:    retq
1315 ; AVX512VL-FAST-LABEL: shuffle_v8i16_443aXXXX:
1316 ; AVX512VL-FAST:       # %bb.0:
1317 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} xmm2 = [4,4,3,10,4,5,6,7]
1318 ; AVX512VL-FAST-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
1319 ; AVX512VL-FAST-NEXT:    retq
1321 ; XOP-LABEL: shuffle_v8i16_443aXXXX:
1322 ; XOP:       # %bb.0:
1323 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,8,9,6,7],xmm1[4,5],xmm0[8,9,10,11,12,13,14,15]
1324 ; XOP-NEXT:    retq
1325   %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>
1326   ret <8 x i16> %shuffle
1329 define <8 x i16> @shuffle_v8i16_032dXXXX(<8 x i16> %a, <8 x i16> %b) {
1330 ; SSE2-LABEL: shuffle_v8i16_032dXXXX:
1331 ; SSE2:       # %bb.0:
1332 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1333 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1,2,0]
1334 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,6,7]
1335 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]
1336 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
1337 ; SSE2-NEXT:    retq
1339 ; SSSE3-LABEL: shuffle_v8i16_032dXXXX:
1340 ; SSSE3:       # %bb.0:
1341 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,u,u,u,u,u,u,u,u]
1342 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5],zero,zero,xmm0[u,u,u,u,u,u,u,u]
1343 ; SSSE3-NEXT:    por %xmm1, %xmm0
1344 ; SSSE3-NEXT:    retq
1346 ; SSE41-LABEL: shuffle_v8i16_032dXXXX:
1347 ; SSE41:       # %bb.0:
1348 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1349 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]
1350 ; SSE41-NEXT:    retq
1352 ; AVX1-LABEL: shuffle_v8i16_032dXXXX:
1353 ; AVX1:       # %bb.0:
1354 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1355 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]
1356 ; AVX1-NEXT:    retq
1358 ; AVX2-LABEL: shuffle_v8i16_032dXXXX:
1359 ; AVX2:       # %bb.0:
1360 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1361 ; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]
1362 ; AVX2-NEXT:    retq
1364 ; AVX512VL-LABEL: shuffle_v8i16_032dXXXX:
1365 ; AVX512VL:       # %bb.0:
1366 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,3,2,13,0,13,0,1]
1367 ; AVX512VL-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
1368 ; AVX512VL-NEXT:    retq
1370 ; XOP-LABEL: shuffle_v8i16_032dXXXX:
1371 ; XOP:       # %bb.0:
1372 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,6,7,4,5],xmm1[10,11],xmm0[0,1],xmm1[10,11],xmm0[0,1,2,3]
1373 ; XOP-NEXT:    retq
1374   %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>
1375   ret <8 x i16> %shuffle
1377 define <8 x i16> @shuffle_v8i16_XXXdXXXX(<8 x i16> %a, <8 x i16> %b) {
1378 ; SSE-LABEL: shuffle_v8i16_XXXdXXXX:
1379 ; SSE:       # %bb.0:
1380 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,2,3,3]
1381 ; SSE-NEXT:    retq
1383 ; AVX-LABEL: shuffle_v8i16_XXXdXXXX:
1384 ; AVX:       # %bb.0:
1385 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm1[2,2,3,3]
1386 ; AVX-NEXT:    retq
1387   %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>
1388   ret <8 x i16> %shuffle
1391 define <8 x i16> @shuffle_v8i16_012dXXXX(<8 x i16> %a, <8 x i16> %b) {
1392 ; SSE2-LABEL: shuffle_v8i16_012dXXXX:
1393 ; SSE2:       # %bb.0:
1394 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,0,65535,65535,65535,65535]
1395 ; SSE2-NEXT:    pand %xmm2, %xmm0
1396 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
1397 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1398 ; SSE2-NEXT:    por %xmm2, %xmm0
1399 ; SSE2-NEXT:    retq
1401 ; SSSE3-LABEL: shuffle_v8i16_012dXXXX:
1402 ; SSSE3:       # %bb.0:
1403 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,u,u,u,u,u,u,u,u]
1404 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],zero,zero,xmm0[u,u,u,u,u,u,u,u]
1405 ; SSSE3-NEXT:    por %xmm1, %xmm0
1406 ; SSSE3-NEXT:    retq
1408 ; SSE41-LABEL: shuffle_v8i16_012dXXXX:
1409 ; SSE41:       # %bb.0:
1410 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
1411 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]
1412 ; SSE41-NEXT:    retq
1414 ; AVX-LABEL: shuffle_v8i16_012dXXXX:
1415 ; AVX:       # %bb.0:
1416 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
1417 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]
1418 ; AVX-NEXT:    retq
1419   %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>
1420   ret <8 x i16> %shuffle
1423 define <8 x i16> @shuffle_v8i16_XXXXcde3(<8 x i16> %a, <8 x i16> %b) {
1424 ; SSE2-LABEL: shuffle_v8i16_XXXXcde3:
1425 ; SSE2:       # %bb.0:
1426 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535,65535,65535,65535,0]
1427 ; SSE2-NEXT:    pand %xmm2, %xmm1
1428 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1429 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1430 ; SSE2-NEXT:    por %xmm1, %xmm2
1431 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1432 ; SSE2-NEXT:    retq
1434 ; SSSE3-LABEL: shuffle_v8i16_XXXXcde3:
1435 ; SSSE3:       # %bb.0:
1436 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,u,u,u,u],zero,zero,zero,zero,zero,zero,xmm0[6,7]
1437 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,8,9,10,11,12,13],zero,zero
1438 ; SSSE3-NEXT:    por %xmm1, %xmm0
1439 ; SSSE3-NEXT:    retq
1441 ; SSE41-LABEL: shuffle_v8i16_XXXXcde3:
1442 ; SSE41:       # %bb.0:
1443 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1444 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1445 ; SSE41-NEXT:    retq
1447 ; AVX1-LABEL: shuffle_v8i16_XXXXcde3:
1448 ; AVX1:       # %bb.0:
1449 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1450 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1451 ; AVX1-NEXT:    retq
1453 ; AVX2OR512VL-LABEL: shuffle_v8i16_XXXXcde3:
1454 ; AVX2OR512VL:       # %bb.0:
1455 ; AVX2OR512VL-NEXT:    vpbroadcastq %xmm0, %xmm0
1456 ; AVX2OR512VL-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1457 ; AVX2OR512VL-NEXT:    retq
1459 ; XOPAVX1-LABEL: shuffle_v8i16_XXXXcde3:
1460 ; XOPAVX1:       # %bb.0:
1461 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
1462 ; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1463 ; XOPAVX1-NEXT:    retq
1465 ; XOPAVX2-LABEL: shuffle_v8i16_XXXXcde3:
1466 ; XOPAVX2:       # %bb.0:
1467 ; XOPAVX2-NEXT:    vpbroadcastq %xmm0, %xmm0
1468 ; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]
1469 ; XOPAVX2-NEXT:    retq
1470   %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>
1471   ret <8 x i16> %shuffle
1474 define <8 x i16> @shuffle_v8i16_cde3XXXX(<8 x i16> %a, <8 x i16> %b) {
1475 ; SSE2-LABEL: shuffle_v8i16_cde3XXXX:
1476 ; SSE2:       # %bb.0:
1477 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,0,65535,65535,65535,65535]
1478 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
1479 ; SSE2-NEXT:    pand %xmm2, %xmm1
1480 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1481 ; SSE2-NEXT:    por %xmm1, %xmm2
1482 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1483 ; SSE2-NEXT:    retq
1485 ; SSSE3-LABEL: shuffle_v8i16_cde3XXXX:
1486 ; SSSE3:       # %bb.0:
1487 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[6,7,u,u,u,u,u,u,u,u]
1488 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13],zero,zero,xmm1[u,u,u,u,u,u,u,u]
1489 ; SSSE3-NEXT:    por %xmm1, %xmm0
1490 ; SSSE3-NEXT:    retq
1492 ; SSE41-LABEL: shuffle_v8i16_cde3XXXX:
1493 ; SSE41:       # %bb.0:
1494 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
1495 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]
1496 ; SSE41-NEXT:    retq
1498 ; AVX-LABEL: shuffle_v8i16_cde3XXXX:
1499 ; AVX:       # %bb.0:
1500 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
1501 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]
1502 ; AVX-NEXT:    retq
1503   %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>
1504   ret <8 x i16> %shuffle
1507 define <8 x i16> @shuffle_v8i16_012dcde3(<8 x i16> %a, <8 x i16> %b) {
1508 ; SSE2-LABEL: shuffle_v8i16_012dcde3:
1509 ; SSE2:       # %bb.0:
1510 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1511 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3,2,1]
1512 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]
1513 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,0]
1514 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7]
1515 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,5,7]
1516 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
1517 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7]
1518 ; SSE2-NEXT:    retq
1520 ; SSSE3-LABEL: shuffle_v8i16_012dcde3:
1521 ; SSSE3:       # %bb.0:
1522 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[10,11,8,9,10,11,12,13],zero,zero
1523 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],zero,zero,zero,zero,zero,zero,zero,zero,xmm0[6,7]
1524 ; SSSE3-NEXT:    por %xmm1, %xmm0
1525 ; SSSE3-NEXT:    retq
1527 ; SSE41-LABEL: shuffle_v8i16_012dcde3:
1528 ; SSE41:       # %bb.0:
1529 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1530 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]
1531 ; SSE41-NEXT:    retq
1533 ; AVX1-LABEL: shuffle_v8i16_012dcde3:
1534 ; AVX1:       # %bb.0:
1535 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1536 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]
1537 ; AVX1-NEXT:    retq
1539 ; AVX2-LABEL: shuffle_v8i16_012dcde3:
1540 ; AVX2:       # %bb.0:
1541 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1542 ; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]
1543 ; AVX2-NEXT:    retq
1545 ; AVX512VL-LABEL: shuffle_v8i16_012dcde3:
1546 ; AVX512VL:       # %bb.0:
1547 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,2,13,12,13,14,3]
1548 ; AVX512VL-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
1549 ; AVX512VL-NEXT:    retq
1551 ; XOP-LABEL: shuffle_v8i16_012dcde3:
1552 ; XOP:       # %bb.0:
1553 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5],xmm1[10,11,8,9,10,11,12,13],xmm0[6,7]
1554 ; XOP-NEXT:    retq
1555   %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>
1556   ret <8 x i16> %shuffle
1559 define <8 x i16> @shuffle_v8i16_0923cde7(<8 x i16> %a, <8 x i16> %b) {
1560 ; SSE2-LABEL: shuffle_v8i16_0923cde7:
1561 ; SSE2:       # %bb.0:
1562 ; SSE2-NEXT:    movaps {{.*#+}} xmm2 = [65535,0,65535,65535,0,0,0,65535]
1563 ; SSE2-NEXT:    andps %xmm2, %xmm0
1564 ; SSE2-NEXT:    andnps %xmm1, %xmm2
1565 ; SSE2-NEXT:    orps %xmm2, %xmm0
1566 ; SSE2-NEXT:    retq
1568 ; SSSE3-LABEL: shuffle_v8i16_0923cde7:
1569 ; SSSE3:       # %bb.0:
1570 ; SSSE3-NEXT:    movaps {{.*#+}} xmm2 = [65535,0,65535,65535,0,0,0,65535]
1571 ; SSSE3-NEXT:    andps %xmm2, %xmm0
1572 ; SSSE3-NEXT:    andnps %xmm1, %xmm2
1573 ; SSSE3-NEXT:    orps %xmm2, %xmm0
1574 ; SSSE3-NEXT:    retq
1576 ; SSE41-LABEL: shuffle_v8i16_0923cde7:
1577 ; SSE41:       # %bb.0:
1578 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]
1579 ; SSE41-NEXT:    retq
1581 ; AVX-LABEL: shuffle_v8i16_0923cde7:
1582 ; AVX:       # %bb.0:
1583 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]
1584 ; AVX-NEXT:    retq
1585   %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>
1586   ret <8 x i16> %shuffle
1589 define <8 x i16> @shuffle_v8i16_XXX1X579(<8 x i16> %a, <8 x i16> %b) {
1590 ; SSE2-LABEL: shuffle_v8i16_XXX1X579:
1591 ; SSE2:       # %bb.0:
1592 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,0,0]
1593 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535,65535,65535,65535,0]
1594 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
1595 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1596 ; SSE2-NEXT:    pand %xmm1, %xmm0
1597 ; SSE2-NEXT:    pandn %xmm2, %xmm1
1598 ; SSE2-NEXT:    por %xmm0, %xmm1
1599 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1600 ; SSE2-NEXT:    retq
1602 ; SSSE3-LABEL: shuffle_v8i16_XXX1X579:
1603 ; SSSE3:       # %bb.0:
1604 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u],zero,zero,xmm1[u,u],zero,zero,zero,zero,xmm1[2,3]
1605 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,u,u,2,3,u,u,10,11,14,15],zero,zero
1606 ; SSSE3-NEXT:    por %xmm1, %xmm0
1607 ; SSSE3-NEXT:    retq
1609 ; SSE41-LABEL: shuffle_v8i16_XXX1X579:
1610 ; SSE41:       # %bb.0:
1611 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]
1612 ; SSE41-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
1613 ; SSE41-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1614 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1615 ; SSE41-NEXT:    retq
1617 ; AVX1-LABEL: shuffle_v8i16_XXX1X579:
1618 ; AVX1:       # %bb.0:
1619 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]
1620 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
1621 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1622 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1623 ; AVX1-NEXT:    retq
1625 ; AVX2-SLOW-LABEL: shuffle_v8i16_XXX1X579:
1626 ; AVX2-SLOW:       # %bb.0:
1627 ; AVX2-SLOW-NEXT:    vpbroadcastd %xmm1, %xmm1
1628 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
1629 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1630 ; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1631 ; AVX2-SLOW-NEXT:    retq
1633 ; AVX2-FAST-LABEL: shuffle_v8i16_XXX1X579:
1634 ; AVX2-FAST:       # %bb.0:
1635 ; AVX2-FAST-NEXT:    vpbroadcastd %xmm1, %xmm1
1636 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,8,9,10,11,14,15,u,u]
1637 ; AVX2-FAST-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1638 ; AVX2-FAST-NEXT:    retq
1640 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_XXX1X579:
1641 ; AVX512VL-SLOW:       # %bb.0:
1642 ; AVX512VL-SLOW-NEXT:    vpbroadcastd %xmm1, %xmm1
1643 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
1644 ; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]
1645 ; AVX512VL-SLOW-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]
1646 ; AVX512VL-SLOW-NEXT:    retq
1648 ; AVX512VL-FAST-LABEL: shuffle_v8i16_XXX1X579:
1649 ; AVX512VL-FAST:       # %bb.0:
1650 ; AVX512VL-FAST-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,1,1,1,4,5,7,9]
1651 ; AVX512VL-FAST-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
1652 ; AVX512VL-FAST-NEXT:    retq
1654 ; XOP-LABEL: shuffle_v8i16_XXX1X579:
1655 ; XOP:       # %bb.0:
1656 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,8,9,10,11,14,15],xmm1[2,3]
1657 ; XOP-NEXT:    retq
1658   %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>
1659   ret <8 x i16> %shuffle
1662 define <8 x i16> @shuffle_v8i16_XX4X8acX(<8 x i16> %a, <8 x i16> %b) {
1663 ; SSE2-LABEL: shuffle_v8i16_XX4X8acX:
1664 ; SSE2:       # %bb.0:
1665 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
1666 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]
1667 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,6,7,4,7]
1668 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,2],xmm1[2,3]
1669 ; SSE2-NEXT:    retq
1671 ; SSSE3-LABEL: shuffle_v8i16_XX4X8acX:
1672 ; SSSE3:       # %bb.0:
1673 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,8,9,u,u],zero,zero,zero,zero,zero,zero,xmm0[u,u]
1674 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u],zero,zero,xmm1[u,u,0,1,4,5,8,9,u,u]
1675 ; SSSE3-NEXT:    por %xmm1, %xmm0
1676 ; SSSE3-NEXT:    retq
1678 ; SSE41-LABEL: shuffle_v8i16_XX4X8acX:
1679 ; SSE41:       # %bb.0:
1680 ; SSE41-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5]
1681 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]
1682 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1683 ; SSE41-NEXT:    retq
1685 ; AVX1-LABEL: shuffle_v8i16_XX4X8acX:
1686 ; AVX1:       # %bb.0:
1687 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5]
1688 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]
1689 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1690 ; AVX1-NEXT:    retq
1692 ; AVX2-LABEL: shuffle_v8i16_XX4X8acX:
1693 ; AVX2:       # %bb.0:
1694 ; AVX2-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5]
1695 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]
1696 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
1697 ; AVX2-NEXT:    retq
1699 ; AVX512VL-LABEL: shuffle_v8i16_XX4X8acX:
1700 ; AVX512VL:       # %bb.0:
1701 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} xmm2 = [4,5,4,5,8,10,12,10]
1702 ; AVX512VL-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
1703 ; AVX512VL-NEXT:    retq
1705 ; XOP-LABEL: shuffle_v8i16_XX4X8acX:
1706 ; XOP:       # %bb.0:
1707 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,10,11,8,9,10,11],xmm1[0,1,4,5,8,9,4,5]
1708 ; XOP-NEXT:    retq
1709   %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>
1710   ret <8 x i16> %shuffle
1713 define <8 x i16> @shuffle_v8i16_8zzzzzzz(i16 %i) {
1714 ; SSE-LABEL: shuffle_v8i16_8zzzzzzz:
1715 ; SSE:       # %bb.0:
1716 ; SSE-NEXT:    movzwl %di, %eax
1717 ; SSE-NEXT:    movd %eax, %xmm0
1718 ; SSE-NEXT:    retq
1720 ; AVX-LABEL: shuffle_v8i16_8zzzzzzz:
1721 ; AVX:       # %bb.0:
1722 ; AVX-NEXT:    movzwl %di, %eax
1723 ; AVX-NEXT:    vmovd %eax, %xmm0
1724 ; AVX-NEXT:    retq
1725   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1726   %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>
1727   ret <8 x i16> %shuffle
1730 define <8 x i16> @shuffle_v8i16_z8zzzzzz(i16 %i) {
1731 ; SSE-LABEL: shuffle_v8i16_z8zzzzzz:
1732 ; SSE:       # %bb.0:
1733 ; SSE-NEXT:    pxor %xmm0, %xmm0
1734 ; SSE-NEXT:    pinsrw $1, %edi, %xmm0
1735 ; SSE-NEXT:    retq
1737 ; AVX-LABEL: shuffle_v8i16_z8zzzzzz:
1738 ; AVX:       # %bb.0:
1739 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1740 ; AVX-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0
1741 ; AVX-NEXT:    retq
1742   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1743   %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>
1744   ret <8 x i16> %shuffle
1747 define <8 x i16> @shuffle_v8i16_zzzzz8zz(i16 %i) {
1748 ; SSE-LABEL: shuffle_v8i16_zzzzz8zz:
1749 ; SSE:       # %bb.0:
1750 ; SSE-NEXT:    pxor %xmm0, %xmm0
1751 ; SSE-NEXT:    pinsrw $5, %edi, %xmm0
1752 ; SSE-NEXT:    retq
1754 ; AVX-LABEL: shuffle_v8i16_zzzzz8zz:
1755 ; AVX:       # %bb.0:
1756 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1757 ; AVX-NEXT:    vpinsrw $5, %edi, %xmm0, %xmm0
1758 ; AVX-NEXT:    retq
1759   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1760   %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>
1761   ret <8 x i16> %shuffle
1764 define <8 x i16> @shuffle_v8i16_zuuzuuz8(i16 %i) {
1765 ; SSE-LABEL: shuffle_v8i16_zuuzuuz8:
1766 ; SSE:       # %bb.0:
1767 ; SSE-NEXT:    pxor %xmm0, %xmm0
1768 ; SSE-NEXT:    pinsrw $7, %edi, %xmm0
1769 ; SSE-NEXT:    retq
1771 ; AVX-LABEL: shuffle_v8i16_zuuzuuz8:
1772 ; AVX:       # %bb.0:
1773 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1774 ; AVX-NEXT:    vpinsrw $7, %edi, %xmm0, %xmm0
1775 ; AVX-NEXT:    retq
1776   %a = insertelement <8 x i16> undef, i16 %i, i32 0
1777   %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>
1778   ret <8 x i16> %shuffle
1781 define <8 x i16> @shuffle_v8i16_zzBzzzzz(i16 %i) {
1782 ; SSE-LABEL: shuffle_v8i16_zzBzzzzz:
1783 ; SSE:       # %bb.0:
1784 ; SSE-NEXT:    pxor %xmm0, %xmm0
1785 ; SSE-NEXT:    pinsrw $2, %edi, %xmm0
1786 ; SSE-NEXT:    retq
1788 ; AVX-LABEL: shuffle_v8i16_zzBzzzzz:
1789 ; AVX:       # %bb.0:
1790 ; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
1791 ; AVX-NEXT:    vpinsrw $2, %edi, %xmm0, %xmm0
1792 ; AVX-NEXT:    retq
1793   %a = insertelement <8 x i16> undef, i16 %i, i32 3
1794   %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>
1795   ret <8 x i16> %shuffle
1798 define <8 x i16> @shuffle_v8i16_def01234(<8 x i16> %a, <8 x i16> %b) {
1799 ; SSE2-LABEL: shuffle_v8i16_def01234:
1800 ; SSE2:       # %bb.0:
1801 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1802 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1803 ; SSE2-NEXT:    por %xmm1, %xmm0
1804 ; SSE2-NEXT:    retq
1806 ; SSSE3-LABEL: shuffle_v8i16_def01234:
1807 ; SSSE3:       # %bb.0:
1808 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1809 ; SSSE3-NEXT:    retq
1811 ; SSE41-LABEL: shuffle_v8i16_def01234:
1812 ; SSE41:       # %bb.0:
1813 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1814 ; SSE41-NEXT:    retq
1816 ; AVX-LABEL: shuffle_v8i16_def01234:
1817 ; AVX:       # %bb.0:
1818 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1819 ; AVX-NEXT:    retq
1820   %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>
1821   ret <8 x i16> %shuffle
1824 define <8 x i16> @shuffle_v8i16_ueuu123u(<8 x i16> %a, <8 x i16> %b) {
1825 ; SSE2-LABEL: shuffle_v8i16_ueuu123u:
1826 ; SSE2:       # %bb.0:
1827 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1828 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1829 ; SSE2-NEXT:    por %xmm1, %xmm0
1830 ; SSE2-NEXT:    retq
1832 ; SSSE3-LABEL: shuffle_v8i16_ueuu123u:
1833 ; SSSE3:       # %bb.0:
1834 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1835 ; SSSE3-NEXT:    retq
1837 ; SSE41-LABEL: shuffle_v8i16_ueuu123u:
1838 ; SSE41:       # %bb.0:
1839 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1840 ; SSE41-NEXT:    retq
1842 ; AVX-LABEL: shuffle_v8i16_ueuu123u:
1843 ; AVX:       # %bb.0:
1844 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
1845 ; AVX-NEXT:    retq
1846   %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>
1847   ret <8 x i16> %shuffle
1850 define <8 x i16> @shuffle_v8i16_56701234(<8 x i16> %a, <8 x i16> %b) {
1851 ; SSE2-LABEL: shuffle_v8i16_56701234:
1852 ; SSE2:       # %bb.0:
1853 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1854 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1855 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1856 ; SSE2-NEXT:    por %xmm1, %xmm0
1857 ; SSE2-NEXT:    retq
1859 ; SSSE3-LABEL: shuffle_v8i16_56701234:
1860 ; SSSE3:       # %bb.0:
1861 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1862 ; SSSE3-NEXT:    retq
1864 ; SSE41-LABEL: shuffle_v8i16_56701234:
1865 ; SSE41:       # %bb.0:
1866 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1867 ; SSE41-NEXT:    retq
1869 ; AVX-LABEL: shuffle_v8i16_56701234:
1870 ; AVX:       # %bb.0:
1871 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1872 ; AVX-NEXT:    retq
1873   %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>
1874   ret <8 x i16> %shuffle
1877 define <8 x i16> @shuffle_v8i16_u6uu123u(<8 x i16> %a, <8 x i16> %b) {
1878 ; SSE2-LABEL: shuffle_v8i16_u6uu123u:
1879 ; SSE2:       # %bb.0:
1880 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1881 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
1882 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1883 ; SSE2-NEXT:    por %xmm1, %xmm0
1884 ; SSE2-NEXT:    retq
1886 ; SSSE3-LABEL: shuffle_v8i16_u6uu123u:
1887 ; SSSE3:       # %bb.0:
1888 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1889 ; SSSE3-NEXT:    retq
1891 ; SSE41-LABEL: shuffle_v8i16_u6uu123u:
1892 ; SSE41:       # %bb.0:
1893 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1894 ; SSE41-NEXT:    retq
1896 ; AVX-LABEL: shuffle_v8i16_u6uu123u:
1897 ; AVX:       # %bb.0:
1898 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
1899 ; AVX-NEXT:    retq
1900   %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>
1901   ret <8 x i16> %shuffle
1904 define <8 x i16> @shuffle_v8i16_uuuu123u(<8 x i16> %a, <8 x i16> %b) {
1905 ; SSE-LABEL: shuffle_v8i16_uuuu123u:
1906 ; SSE:       # %bb.0:
1907 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1908 ; SSE-NEXT:    retq
1910 ; AVX-LABEL: shuffle_v8i16_uuuu123u:
1911 ; AVX:       # %bb.0:
1912 ; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]
1913 ; AVX-NEXT:    retq
1914   %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>
1915   ret <8 x i16> %shuffle
1918 define <8 x i16> @shuffle_v8i16_bcdef012(<8 x i16> %a, <8 x i16> %b) {
1919 ; SSE2-LABEL: shuffle_v8i16_bcdef012:
1920 ; SSE2:       # %bb.0:
1921 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1922 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
1923 ; SSE2-NEXT:    por %xmm1, %xmm0
1924 ; SSE2-NEXT:    retq
1926 ; SSSE3-LABEL: shuffle_v8i16_bcdef012:
1927 ; SSSE3:       # %bb.0:
1928 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1929 ; SSSE3-NEXT:    retq
1931 ; SSE41-LABEL: shuffle_v8i16_bcdef012:
1932 ; SSE41:       # %bb.0:
1933 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1934 ; SSE41-NEXT:    retq
1936 ; AVX-LABEL: shuffle_v8i16_bcdef012:
1937 ; AVX:       # %bb.0:
1938 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1939 ; AVX-NEXT:    retq
1940   %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>
1941   ret <8 x i16> %shuffle
1944 define <8 x i16> @shuffle_v8i16_ucdeuu1u(<8 x i16> %a, <8 x i16> %b) {
1945 ; SSE2-LABEL: shuffle_v8i16_ucdeuu1u:
1946 ; SSE2:       # %bb.0:
1947 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1948 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
1949 ; SSE2-NEXT:    por %xmm1, %xmm0
1950 ; SSE2-NEXT:    retq
1952 ; SSSE3-LABEL: shuffle_v8i16_ucdeuu1u:
1953 ; SSSE3:       # %bb.0:
1954 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1955 ; SSSE3-NEXT:    retq
1957 ; SSE41-LABEL: shuffle_v8i16_ucdeuu1u:
1958 ; SSE41:       # %bb.0:
1959 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1960 ; SSE41-NEXT:    retq
1962 ; AVX-LABEL: shuffle_v8i16_ucdeuu1u:
1963 ; AVX:       # %bb.0:
1964 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
1965 ; AVX-NEXT:    retq
1966   %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>
1967   ret <8 x i16> %shuffle
1970 define <8 x i16> @shuffle_v8i16_34567012(<8 x i16> %a, <8 x i16> %b) {
1971 ; SSE2-LABEL: shuffle_v8i16_34567012:
1972 ; SSE2:       # %bb.0:
1973 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1974 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1975 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
1976 ; SSE2-NEXT:    por %xmm1, %xmm0
1977 ; SSE2-NEXT:    retq
1979 ; SSSE3-LABEL: shuffle_v8i16_34567012:
1980 ; SSSE3:       # %bb.0:
1981 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1982 ; SSSE3-NEXT:    retq
1984 ; SSE41-LABEL: shuffle_v8i16_34567012:
1985 ; SSE41:       # %bb.0:
1986 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1987 ; SSE41-NEXT:    retq
1989 ; AVX-LABEL: shuffle_v8i16_34567012:
1990 ; AVX:       # %bb.0:
1991 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
1992 ; AVX-NEXT:    retq
1993   %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>
1994   ret <8 x i16> %shuffle
1997 define <8 x i16> @shuffle_v8i16_u456uu1u(<8 x i16> %a, <8 x i16> %b) {
1998 ; SSE2-LABEL: shuffle_v8i16_u456uu1u:
1999 ; SSE2:       # %bb.0:
2000 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2001 ; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
2002 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
2003 ; SSE2-NEXT:    por %xmm1, %xmm0
2004 ; SSE2-NEXT:    retq
2006 ; SSSE3-LABEL: shuffle_v8i16_u456uu1u:
2007 ; SSSE3:       # %bb.0:
2008 ; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
2009 ; SSSE3-NEXT:    retq
2011 ; SSE41-LABEL: shuffle_v8i16_u456uu1u:
2012 ; SSE41:       # %bb.0:
2013 ; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
2014 ; SSE41-NEXT:    retq
2016 ; AVX-LABEL: shuffle_v8i16_u456uu1u:
2017 ; AVX:       # %bb.0:
2018 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
2019 ; AVX-NEXT:    retq
2020   %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>
2021   ret <8 x i16> %shuffle
2024 define <8 x i16> @shuffle_v8i16_u456uuuu(<8 x i16> %a, <8 x i16> %b) {
2025 ; SSE-LABEL: shuffle_v8i16_u456uuuu:
2026 ; SSE:       # %bb.0:
2027 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
2028 ; SSE-NEXT:    retq
2030 ; AVX-LABEL: shuffle_v8i16_u456uuuu:
2031 ; AVX:       # %bb.0:
2032 ; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
2033 ; AVX-NEXT:    retq
2034   %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>
2035   ret <8 x i16> %shuffle
2038 define <8 x i16> @shuffle_v8i16_3456789a(<8 x i16> %a, <8 x i16> %b) {
2039 ; SSE2-LABEL: shuffle_v8i16_3456789a:
2040 ; SSE2:       # %bb.0:
2041 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
2042 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]
2043 ; SSE2-NEXT:    por %xmm1, %xmm0
2044 ; SSE2-NEXT:    retq
2046 ; SSSE3-LABEL: shuffle_v8i16_3456789a:
2047 ; SSSE3:       # %bb.0:
2048 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
2049 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2050 ; SSSE3-NEXT:    retq
2052 ; SSE41-LABEL: shuffle_v8i16_3456789a:
2053 ; SSE41:       # %bb.0:
2054 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
2055 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2056 ; SSE41-NEXT:    retq
2058 ; AVX-LABEL: shuffle_v8i16_3456789a:
2059 ; AVX:       # %bb.0:
2060 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
2061 ; AVX-NEXT:    retq
2062   %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>
2063   ret <8 x i16> %shuffle
2066 define <8 x i16> @shuffle_v8i16_u456uu9u(<8 x i16> %a, <8 x i16> %b) {
2067 ; SSE2-LABEL: shuffle_v8i16_u456uu9u:
2068 ; SSE2:       # %bb.0:
2069 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
2070 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]
2071 ; SSE2-NEXT:    por %xmm1, %xmm0
2072 ; SSE2-NEXT:    retq
2074 ; SSSE3-LABEL: shuffle_v8i16_u456uu9u:
2075 ; SSSE3:       # %bb.0:
2076 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
2077 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2078 ; SSSE3-NEXT:    retq
2080 ; SSE41-LABEL: shuffle_v8i16_u456uu9u:
2081 ; SSE41:       # %bb.0:
2082 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
2083 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2084 ; SSE41-NEXT:    retq
2086 ; AVX-LABEL: shuffle_v8i16_u456uu9u:
2087 ; AVX:       # %bb.0:
2088 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
2089 ; AVX-NEXT:    retq
2090   %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>
2091   ret <8 x i16> %shuffle
2094 define <8 x i16> @shuffle_v8i16_56789abc(<8 x i16> %a, <8 x i16> %b) {
2095 ; SSE2-LABEL: shuffle_v8i16_56789abc:
2096 ; SSE2:       # %bb.0:
2097 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2098 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9]
2099 ; SSE2-NEXT:    por %xmm1, %xmm0
2100 ; SSE2-NEXT:    retq
2102 ; SSSE3-LABEL: shuffle_v8i16_56789abc:
2103 ; SSSE3:       # %bb.0:
2104 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
2105 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2106 ; SSSE3-NEXT:    retq
2108 ; SSE41-LABEL: shuffle_v8i16_56789abc:
2109 ; SSE41:       # %bb.0:
2110 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
2111 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2112 ; SSE41-NEXT:    retq
2114 ; AVX-LABEL: shuffle_v8i16_56789abc:
2115 ; AVX:       # %bb.0:
2116 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
2117 ; AVX-NEXT:    retq
2118   %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>
2119   ret <8 x i16> %shuffle
2122 define <8 x i16> @shuffle_v8i16_u6uu9abu(<8 x i16> %a, <8 x i16> %b) {
2123 ; SSE2-LABEL: shuffle_v8i16_u6uu9abu:
2124 ; SSE2:       # %bb.0:
2125 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2126 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7,8,9]
2127 ; SSE2-NEXT:    por %xmm1, %xmm0
2128 ; SSE2-NEXT:    retq
2130 ; SSSE3-LABEL: shuffle_v8i16_u6uu9abu:
2131 ; SSSE3:       # %bb.0:
2132 ; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
2133 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2134 ; SSSE3-NEXT:    retq
2136 ; SSE41-LABEL: shuffle_v8i16_u6uu9abu:
2137 ; SSE41:       # %bb.0:
2138 ; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
2139 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2140 ; SSE41-NEXT:    retq
2142 ; AVX-LABEL: shuffle_v8i16_u6uu9abu:
2143 ; AVX:       # %bb.0:
2144 ; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
2145 ; AVX-NEXT:    retq
2146   %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>
2147   ret <8 x i16> %shuffle
2150 define <8 x i16> @shuffle_v8i16_0uuu1uuu(<8 x i16> %a) {
2151 ; SSE2-LABEL: shuffle_v8i16_0uuu1uuu:
2152 ; SSE2:       # %bb.0:
2153 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
2154 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]
2155 ; SSE2-NEXT:    retq
2157 ; SSSE3-LABEL: shuffle_v8i16_0uuu1uuu:
2158 ; SSSE3:       # %bb.0:
2159 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
2160 ; SSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]
2161 ; SSSE3-NEXT:    retq
2163 ; SSE41-LABEL: shuffle_v8i16_0uuu1uuu:
2164 ; SSE41:       # %bb.0:
2165 ; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
2166 ; SSE41-NEXT:    retq
2168 ; AVX-LABEL: shuffle_v8i16_0uuu1uuu:
2169 ; AVX:       # %bb.0:
2170 ; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
2171 ; AVX-NEXT:    retq
2172   %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>
2173   ret <8 x i16> %shuffle
2176 define <8 x i16> @shuffle_v8i16_0zzz1zzz(<8 x i16> %a) {
2177 ; SSE2-LABEL: shuffle_v8i16_0zzz1zzz:
2178 ; SSE2:       # %bb.0:
2179 ; SSE2-NEXT:    pxor %xmm1, %xmm1
2180 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2181 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2182 ; SSE2-NEXT:    retq
2184 ; SSSE3-LABEL: shuffle_v8i16_0zzz1zzz:
2185 ; SSSE3:       # %bb.0:
2186 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
2187 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2188 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2189 ; SSSE3-NEXT:    retq
2191 ; SSE41-LABEL: shuffle_v8i16_0zzz1zzz:
2192 ; SSE41:       # %bb.0:
2193 ; SSE41-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
2194 ; SSE41-NEXT:    retq
2196 ; AVX-LABEL: shuffle_v8i16_0zzz1zzz:
2197 ; AVX:       # %bb.0:
2198 ; AVX-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
2199 ; AVX-NEXT:    retq
2200   %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>
2201   ret <8 x i16> %shuffle
2204 define <8 x i16> @shuffle_v8i16_0u1u2u3u(<8 x i16> %a) {
2205 ; SSE2-LABEL: shuffle_v8i16_0u1u2u3u:
2206 ; SSE2:       # %bb.0:
2207 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
2208 ; SSE2-NEXT:    retq
2210 ; SSSE3-LABEL: shuffle_v8i16_0u1u2u3u:
2211 ; SSSE3:       # %bb.0:
2212 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
2213 ; SSSE3-NEXT:    retq
2215 ; SSE41-LABEL: shuffle_v8i16_0u1u2u3u:
2216 ; SSE41:       # %bb.0:
2217 ; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2218 ; SSE41-NEXT:    retq
2220 ; AVX-LABEL: shuffle_v8i16_0u1u2u3u:
2221 ; AVX:       # %bb.0:
2222 ; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2223 ; AVX-NEXT:    retq
2224   %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>
2225   ret <8 x i16> %shuffle
2228 define <8 x i16> @shuffle_v8i16_0z1z2z3z(<8 x i16> %a) {
2229 ; SSE2-LABEL: shuffle_v8i16_0z1z2z3z:
2230 ; SSE2:       # %bb.0:
2231 ; SSE2-NEXT:    pxor %xmm1, %xmm1
2232 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2233 ; SSE2-NEXT:    retq
2235 ; SSSE3-LABEL: shuffle_v8i16_0z1z2z3z:
2236 ; SSSE3:       # %bb.0:
2237 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
2238 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2239 ; SSSE3-NEXT:    retq
2241 ; SSE41-LABEL: shuffle_v8i16_0z1z2z3z:
2242 ; SSE41:       # %bb.0:
2243 ; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2244 ; SSE41-NEXT:    retq
2246 ; AVX-LABEL: shuffle_v8i16_0z1z2z3z:
2247 ; AVX:       # %bb.0:
2248 ; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2249 ; AVX-NEXT:    retq
2250   %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>
2251   ret <8 x i16> %shuffle
2254 define <8 x i16> @shuffle_v8i16_01100110(<8 x i16> %a) {
2255 ; SSE-LABEL: shuffle_v8i16_01100110:
2256 ; SSE:       # %bb.0:
2257 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2258 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
2259 ; SSE-NEXT:    retq
2261 ; AVX1-LABEL: shuffle_v8i16_01100110:
2262 ; AVX1:       # %bb.0:
2263 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2264 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
2265 ; AVX1-NEXT:    retq
2267 ; AVX2-SLOW-LABEL: shuffle_v8i16_01100110:
2268 ; AVX2-SLOW:       # %bb.0:
2269 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2270 ; AVX2-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm0
2271 ; AVX2-SLOW-NEXT:    retq
2273 ; AVX2-FAST-LABEL: shuffle_v8i16_01100110:
2274 ; AVX2-FAST:       # %bb.0:
2275 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]
2276 ; AVX2-FAST-NEXT:    retq
2278 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_01100110:
2279 ; AVX512VL-SLOW:       # %bb.0:
2280 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2281 ; AVX512VL-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm0
2282 ; AVX512VL-SLOW-NEXT:    retq
2284 ; AVX512VL-FAST-LABEL: shuffle_v8i16_01100110:
2285 ; AVX512VL-FAST:       # %bb.0:
2286 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]
2287 ; AVX512VL-FAST-NEXT:    retq
2289 ; XOPAVX1-LABEL: shuffle_v8i16_01100110:
2290 ; XOPAVX1:       # %bb.0:
2291 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2292 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
2293 ; XOPAVX1-NEXT:    retq
2295 ; XOPAVX2-LABEL: shuffle_v8i16_01100110:
2296 ; XOPAVX2:       # %bb.0:
2297 ; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2298 ; XOPAVX2-NEXT:    vpbroadcastq %xmm0, %xmm0
2299 ; XOPAVX2-NEXT:    retq
2300   %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>
2301   ret <8 x i16> %shuffle
2304 define <8 x i16> @shuffle_v8i16_01u0u110(<8 x i16> %a) {
2305 ; SSE-LABEL: shuffle_v8i16_01u0u110:
2306 ; SSE:       # %bb.0:
2307 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2308 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
2309 ; SSE-NEXT:    retq
2311 ; AVX1-LABEL: shuffle_v8i16_01u0u110:
2312 ; AVX1:       # %bb.0:
2313 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2314 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
2315 ; AVX1-NEXT:    retq
2317 ; AVX2-SLOW-LABEL: shuffle_v8i16_01u0u110:
2318 ; AVX2-SLOW:       # %bb.0:
2319 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2320 ; AVX2-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm0
2321 ; AVX2-SLOW-NEXT:    retq
2323 ; AVX2-FAST-LABEL: shuffle_v8i16_01u0u110:
2324 ; AVX2-FAST:       # %bb.0:
2325 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]
2326 ; AVX2-FAST-NEXT:    retq
2328 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_01u0u110:
2329 ; AVX512VL-SLOW:       # %bb.0:
2330 ; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2331 ; AVX512VL-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm0
2332 ; AVX512VL-SLOW-NEXT:    retq
2334 ; AVX512VL-FAST-LABEL: shuffle_v8i16_01u0u110:
2335 ; AVX512VL-FAST:       # %bb.0:
2336 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,2,3,0,1,0,1,2,3,2,3,0,1]
2337 ; AVX512VL-FAST-NEXT:    retq
2339 ; XOPAVX1-LABEL: shuffle_v8i16_01u0u110:
2340 ; XOPAVX1:       # %bb.0:
2341 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2342 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
2343 ; XOPAVX1-NEXT:    retq
2345 ; XOPAVX2-LABEL: shuffle_v8i16_01u0u110:
2346 ; XOPAVX2:       # %bb.0:
2347 ; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,1,0,4,5,6,7]
2348 ; XOPAVX2-NEXT:    vpbroadcastq %xmm0, %xmm0
2349 ; XOPAVX2-NEXT:    retq
2350   %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>
2351   ret <8 x i16> %shuffle
2354 define <8 x i16> @shuffle_v8i16_467uu675(<8 x i16> %a) {
2355 ; SSE-LABEL: shuffle_v8i16_467uu675:
2356 ; SSE:       # %bb.0:
2357 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]
2358 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
2359 ; SSE-NEXT:    retq
2361 ; AVX1-LABEL: shuffle_v8i16_467uu675:
2362 ; AVX1:       # %bb.0:
2363 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]
2364 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
2365 ; AVX1-NEXT:    retq
2367 ; AVX2-SLOW-LABEL: shuffle_v8i16_467uu675:
2368 ; AVX2-SLOW:       # %bb.0:
2369 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]
2370 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
2371 ; AVX2-SLOW-NEXT:    retq
2373 ; AVX2-FAST-LABEL: shuffle_v8i16_467uu675:
2374 ; AVX2-FAST:       # %bb.0:
2375 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,12,13,14,15,10,11,8,9,12,13,14,15,10,11]
2376 ; AVX2-FAST-NEXT:    retq
2378 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_467uu675:
2379 ; AVX512VL-SLOW:       # %bb.0:
2380 ; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]
2381 ; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
2382 ; AVX512VL-SLOW-NEXT:    retq
2384 ; AVX512VL-FAST-LABEL: shuffle_v8i16_467uu675:
2385 ; AVX512VL-FAST:       # %bb.0:
2386 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,12,13,14,15,10,11,8,9,12,13,14,15,10,11]
2387 ; AVX512VL-FAST-NEXT:    retq
2389 ; XOP-LABEL: shuffle_v8i16_467uu675:
2390 ; XOP:       # %bb.0:
2391 ; XOP-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]
2392 ; XOP-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
2393 ; XOP-NEXT:    retq
2394   %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>
2395   ret <8 x i16> %shuffle
2398 define <8 x i16> @shuffle_v8i16_10325476(<8 x i16> %a) {
2399 ; SSE-LABEL: shuffle_v8i16_10325476:
2400 ; SSE:       # %bb.0:
2401 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
2402 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
2403 ; SSE-NEXT:    retq
2405 ; AVX1-LABEL: shuffle_v8i16_10325476:
2406 ; AVX1:       # %bb.0:
2407 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
2408 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
2409 ; AVX1-NEXT:    retq
2411 ; AVX2-SLOW-LABEL: shuffle_v8i16_10325476:
2412 ; AVX2-SLOW:       # %bb.0:
2413 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
2414 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
2415 ; AVX2-SLOW-NEXT:    retq
2417 ; AVX2-FAST-LABEL: shuffle_v8i16_10325476:
2418 ; AVX2-FAST:       # %bb.0:
2419 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
2420 ; AVX2-FAST-NEXT:    retq
2422 ; AVX512VL-LABEL: shuffle_v8i16_10325476:
2423 ; AVX512VL:       # %bb.0:
2424 ; AVX512VL-NEXT:    vprold $16, %xmm0, %xmm0
2425 ; AVX512VL-NEXT:    retq
2427 ; XOP-LABEL: shuffle_v8i16_10325476:
2428 ; XOP:       # %bb.0:
2429 ; XOP-NEXT:    vprotd $16, %xmm0, %xmm0
2430 ; XOP-NEXT:    retq
2431   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
2432   ret <8 x i16> %shuffle
2435 define <8 x i16> @shuffle_v8i16_12305674(<8 x i16> %a) {
2436 ; SSE-LABEL: shuffle_v8i16_12305674:
2437 ; SSE:       # %bb.0:
2438 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]
2439 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]
2440 ; SSE-NEXT:    retq
2442 ; AVX1-LABEL: shuffle_v8i16_12305674:
2443 ; AVX1:       # %bb.0:
2444 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]
2445 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]
2446 ; AVX1-NEXT:    retq
2448 ; AVX2-SLOW-LABEL: shuffle_v8i16_12305674:
2449 ; AVX2-SLOW:       # %bb.0:
2450 ; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]
2451 ; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]
2452 ; AVX2-SLOW-NEXT:    retq
2454 ; AVX2-FAST-LABEL: shuffle_v8i16_12305674:
2455 ; AVX2-FAST:       # %bb.0:
2456 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,0,1,10,11,12,13,14,15,8,9]
2457 ; AVX2-FAST-NEXT:    retq
2459 ; AVX512VL-LABEL: shuffle_v8i16_12305674:
2460 ; AVX512VL:       # %bb.0:
2461 ; AVX512VL-NEXT:    vprolq $48, %xmm0, %xmm0
2462 ; AVX512VL-NEXT:    retq
2464 ; XOP-LABEL: shuffle_v8i16_12305674:
2465 ; XOP:       # %bb.0:
2466 ; XOP-NEXT:    vprotq $48, %xmm0, %xmm0
2467 ; XOP-NEXT:    retq
2468   %shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 5, i32 6, i32 7, i32 4>
2469   ret <8 x i16> %shuffle
2472 define <8 x i16> @shuffle_v8i16_02460246(<8 x i16> %a) {
2473 ; SSE2-LABEL: shuffle_v8i16_02460246:
2474 ; SSE2:       # %bb.0:
2475 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]
2476 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,4]
2477 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
2478 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,3,2,4,5,6,7]
2479 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5]
2480 ; SSE2-NEXT:    retq
2482 ; SSSE3-LABEL: shuffle_v8i16_02460246:
2483 ; SSSE3:       # %bb.0:
2484 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,0,1,4,5,8,9,12,13]
2485 ; SSSE3-NEXT:    retq
2487 ; SSE41-LABEL: shuffle_v8i16_02460246:
2488 ; SSE41:       # %bb.0:
2489 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,0,1,4,5,8,9,12,13]
2490 ; SSE41-NEXT:    retq
2492 ; AVX-LABEL: shuffle_v8i16_02460246:
2493 ; AVX:       # %bb.0:
2494 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,0,1,4,5,8,9,12,13]
2495 ; AVX-NEXT:    retq
2496   %shuffle = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 0, i32 2, i32 4, i32 6>
2497   ret <8 x i16> %shuffle
2500 define <8 x i16> @shuffle_v8i16_04040404(<8 x i16> %a) {
2501 ; SSE2-LABEL: shuffle_v8i16_04040404:
2502 ; SSE2:       # %bb.0:
2503 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,0]
2504 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]
2505 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,6,4]
2506 ; SSE2-NEXT:    retq
2508 ; SSSE3-LABEL: shuffle_v8i16_04040404:
2509 ; SSSE3:       # %bb.0:
2510 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,0,1,8,9,0,1,8,9,0,1,8,9]
2511 ; SSSE3-NEXT:    retq
2513 ; SSE41-LABEL: shuffle_v8i16_04040404:
2514 ; SSE41:       # %bb.0:
2515 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,0,1,8,9,0,1,8,9,0,1,8,9]
2516 ; SSE41-NEXT:    retq
2518 ; AVX-LABEL: shuffle_v8i16_04040404:
2519 ; AVX:       # %bb.0:
2520 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,0,1,8,9,0,1,8,9,0,1,8,9]
2521 ; AVX-NEXT:    retq
2522   %shuffle = shufflevector <8 x i16> %a, <8 x i16> undef, <8 x i32> <i32 0, i32 4, i32 0, i32 4, i32 0, i32 4, i32 0, i32 4>
2523   ret <8 x i16> %shuffle
2526 define <8 x i16> @shuffle_v8i16_02468ACE(<8 x i16> %a, <8 x i16> %b) {
2527 ; SSE2-LABEL: shuffle_v8i16_02468ACE:
2528 ; SSE2:       # %bb.0:
2529 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
2530 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
2531 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2532 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2533 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
2534 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2535 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2536 ; SSE2-NEXT:    retq
2538 ; SSSE3-LABEL: shuffle_v8i16_02468ACE:
2539 ; SSSE3:       # %bb.0:
2540 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2541 ; SSSE3-NEXT:    pshufb %xmm2, %xmm1
2542 ; SSSE3-NEXT:    pshufb %xmm2, %xmm0
2543 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2544 ; SSSE3-NEXT:    retq
2546 ; SSE41-LABEL: shuffle_v8i16_02468ACE:
2547 ; SSE41:       # %bb.0:
2548 ; SSE41-NEXT:    pxor %xmm2, %xmm2
2549 ; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2550 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2551 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
2552 ; SSE41-NEXT:    retq
2554 ; AVX1-LABEL: shuffle_v8i16_02468ACE:
2555 ; AVX1:       # %bb.0:
2556 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2557 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2558 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2559 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2560 ; AVX1-NEXT:    retq
2562 ; AVX2-LABEL: shuffle_v8i16_02468ACE:
2563 ; AVX2:       # %bb.0:
2564 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2565 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2566 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2567 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2568 ; AVX2-NEXT:    retq
2570 ; AVX512VL-LABEL: shuffle_v8i16_02468ACE:
2571 ; AVX512VL:       # %bb.0:
2572 ; AVX512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0
2573 ; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2574 ; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0
2575 ; AVX512VL-NEXT:    vzeroupper
2576 ; AVX512VL-NEXT:    retq
2578 ; XOP-LABEL: shuffle_v8i16_02468ACE:
2579 ; XOP:       # %bb.0:
2580 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],xmm1[0,1,4,5,8,9,12,13]
2581 ; XOP-NEXT:    retq
2582   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
2583   ret <8 x i16> %shuffle
2586 define <8 x i16> @shuffle_v8i16_048C048C(<8 x i16> %a, <8 x i16> %b) {
2587 ; SSE2-LABEL: shuffle_v8i16_048C048C:
2588 ; SSE2:       # %bb.0:
2589 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2590 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,0,2,4,5,6,7]
2591 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2592 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]
2593 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2594 ; SSE2-NEXT:    retq
2596 ; SSSE3-LABEL: shuffle_v8i16_048C048C:
2597 ; SSSE3:       # %bb.0:
2598 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2599 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,0,2,4,5,6,7]
2600 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2601 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]
2602 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2603 ; SSSE3-NEXT:    retq
2605 ; SSE41-LABEL: shuffle_v8i16_048C048C:
2606 ; SSE41:       # %bb.0:
2607 ; SSE41-NEXT:    pxor %xmm2, %xmm2
2608 ; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
2609 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
2610 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
2611 ; SSE41-NEXT:    packusdw %xmm0, %xmm0
2612 ; SSE41-NEXT:    retq
2614 ; AVX1-LABEL: shuffle_v8i16_048C048C:
2615 ; AVX1:       # %bb.0:
2616 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2617 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
2618 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
2619 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2620 ; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0
2621 ; AVX1-NEXT:    retq
2623 ; AVX2-LABEL: shuffle_v8i16_048C048C:
2624 ; AVX2:       # %bb.0:
2625 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2626 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
2627 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
2628 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2629 ; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0
2630 ; AVX2-NEXT:    retq
2632 ; AVX512VL-LABEL: shuffle_v8i16_048C048C:
2633 ; AVX512VL:       # %bb.0:
2634 ; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [3377734080528384,3377734080528384]
2635 ; AVX512VL-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
2636 ; AVX512VL-NEXT:    retq
2638 ; XOP-LABEL: shuffle_v8i16_048C048C:
2639 ; XOP:       # %bb.0:
2640 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9],xmm1[0,1,8,9],xmm0[0,1,8,9],xmm1[0,1,8,9]
2641 ; XOP-NEXT:    retq
2642   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 4, i32 8, i32 12, i32 0, i32 4, i32 8, i32 12>
2643   ret <8 x i16> %shuffle
2647 ; Shuffle to logical bit shifts
2649 define <8 x i16> @shuffle_v8i16_z0z2z4z6(<8 x i16> %a) {
2650 ; SSE-LABEL: shuffle_v8i16_z0z2z4z6:
2651 ; SSE:       # %bb.0:
2652 ; SSE-NEXT:    pslld $16, %xmm0
2653 ; SSE-NEXT:    retq
2655 ; AVX-LABEL: shuffle_v8i16_z0z2z4z6:
2656 ; AVX:       # %bb.0:
2657 ; AVX-NEXT:    vpslld $16, %xmm0, %xmm0
2658 ; AVX-NEXT:    retq
2659   %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>
2660   ret <8 x i16> %shuffle
2663 define <8 x i16> @shuffle_v8i16_zzz0zzz4(<8 x i16> %a) {
2664 ; SSE-LABEL: shuffle_v8i16_zzz0zzz4:
2665 ; SSE:       # %bb.0:
2666 ; SSE-NEXT:    psllq $48, %xmm0
2667 ; SSE-NEXT:    retq
2669 ; AVX-LABEL: shuffle_v8i16_zzz0zzz4:
2670 ; AVX:       # %bb.0:
2671 ; AVX-NEXT:    vpsllq $48, %xmm0, %xmm0
2672 ; AVX-NEXT:    retq
2673   %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>
2674   ret <8 x i16> %shuffle
2677 define <8 x i16> @shuffle_v8i16_zz01zX4X(<8 x i16> %a) {
2678 ; SSE-LABEL: shuffle_v8i16_zz01zX4X:
2679 ; SSE:       # %bb.0:
2680 ; SSE-NEXT:    psllq $32, %xmm0
2681 ; SSE-NEXT:    retq
2683 ; AVX-LABEL: shuffle_v8i16_zz01zX4X:
2684 ; AVX:       # %bb.0:
2685 ; AVX-NEXT:    vpsllq $32, %xmm0, %xmm0
2686 ; AVX-NEXT:    retq
2687   %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>
2688   ret <8 x i16> %shuffle
2691 define <8 x i16> @shuffle_v8i16_z0X2z456(<8 x i16> %a) {
2692 ; SSE-LABEL: shuffle_v8i16_z0X2z456:
2693 ; SSE:       # %bb.0:
2694 ; SSE-NEXT:    psllq $16, %xmm0
2695 ; SSE-NEXT:    retq
2697 ; AVX-LABEL: shuffle_v8i16_z0X2z456:
2698 ; AVX:       # %bb.0:
2699 ; AVX-NEXT:    vpsllq $16, %xmm0, %xmm0
2700 ; AVX-NEXT:    retq
2701   %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>
2702   ret <8 x i16> %shuffle
2705 define <8 x i16> @shuffle_v8i16_1z3zXz7z(<8 x i16> %a) {
2706 ; SSE-LABEL: shuffle_v8i16_1z3zXz7z:
2707 ; SSE:       # %bb.0:
2708 ; SSE-NEXT:    psrld $16, %xmm0
2709 ; SSE-NEXT:    retq
2711 ; AVX-LABEL: shuffle_v8i16_1z3zXz7z:
2712 ; AVX:       # %bb.0:
2713 ; AVX-NEXT:    vpsrld $16, %xmm0, %xmm0
2714 ; AVX-NEXT:    retq
2715   %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>
2716   ret <8 x i16> %shuffle
2719 define <8 x i16> @shuffle_v8i16_1X3z567z(<8 x i16> %a) {
2720 ; SSE-LABEL: shuffle_v8i16_1X3z567z:
2721 ; SSE:       # %bb.0:
2722 ; SSE-NEXT:    psrlq $16, %xmm0
2723 ; SSE-NEXT:    retq
2725 ; AVX-LABEL: shuffle_v8i16_1X3z567z:
2726 ; AVX:       # %bb.0:
2727 ; AVX-NEXT:    vpsrlq $16, %xmm0, %xmm0
2728 ; AVX-NEXT:    retq
2729   %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>
2730   ret <8 x i16> %shuffle
2733 define <8 x i16> @shuffle_v8i16_23zz67zz(<8 x i16> %a) {
2734 ; SSE-LABEL: shuffle_v8i16_23zz67zz:
2735 ; SSE:       # %bb.0:
2736 ; SSE-NEXT:    psrlq $32, %xmm0
2737 ; SSE-NEXT:    retq
2739 ; AVX-LABEL: shuffle_v8i16_23zz67zz:
2740 ; AVX:       # %bb.0:
2741 ; AVX-NEXT:    vpsrlq $32, %xmm0, %xmm0
2742 ; AVX-NEXT:    retq
2743   %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>
2744   ret <8 x i16> %shuffle
2747 define <8 x i16> @shuffle_v8i16_3zXXXzzz(<8 x i16> %a) {
2748 ; SSE-LABEL: shuffle_v8i16_3zXXXzzz:
2749 ; SSE:       # %bb.0:
2750 ; SSE-NEXT:    psrlq $48, %xmm0
2751 ; SSE-NEXT:    retq
2753 ; AVX-LABEL: shuffle_v8i16_3zXXXzzz:
2754 ; AVX:       # %bb.0:
2755 ; AVX-NEXT:    vpsrlq $48, %xmm0, %xmm0
2756 ; AVX-NEXT:    retq
2757   %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>
2758   ret <8 x i16> %shuffle
2761 define <8 x i16> @shuffle_v8i16_01u3zzuz(<8 x i16> %a) {
2762 ; SSE-LABEL: shuffle_v8i16_01u3zzuz:
2763 ; SSE:       # %bb.0:
2764 ; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
2765 ; SSE-NEXT:    retq
2767 ; AVX-LABEL: shuffle_v8i16_01u3zzuz:
2768 ; AVX:       # %bb.0:
2769 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
2770 ; AVX-NEXT:    retq
2771   %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>
2772   ret <8 x i16> %shuffle
2775 define <8 x i16> @shuffle_v8i16_0z234567(<8 x i16> %a) {
2776 ; SSE2-LABEL: shuffle_v8i16_0z234567:
2777 ; SSE2:       # %bb.0:
2778 ; SSE2-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2779 ; SSE2-NEXT:    retq
2781 ; SSSE3-LABEL: shuffle_v8i16_0z234567:
2782 ; SSSE3:       # %bb.0:
2783 ; SSSE3-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2784 ; SSSE3-NEXT:    retq
2786 ; SSE41-LABEL: shuffle_v8i16_0z234567:
2787 ; SSE41:       # %bb.0:
2788 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2789 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]
2790 ; SSE41-NEXT:    retq
2792 ; AVX-LABEL: shuffle_v8i16_0z234567:
2793 ; AVX:       # %bb.0:
2794 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2795 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]
2796 ; AVX-NEXT:    retq
2797   %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>
2798   ret <8 x i16> %shuffle
2801 define <8 x i16> @shuffle_v8i16_0zzzz5z7(<8 x i16> %a) {
2802 ; SSE2-LABEL: shuffle_v8i16_0zzzz5z7:
2803 ; SSE2:       # %bb.0:
2804 ; SSE2-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2805 ; SSE2-NEXT:    retq
2807 ; SSSE3-LABEL: shuffle_v8i16_0zzzz5z7:
2808 ; SSSE3:       # %bb.0:
2809 ; SSSE3-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2810 ; SSSE3-NEXT:    retq
2812 ; SSE41-LABEL: shuffle_v8i16_0zzzz5z7:
2813 ; SSE41:       # %bb.0:
2814 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2815 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]
2816 ; SSE41-NEXT:    retq
2818 ; AVX-LABEL: shuffle_v8i16_0zzzz5z7:
2819 ; AVX:       # %bb.0:
2820 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2821 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]
2822 ; AVX-NEXT:    retq
2823   %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>
2824   ret <8 x i16> %shuffle
2827 define <8 x i16> @shuffle_v8i16_0123456z(<8 x i16> %a) {
2828 ; SSE2-LABEL: shuffle_v8i16_0123456z:
2829 ; SSE2:       # %bb.0:
2830 ; SSE2-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2831 ; SSE2-NEXT:    retq
2833 ; SSSE3-LABEL: shuffle_v8i16_0123456z:
2834 ; SSSE3:       # %bb.0:
2835 ; SSSE3-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2836 ; SSSE3-NEXT:    retq
2838 ; SSE41-LABEL: shuffle_v8i16_0123456z:
2839 ; SSE41:       # %bb.0:
2840 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2841 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]
2842 ; SSE41-NEXT:    retq
2844 ; AVX-LABEL: shuffle_v8i16_0123456z:
2845 ; AVX:       # %bb.0:
2846 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2847 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]
2848 ; AVX-NEXT:    retq
2849   %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>
2850   ret <8 x i16> %shuffle
2853 define <8 x i16> @shuffle_v8i16_fu3ucc5u(<8 x i16> %a, <8 x i16> %b) {
2854 ; SSE-LABEL: shuffle_v8i16_fu3ucc5u:
2855 ; SSE:       # %bb.0:
2856 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2857 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2858 ; SSE-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2859 ; SSE-NEXT:    movdqa %xmm1, %xmm0
2860 ; SSE-NEXT:    retq
2862 ; AVX1-LABEL: shuffle_v8i16_fu3ucc5u:
2863 ; AVX1:       # %bb.0:
2864 ; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2865 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2866 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2867 ; AVX1-NEXT:    retq
2869 ; AVX2OR512VL-LABEL: shuffle_v8i16_fu3ucc5u:
2870 ; AVX2OR512VL:       # %bb.0:
2871 ; AVX2OR512VL-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2872 ; AVX2OR512VL-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2873 ; AVX2OR512VL-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2874 ; AVX2OR512VL-NEXT:    retq
2876 ; XOP-LABEL: shuffle_v8i16_fu3ucc5u:
2877 ; XOP:       # %bb.0:
2878 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm1[14,15,10,11],xmm0[6,7,8,9],xmm1[8,9,8,9],xmm0[10,11,12,13]
2879 ; XOP-NEXT:    retq
2880   %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>
2881   ret <8 x i16> %shuffle
2884 define <8 x i16> @shuffle_v8i16_8012345u(<8 x i16> %a) {
2885 ; SSE-LABEL: shuffle_v8i16_8012345u:
2886 ; SSE:       # %bb.0:
2887 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2888 ; SSE-NEXT:    retq
2890 ; AVX-LABEL: shuffle_v8i16_8012345u:
2891 ; AVX:       # %bb.0:
2892 ; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2893 ; AVX-NEXT:    retq
2894   %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>
2896   ret <8 x i16> %shuffle
2899 ; PR40306
2900 define <8 x i16> @shuffle_v8i16_9zzzuuuu(<8 x i16> %x) {
2901 ; SSE-LABEL: shuffle_v8i16_9zzzuuuu:
2902 ; SSE:       # %bb.0:
2903 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
2904 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2905 ; SSE-NEXT:    retq
2907 ; AVX1-LABEL: shuffle_v8i16_9zzzuuuu:
2908 ; AVX1:       # %bb.0:
2909 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
2910 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2911 ; AVX1-NEXT:    retq
2913 ; AVX2-SLOW-LABEL: shuffle_v8i16_9zzzuuuu:
2914 ; AVX2-SLOW:       # %bb.0:
2915 ; AVX2-SLOW-NEXT:    vpbroadcastd %xmm0, %xmm0
2916 ; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2917 ; AVX2-SLOW-NEXT:    retq
2919 ; AVX2-FAST-LABEL: shuffle_v8i16_9zzzuuuu:
2920 ; AVX2-FAST:       # %bb.0:
2921 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2922 ; AVX2-FAST-NEXT:    retq
2924 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_9zzzuuuu:
2925 ; AVX512VL-SLOW:       # %bb.0:
2926 ; AVX512VL-SLOW-NEXT:    vbroadcastss %xmm0, %xmm0
2927 ; AVX512VL-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2928 ; AVX512VL-SLOW-NEXT:    retq
2930 ; AVX512VL-FAST-LABEL: shuffle_v8i16_9zzzuuuu:
2931 ; AVX512VL-FAST:       # %bb.0:
2932 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2933 ; AVX512VL-FAST-NEXT:    retq
2935 ; XOP-LABEL: shuffle_v8i16_9zzzuuuu:
2936 ; XOP:       # %bb.0:
2937 ; XOP-NEXT:    extrq {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]
2938 ; XOP-NEXT:    retq
2939   %r = shufflevector <8 x i16> zeroinitializer, <8 x i16> %x, <8 x i32> <i32 9, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
2940   ret <8 x i16> %r
2943 ; PR40318
2944 define <8 x i16> @shuffle_v8i16_2zzzuuuu(<8 x i16> %x) {
2945 ; SSE-LABEL: shuffle_v8i16_2zzzuuuu:
2946 ; SSE:       # %bb.0:
2947 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
2948 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2949 ; SSE-NEXT:    retq
2951 ; AVX1-LABEL: shuffle_v8i16_2zzzuuuu:
2952 ; AVX1:       # %bb.0:
2953 ; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
2954 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2955 ; AVX1-NEXT:    retq
2957 ; AVX2-SLOW-LABEL: shuffle_v8i16_2zzzuuuu:
2958 ; AVX2-SLOW:       # %bb.0:
2959 ; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
2960 ; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2961 ; AVX2-SLOW-NEXT:    retq
2963 ; AVX2-FAST-LABEL: shuffle_v8i16_2zzzuuuu:
2964 ; AVX2-FAST:       # %bb.0:
2965 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2966 ; AVX2-FAST-NEXT:    retq
2968 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_2zzzuuuu:
2969 ; AVX512VL-SLOW:       # %bb.0:
2970 ; AVX512VL-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
2971 ; AVX512VL-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2972 ; AVX512VL-SLOW-NEXT:    retq
2974 ; AVX512VL-FAST-LABEL: shuffle_v8i16_2zzzuuuu:
2975 ; AVX512VL-FAST:       # %bb.0:
2976 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
2977 ; AVX512VL-FAST-NEXT:    retq
2979 ; XOP-LABEL: shuffle_v8i16_2zzzuuuu:
2980 ; XOP:       # %bb.0:
2981 ; XOP-NEXT:    extrq {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]
2982 ; XOP-NEXT:    retq
2983   %r = shufflevector <8 x i16> %x, <8 x i16> zeroinitializer, <8 x i32> <i32 2, i32 9, i32 10, i32 11, i32 undef, i32 undef, i32 undef, i32 undef>
2984   ret <8 x i16> %r
2987 define <8 x i16> @shuffle_v8i16_3uu6zzzz(<8 x i16> %x) {
2988 ; SSE-LABEL: shuffle_v8i16_3uu6zzzz:
2989 ; SSE:       # %bb.0:
2990 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2991 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
2992 ; SSE-NEXT:    retq
2994 ; AVX1-LABEL: shuffle_v8i16_3uu6zzzz:
2995 ; AVX1:       # %bb.0:
2996 ; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2997 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
2998 ; AVX1-NEXT:    retq
3000 ; AVX2-SLOW-LABEL: shuffle_v8i16_3uu6zzzz:
3001 ; AVX2-SLOW:       # %bb.0:
3002 ; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3003 ; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3004 ; AVX2-SLOW-NEXT:    retq
3006 ; AVX2-FAST-LABEL: shuffle_v8i16_3uu6zzzz:
3007 ; AVX2-FAST:       # %bb.0:
3008 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13],zero,zero,zero,zero,zero,zero,zero,zero
3009 ; AVX2-FAST-NEXT:    retq
3011 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_3uu6zzzz:
3012 ; AVX512VL-SLOW:       # %bb.0:
3013 ; AVX512VL-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3014 ; AVX512VL-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3015 ; AVX512VL-SLOW-NEXT:    retq
3017 ; AVX512VL-FAST-LABEL: shuffle_v8i16_3uu6zzzz:
3018 ; AVX512VL-FAST:       # %bb.0:
3019 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13],zero,zero,zero,zero,zero,zero,zero,zero
3020 ; AVX512VL-FAST-NEXT:    retq
3022 ; XOP-LABEL: shuffle_v8i16_3uu6zzzz:
3023 ; XOP:       # %bb.0:
3024 ; XOP-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3025 ; XOP-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3026 ; XOP-NEXT:    retq
3027   %r = shufflevector <8 x i16> %x, <8 x i16> zeroinitializer, <8 x i32> <i32 3, i32 undef, i32 undef, i32 6, i32 8, i32 8, i32 8, i32 8>
3028   ret <8 x i16> %r
3031 define <8 x i16> @mask_v8i16_012345ef(<8 x i16> %a, <8 x i16> %b) {
3032 ; SSE2-LABEL: mask_v8i16_012345ef:
3033 ; SSE2:       # %bb.0:
3034 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
3035 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
3036 ; SSE2-NEXT:    movaps %xmm1, %xmm0
3037 ; SSE2-NEXT:    retq
3039 ; SSSE3-LABEL: mask_v8i16_012345ef:
3040 ; SSSE3:       # %bb.0:
3041 ; SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
3042 ; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
3043 ; SSSE3-NEXT:    movaps %xmm1, %xmm0
3044 ; SSSE3-NEXT:    retq
3046 ; SSE41-LABEL: mask_v8i16_012345ef:
3047 ; SSE41:       # %bb.0:
3048 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]
3049 ; SSE41-NEXT:    retq
3051 ; AVX-LABEL: mask_v8i16_012345ef:
3052 ; AVX:       # %bb.0:
3053 ; AVX-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]
3054 ; AVX-NEXT:    retq
3055   %1 = bitcast <8 x i16> %a to <2 x i64>
3056   %2 = bitcast <8 x i16> %b to <2 x i64>
3057   %3 = and <2 x i64> %1, <i64 0, i64 -4294967296>
3058   %4 = and <2 x i64> %2, <i64 -1, i64 4294967295>
3059   %5 = or <2 x i64> %4, %3
3060   %6 = bitcast <2 x i64> %5 to <8 x i16>
3061   ret <8 x i16> %6
3064 define <8 x i16> @insert_dup_mem_v8i16_i32(i32* %ptr) {
3065 ; SSE-LABEL: insert_dup_mem_v8i16_i32:
3066 ; SSE:       # %bb.0:
3067 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3068 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3069 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3070 ; SSE-NEXT:    retq
3072 ; AVX1-LABEL: insert_dup_mem_v8i16_i32:
3073 ; AVX1:       # %bb.0:
3074 ; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3075 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3076 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3077 ; AVX1-NEXT:    retq
3079 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_i32:
3080 ; AVX2OR512VL:       # %bb.0:
3081 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3082 ; AVX2OR512VL-NEXT:    retq
3084 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_i32:
3085 ; XOPAVX1:       # %bb.0:
3086 ; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3087 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3088 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3089 ; XOPAVX1-NEXT:    retq
3091 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_i32:
3092 ; XOPAVX2:       # %bb.0:
3093 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3094 ; XOPAVX2-NEXT:    retq
3095   %tmp = load i32, i32* %ptr, align 4
3096   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0
3097   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
3098   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> zeroinitializer
3099   ret <8 x i16> %tmp3
3102 define <8 x i16> @insert_dup_mem_v8i16_sext_i16(i16* %ptr) {
3103 ; SSE-LABEL: insert_dup_mem_v8i16_sext_i16:
3104 ; SSE:       # %bb.0:
3105 ; SSE-NEXT:    movzwl (%rdi), %eax
3106 ; SSE-NEXT:    movd %eax, %xmm0
3107 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3108 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3109 ; SSE-NEXT:    retq
3111 ; AVX1-LABEL: insert_dup_mem_v8i16_sext_i16:
3112 ; AVX1:       # %bb.0:
3113 ; AVX1-NEXT:    movzwl (%rdi), %eax
3114 ; AVX1-NEXT:    vmovd %eax, %xmm0
3115 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3116 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3117 ; AVX1-NEXT:    retq
3119 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_sext_i16:
3120 ; AVX2OR512VL:       # %bb.0:
3121 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3122 ; AVX2OR512VL-NEXT:    retq
3124 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_sext_i16:
3125 ; XOPAVX1:       # %bb.0:
3126 ; XOPAVX1-NEXT:    movzwl (%rdi), %eax
3127 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3128 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3129 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3130 ; XOPAVX1-NEXT:    retq
3132 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_sext_i16:
3133 ; XOPAVX2:       # %bb.0:
3134 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3135 ; XOPAVX2-NEXT:    retq
3136   %tmp = load i16, i16* %ptr, align 2
3137   %tmp1 = sext i16 %tmp to i32
3138   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 0
3139   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
3140   %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> undef, <8 x i32> zeroinitializer
3141   ret <8 x i16> %tmp4
3144 define <8 x i16> @insert_dup_elt1_mem_v8i16_i32(i32* %ptr) {
3145 ; SSE-LABEL: insert_dup_elt1_mem_v8i16_i32:
3146 ; SSE:       # %bb.0:
3147 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3148 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3149 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3150 ; SSE-NEXT:    retq
3152 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_i32:
3153 ; AVX1:       # %bb.0:
3154 ; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3155 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3156 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3157 ; AVX1-NEXT:    retq
3159 ; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v8i16_i32:
3160 ; AVX2OR512VL:       # %bb.0:
3161 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3162 ; AVX2OR512VL-NEXT:    retq
3164 ; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_i32:
3165 ; XOPAVX1:       # %bb.0:
3166 ; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3167 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3168 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3169 ; XOPAVX1-NEXT:    retq
3171 ; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_i32:
3172 ; XOPAVX2:       # %bb.0:
3173 ; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3174 ; XOPAVX2-NEXT:    retq
3175   %tmp = load i32, i32* %ptr, align 4
3176   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0
3177   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
3178   %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>
3179   ret <8 x i16> %tmp3
3182 define <8 x i16> @insert_dup_elt3_mem_v8i16_i32(i32* %ptr) {
3183 ; SSE2-LABEL: insert_dup_elt3_mem_v8i16_i32:
3184 ; SSE2:       # %bb.0:
3185 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3186 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3187 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3188 ; SSE2-NEXT:    retq
3190 ; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_i32:
3191 ; SSSE3:       # %bb.0:
3192 ; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3193 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3194 ; SSSE3-NEXT:    retq
3196 ; SSE41-LABEL: insert_dup_elt3_mem_v8i16_i32:
3197 ; SSE41:       # %bb.0:
3198 ; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3199 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3200 ; SSE41-NEXT:    retq
3202 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_i32:
3203 ; AVX1:       # %bb.0:
3204 ; AVX1-NEXT:    vbroadcastss (%rdi), %xmm0
3205 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3206 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3207 ; AVX1-NEXT:    retq
3209 ; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v8i16_i32:
3210 ; AVX2OR512VL:       # %bb.0:
3211 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3212 ; AVX2OR512VL-NEXT:    retq
3214 ; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_i32:
3215 ; XOPAVX1:       # %bb.0:
3216 ; XOPAVX1-NEXT:    vbroadcastss (%rdi), %xmm0
3217 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3218 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3219 ; XOPAVX1-NEXT:    retq
3221 ; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_i32:
3222 ; XOPAVX2:       # %bb.0:
3223 ; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3224 ; XOPAVX2-NEXT:    retq
3225   %tmp = load i32, i32* %ptr, align 4
3226   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 1
3227   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
3228   %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>
3229   ret <8 x i16> %tmp3
3232 define <8 x i16> @insert_dup_elt1_mem_v8i16_sext_i16(i16* %ptr) {
3233 ; SSE-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3234 ; SSE:       # %bb.0:
3235 ; SSE-NEXT:    movswl (%rdi), %eax
3236 ; SSE-NEXT:    movd %eax, %xmm0
3237 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3238 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3239 ; SSE-NEXT:    retq
3241 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3242 ; AVX1:       # %bb.0:
3243 ; AVX1-NEXT:    movswl (%rdi), %eax
3244 ; AVX1-NEXT:    vmovd %eax, %xmm0
3245 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3246 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3247 ; AVX1-NEXT:    retq
3249 ; AVX2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3250 ; AVX2:       # %bb.0:
3251 ; AVX2-NEXT:    movswl (%rdi), %eax
3252 ; AVX2-NEXT:    shrl $16, %eax
3253 ; AVX2-NEXT:    vmovd %eax, %xmm0
3254 ; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3255 ; AVX2-NEXT:    retq
3257 ; AVX512VL-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3258 ; AVX512VL:       # %bb.0:
3259 ; AVX512VL-NEXT:    movswl (%rdi), %eax
3260 ; AVX512VL-NEXT:    shrl $16, %eax
3261 ; AVX512VL-NEXT:    vpbroadcastw %eax, %xmm0
3262 ; AVX512VL-NEXT:    retq
3264 ; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3265 ; XOPAVX1:       # %bb.0:
3266 ; XOPAVX1-NEXT:    movswl (%rdi), %eax
3267 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3268 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3269 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3270 ; XOPAVX1-NEXT:    retq
3272 ; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3273 ; XOPAVX2:       # %bb.0:
3274 ; XOPAVX2-NEXT:    movswl (%rdi), %eax
3275 ; XOPAVX2-NEXT:    shrl $16, %eax
3276 ; XOPAVX2-NEXT:    vmovd %eax, %xmm0
3277 ; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3278 ; XOPAVX2-NEXT:    retq
3279   %tmp = load i16, i16* %ptr, align 2
3280   %tmp1 = sext i16 %tmp to i32
3281   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 0
3282   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
3283   %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>
3284   ret <8 x i16> %tmp4
3287 define <8 x i16> @insert_dup_elt3_mem_v8i16_sext_i16(i16* %ptr) {
3288 ; SSE2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3289 ; SSE2:       # %bb.0:
3290 ; SSE2-NEXT:    movswl (%rdi), %eax
3291 ; SSE2-NEXT:    movd %eax, %xmm0
3292 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3293 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3294 ; SSE2-NEXT:    retq
3296 ; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3297 ; SSSE3:       # %bb.0:
3298 ; SSSE3-NEXT:    movswl (%rdi), %eax
3299 ; SSSE3-NEXT:    movd %eax, %xmm0
3300 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3301 ; SSSE3-NEXT:    retq
3303 ; SSE41-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3304 ; SSE41:       # %bb.0:
3305 ; SSE41-NEXT:    movswl (%rdi), %eax
3306 ; SSE41-NEXT:    movd %eax, %xmm0
3307 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3308 ; SSE41-NEXT:    retq
3310 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3311 ; AVX1:       # %bb.0:
3312 ; AVX1-NEXT:    movswl (%rdi), %eax
3313 ; AVX1-NEXT:    vmovd %eax, %xmm0
3314 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3315 ; AVX1-NEXT:    retq
3317 ; AVX2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3318 ; AVX2:       # %bb.0:
3319 ; AVX2-NEXT:    movswl (%rdi), %eax
3320 ; AVX2-NEXT:    shrl $16, %eax
3321 ; AVX2-NEXT:    vmovd %eax, %xmm0
3322 ; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3323 ; AVX2-NEXT:    retq
3325 ; AVX512VL-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3326 ; AVX512VL:       # %bb.0:
3327 ; AVX512VL-NEXT:    movswl (%rdi), %eax
3328 ; AVX512VL-NEXT:    shrl $16, %eax
3329 ; AVX512VL-NEXT:    vpbroadcastw %eax, %xmm0
3330 ; AVX512VL-NEXT:    retq
3332 ; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3333 ; XOPAVX1:       # %bb.0:
3334 ; XOPAVX1-NEXT:    movswl (%rdi), %eax
3335 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3336 ; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3337 ; XOPAVX1-NEXT:    retq
3339 ; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3340 ; XOPAVX2:       # %bb.0:
3341 ; XOPAVX2-NEXT:    movswl (%rdi), %eax
3342 ; XOPAVX2-NEXT:    shrl $16, %eax
3343 ; XOPAVX2-NEXT:    vmovd %eax, %xmm0
3344 ; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3345 ; XOPAVX2-NEXT:    retq
3346   %tmp = load i16, i16* %ptr, align 2
3347   %tmp1 = sext i16 %tmp to i32
3348   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 1
3349   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
3350   %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>
3351   ret <8 x i16> %tmp4
3354 define <8 x i16> @insert_dup_mem_v8i16_i64(i64* %ptr) {
3355 ; SSE-LABEL: insert_dup_mem_v8i16_i64:
3356 ; SSE:       # %bb.0:
3357 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3358 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3359 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3360 ; SSE-NEXT:    retq
3362 ; AVX1-LABEL: insert_dup_mem_v8i16_i64:
3363 ; AVX1:       # %bb.0:
3364 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3365 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3366 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3367 ; AVX1-NEXT:    retq
3369 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_i64:
3370 ; AVX2OR512VL:       # %bb.0:
3371 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3372 ; AVX2OR512VL-NEXT:    retq
3374 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_i64:
3375 ; XOPAVX1:       # %bb.0:
3376 ; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3377 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3378 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3379 ; XOPAVX1-NEXT:    retq
3381 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_i64:
3382 ; XOPAVX2:       # %bb.0:
3383 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3384 ; XOPAVX2-NEXT:    retq
3385   %tmp = load i64, i64* %ptr, align 4
3386   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0
3387   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3388   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> zeroinitializer
3389   ret <8 x i16> %tmp3
3392 define <8 x i16> @insert_dup_elt1_mem_v8i16_i64(i64* %ptr) {
3393 ; SSE-LABEL: insert_dup_elt1_mem_v8i16_i64:
3394 ; SSE:       # %bb.0:
3395 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3396 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3397 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3398 ; SSE-NEXT:    retq
3400 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_i64:
3401 ; AVX1:       # %bb.0:
3402 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3403 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3404 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3405 ; AVX1-NEXT:    retq
3407 ; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v8i16_i64:
3408 ; AVX2OR512VL:       # %bb.0:
3409 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3410 ; AVX2OR512VL-NEXT:    retq
3412 ; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_i64:
3413 ; XOPAVX1:       # %bb.0:
3414 ; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3415 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3416 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3417 ; XOPAVX1-NEXT:    retq
3419 ; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_i64:
3420 ; XOPAVX2:       # %bb.0:
3421 ; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3422 ; XOPAVX2-NEXT:    retq
3423   %tmp = load i64, i64* %ptr, align 4
3424   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0
3425   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3426   %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>
3427   ret <8 x i16> %tmp3
3430 define <8 x i16> @insert_dup_elt3_mem_v8i16_i64(i64* %ptr) {
3431 ; SSE-LABEL: insert_dup_elt3_mem_v8i16_i64:
3432 ; SSE:       # %bb.0:
3433 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3434 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3435 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3436 ; SSE-NEXT:    retq
3438 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_i64:
3439 ; AVX1:       # %bb.0:
3440 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3441 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3442 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3443 ; AVX1-NEXT:    retq
3445 ; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v8i16_i64:
3446 ; AVX2OR512VL:       # %bb.0:
3447 ; AVX2OR512VL-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3448 ; AVX2OR512VL-NEXT:    retq
3450 ; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_i64:
3451 ; XOPAVX1:       # %bb.0:
3452 ; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3453 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3454 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3455 ; XOPAVX1-NEXT:    retq
3457 ; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_i64:
3458 ; XOPAVX2:       # %bb.0:
3459 ; XOPAVX2-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3460 ; XOPAVX2-NEXT:    retq
3461   %tmp = load i64, i64* %ptr, align 4
3462   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0
3463   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3464   %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>
3465   ret <8 x i16> %tmp3
3468 define <8 x i16> @insert_dup_elt7_mem_v8i16_i64(i64* %ptr) {
3469 ; SSE2-LABEL: insert_dup_elt7_mem_v8i16_i64:
3470 ; SSE2:       # %bb.0:
3471 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3472 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
3473 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]
3474 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
3475 ; SSE2-NEXT:    retq
3477 ; SSSE3-LABEL: insert_dup_elt7_mem_v8i16_i64:
3478 ; SSSE3:       # %bb.0:
3479 ; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3480 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]
3481 ; SSSE3-NEXT:    retq
3483 ; SSE41-LABEL: insert_dup_elt7_mem_v8i16_i64:
3484 ; SSE41:       # %bb.0:
3485 ; SSE41-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3486 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]
3487 ; SSE41-NEXT:    retq
3489 ; AVX1-LABEL: insert_dup_elt7_mem_v8i16_i64:
3490 ; AVX1:       # %bb.0:
3491 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]
3492 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]
3493 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
3494 ; AVX1-NEXT:    retq
3496 ; AVX2OR512VL-LABEL: insert_dup_elt7_mem_v8i16_i64:
3497 ; AVX2OR512VL:       # %bb.0:
3498 ; AVX2OR512VL-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3499 ; AVX2OR512VL-NEXT:    retq
3501 ; XOPAVX1-LABEL: insert_dup_elt7_mem_v8i16_i64:
3502 ; XOPAVX1:       # %bb.0:
3503 ; XOPAVX1-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]
3504 ; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]
3505 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
3506 ; XOPAVX1-NEXT:    retq
3508 ; XOPAVX2-LABEL: insert_dup_elt7_mem_v8i16_i64:
3509 ; XOPAVX2:       # %bb.0:
3510 ; XOPAVX2-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3511 ; XOPAVX2-NEXT:    retq
3512   %tmp = load i64, i64* %ptr, align 4
3513   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 1
3514   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3515   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
3516   ret <8 x i16> %tmp3
3519 define <8 x i16> @insert_dup_mem_v8i16_sext_i16_i64(i16* %ptr) {
3520 ; SSE-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3521 ; SSE:       # %bb.0:
3522 ; SSE-NEXT:    movzwl (%rdi), %eax
3523 ; SSE-NEXT:    movd %eax, %xmm0
3524 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3525 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3526 ; SSE-NEXT:    retq
3528 ; AVX1-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3529 ; AVX1:       # %bb.0:
3530 ; AVX1-NEXT:    movzwl (%rdi), %eax
3531 ; AVX1-NEXT:    vmovd %eax, %xmm0
3532 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3533 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3534 ; AVX1-NEXT:    retq
3536 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3537 ; AVX2OR512VL:       # %bb.0:
3538 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3539 ; AVX2OR512VL-NEXT:    retq
3541 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3542 ; XOPAVX1:       # %bb.0:
3543 ; XOPAVX1-NEXT:    movzwl (%rdi), %eax
3544 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3545 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3546 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3547 ; XOPAVX1-NEXT:    retq
3549 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3550 ; XOPAVX2:       # %bb.0:
3551 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3552 ; XOPAVX2-NEXT:    retq
3553   %tmp = load i16, i16* %ptr, align 2
3554   %tmp1 = sext i16 %tmp to i64
3555   %tmp2 = insertelement <2 x i64> zeroinitializer, i64 %tmp1, i32 0
3556   %tmp3 = bitcast <2 x i64> %tmp2 to <8 x i16>
3557   %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> undef, <8 x i32> zeroinitializer
3558   ret <8 x i16> %tmp4