Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-shuffle-128-v8.ll
blobcd68a3093bb16b42e251f8ad16aff7b856f2800e
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:    vshufps {{.*#+}} 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:    vshufps {{.*#+}} 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:    vshufps {{.*#+}} 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:    vshufps {{.*#+}} 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:    pslld $16, %xmm1
2530 ; SSE2-NEXT:    psrad $16, %xmm1
2531 ; SSE2-NEXT:    pslld $16, %xmm0
2532 ; SSE2-NEXT:    psrad $16, %xmm0
2533 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
2534 ; SSE2-NEXT:    retq
2536 ; SSSE3-LABEL: shuffle_v8i16_02468ACE:
2537 ; SSSE3:       # %bb.0:
2538 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2539 ; SSSE3-NEXT:    pshufb %xmm2, %xmm1
2540 ; SSSE3-NEXT:    pshufb %xmm2, %xmm0
2541 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2542 ; SSSE3-NEXT:    retq
2544 ; SSE41-LABEL: shuffle_v8i16_02468ACE:
2545 ; SSE41:       # %bb.0:
2546 ; SSE41-NEXT:    pxor %xmm2, %xmm2
2547 ; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2548 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2549 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
2550 ; SSE41-NEXT:    retq
2552 ; AVX1-LABEL: shuffle_v8i16_02468ACE:
2553 ; AVX1:       # %bb.0:
2554 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2555 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2556 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2557 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2558 ; AVX1-NEXT:    retq
2560 ; AVX2-LABEL: shuffle_v8i16_02468ACE:
2561 ; AVX2:       # %bb.0:
2562 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2563 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2564 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2565 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2566 ; AVX2-NEXT:    retq
2568 ; AVX512VL-LABEL: shuffle_v8i16_02468ACE:
2569 ; AVX512VL:       # %bb.0:
2570 ; AVX512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0
2571 ; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2572 ; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0
2573 ; AVX512VL-NEXT:    vzeroupper
2574 ; AVX512VL-NEXT:    retq
2576 ; XOP-LABEL: shuffle_v8i16_02468ACE:
2577 ; XOP:       # %bb.0:
2578 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],xmm1[0,1,4,5,8,9,12,13]
2579 ; XOP-NEXT:    retq
2580   %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>
2581   ret <8 x i16> %shuffle
2584 define <8 x i16> @shuffle_v8i16_048C048C(<8 x i16> %a, <8 x i16> %b) {
2585 ; SSE2-LABEL: shuffle_v8i16_048C048C:
2586 ; SSE2:       # %bb.0:
2587 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2588 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,0,2,4,5,6,7]
2589 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2590 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]
2591 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2592 ; SSE2-NEXT:    retq
2594 ; SSSE3-LABEL: shuffle_v8i16_048C048C:
2595 ; SSSE3:       # %bb.0:
2596 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2597 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,0,2,4,5,6,7]
2598 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2599 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]
2600 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2601 ; SSSE3-NEXT:    retq
2603 ; SSE41-LABEL: shuffle_v8i16_048C048C:
2604 ; SSE41:       # %bb.0:
2605 ; SSE41-NEXT:    pxor %xmm2, %xmm2
2606 ; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
2607 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
2608 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
2609 ; SSE41-NEXT:    packusdw %xmm0, %xmm0
2610 ; SSE41-NEXT:    retq
2612 ; AVX1-LABEL: shuffle_v8i16_048C048C:
2613 ; AVX1:       # %bb.0:
2614 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2615 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
2616 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
2617 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2618 ; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0
2619 ; AVX1-NEXT:    retq
2621 ; AVX2-LABEL: shuffle_v8i16_048C048C:
2622 ; AVX2:       # %bb.0:
2623 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2624 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7]
2625 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
2626 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2627 ; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0
2628 ; AVX2-NEXT:    retq
2630 ; AVX512VL-LABEL: shuffle_v8i16_048C048C:
2631 ; AVX512VL:       # %bb.0:
2632 ; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [0,4,8,12,0,4,8,12]
2633 ; AVX512VL-NEXT:    vpermt2w %xmm1, %xmm2, %xmm0
2634 ; AVX512VL-NEXT:    retq
2636 ; XOP-LABEL: shuffle_v8i16_048C048C:
2637 ; XOP:       # %bb.0:
2638 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9],xmm1[0,1,8,9],xmm0[0,1,8,9],xmm1[0,1,8,9]
2639 ; XOP-NEXT:    retq
2640   %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>
2641   ret <8 x i16> %shuffle
2645 ; Shuffle to logical bit shifts
2647 define <8 x i16> @shuffle_v8i16_z0z2z4z6(<8 x i16> %a) {
2648 ; SSE-LABEL: shuffle_v8i16_z0z2z4z6:
2649 ; SSE:       # %bb.0:
2650 ; SSE-NEXT:    pslld $16, %xmm0
2651 ; SSE-NEXT:    retq
2653 ; AVX-LABEL: shuffle_v8i16_z0z2z4z6:
2654 ; AVX:       # %bb.0:
2655 ; AVX-NEXT:    vpslld $16, %xmm0, %xmm0
2656 ; AVX-NEXT:    retq
2657   %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>
2658   ret <8 x i16> %shuffle
2661 define <8 x i16> @shuffle_v8i16_zzz0zzz4(<8 x i16> %a) {
2662 ; SSE-LABEL: shuffle_v8i16_zzz0zzz4:
2663 ; SSE:       # %bb.0:
2664 ; SSE-NEXT:    psllq $48, %xmm0
2665 ; SSE-NEXT:    retq
2667 ; AVX-LABEL: shuffle_v8i16_zzz0zzz4:
2668 ; AVX:       # %bb.0:
2669 ; AVX-NEXT:    vpsllq $48, %xmm0, %xmm0
2670 ; AVX-NEXT:    retq
2671   %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>
2672   ret <8 x i16> %shuffle
2675 define <8 x i16> @shuffle_v8i16_zz01zX4X(<8 x i16> %a) {
2676 ; SSE-LABEL: shuffle_v8i16_zz01zX4X:
2677 ; SSE:       # %bb.0:
2678 ; SSE-NEXT:    psllq $32, %xmm0
2679 ; SSE-NEXT:    retq
2681 ; AVX-LABEL: shuffle_v8i16_zz01zX4X:
2682 ; AVX:       # %bb.0:
2683 ; AVX-NEXT:    vpsllq $32, %xmm0, %xmm0
2684 ; AVX-NEXT:    retq
2685   %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>
2686   ret <8 x i16> %shuffle
2689 define <8 x i16> @shuffle_v8i16_z0X2z456(<8 x i16> %a) {
2690 ; SSE-LABEL: shuffle_v8i16_z0X2z456:
2691 ; SSE:       # %bb.0:
2692 ; SSE-NEXT:    psllq $16, %xmm0
2693 ; SSE-NEXT:    retq
2695 ; AVX-LABEL: shuffle_v8i16_z0X2z456:
2696 ; AVX:       # %bb.0:
2697 ; AVX-NEXT:    vpsllq $16, %xmm0, %xmm0
2698 ; AVX-NEXT:    retq
2699   %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>
2700   ret <8 x i16> %shuffle
2703 define <8 x i16> @shuffle_v8i16_1z3zXz7z(<8 x i16> %a) {
2704 ; SSE-LABEL: shuffle_v8i16_1z3zXz7z:
2705 ; SSE:       # %bb.0:
2706 ; SSE-NEXT:    psrld $16, %xmm0
2707 ; SSE-NEXT:    retq
2709 ; AVX-LABEL: shuffle_v8i16_1z3zXz7z:
2710 ; AVX:       # %bb.0:
2711 ; AVX-NEXT:    vpsrld $16, %xmm0, %xmm0
2712 ; AVX-NEXT:    retq
2713   %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>
2714   ret <8 x i16> %shuffle
2717 define <8 x i16> @shuffle_v8i16_1X3z567z(<8 x i16> %a) {
2718 ; SSE-LABEL: shuffle_v8i16_1X3z567z:
2719 ; SSE:       # %bb.0:
2720 ; SSE-NEXT:    psrlq $16, %xmm0
2721 ; SSE-NEXT:    retq
2723 ; AVX-LABEL: shuffle_v8i16_1X3z567z:
2724 ; AVX:       # %bb.0:
2725 ; AVX-NEXT:    vpsrlq $16, %xmm0, %xmm0
2726 ; AVX-NEXT:    retq
2727   %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>
2728   ret <8 x i16> %shuffle
2731 define <8 x i16> @shuffle_v8i16_23zz67zz(<8 x i16> %a) {
2732 ; SSE-LABEL: shuffle_v8i16_23zz67zz:
2733 ; SSE:       # %bb.0:
2734 ; SSE-NEXT:    psrlq $32, %xmm0
2735 ; SSE-NEXT:    retq
2737 ; AVX-LABEL: shuffle_v8i16_23zz67zz:
2738 ; AVX:       # %bb.0:
2739 ; AVX-NEXT:    vpsrlq $32, %xmm0, %xmm0
2740 ; AVX-NEXT:    retq
2741   %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>
2742   ret <8 x i16> %shuffle
2745 define <8 x i16> @shuffle_v8i16_3zXXXzzz(<8 x i16> %a) {
2746 ; SSE-LABEL: shuffle_v8i16_3zXXXzzz:
2747 ; SSE:       # %bb.0:
2748 ; SSE-NEXT:    psrlq $48, %xmm0
2749 ; SSE-NEXT:    retq
2751 ; AVX-LABEL: shuffle_v8i16_3zXXXzzz:
2752 ; AVX:       # %bb.0:
2753 ; AVX-NEXT:    vpsrlq $48, %xmm0, %xmm0
2754 ; AVX-NEXT:    retq
2755   %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>
2756   ret <8 x i16> %shuffle
2759 define <8 x i16> @shuffle_v8i16_01u3zzuz(<8 x i16> %a) {
2760 ; SSE-LABEL: shuffle_v8i16_01u3zzuz:
2761 ; SSE:       # %bb.0:
2762 ; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
2763 ; SSE-NEXT:    retq
2765 ; AVX-LABEL: shuffle_v8i16_01u3zzuz:
2766 ; AVX:       # %bb.0:
2767 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
2768 ; AVX-NEXT:    retq
2769   %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>
2770   ret <8 x i16> %shuffle
2773 define <8 x i16> @shuffle_v8i16_0z234567(<8 x i16> %a) {
2774 ; SSE2-LABEL: shuffle_v8i16_0z234567:
2775 ; SSE2:       # %bb.0:
2776 ; SSE2-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2777 ; SSE2-NEXT:    retq
2779 ; SSSE3-LABEL: shuffle_v8i16_0z234567:
2780 ; SSSE3:       # %bb.0:
2781 ; SSSE3-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2782 ; SSSE3-NEXT:    retq
2784 ; SSE41-LABEL: shuffle_v8i16_0z234567:
2785 ; SSE41:       # %bb.0:
2786 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2787 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]
2788 ; SSE41-NEXT:    retq
2790 ; AVX-LABEL: shuffle_v8i16_0z234567:
2791 ; AVX:       # %bb.0:
2792 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2793 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]
2794 ; AVX-NEXT:    retq
2795   %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>
2796   ret <8 x i16> %shuffle
2799 define <8 x i16> @shuffle_v8i16_0zzzz5z7(<8 x i16> %a) {
2800 ; SSE2-LABEL: shuffle_v8i16_0zzzz5z7:
2801 ; SSE2:       # %bb.0:
2802 ; SSE2-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2803 ; SSE2-NEXT:    retq
2805 ; SSSE3-LABEL: shuffle_v8i16_0zzzz5z7:
2806 ; SSSE3:       # %bb.0:
2807 ; SSSE3-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2808 ; SSSE3-NEXT:    retq
2810 ; SSE41-LABEL: shuffle_v8i16_0zzzz5z7:
2811 ; SSE41:       # %bb.0:
2812 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2813 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]
2814 ; SSE41-NEXT:    retq
2816 ; AVX-LABEL: shuffle_v8i16_0zzzz5z7:
2817 ; AVX:       # %bb.0:
2818 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2819 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3,4],xmm0[5],xmm1[6],xmm0[7]
2820 ; AVX-NEXT:    retq
2821   %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>
2822   ret <8 x i16> %shuffle
2825 define <8 x i16> @shuffle_v8i16_0123456z(<8 x i16> %a) {
2826 ; SSE2-LABEL: shuffle_v8i16_0123456z:
2827 ; SSE2:       # %bb.0:
2828 ; SSE2-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2829 ; SSE2-NEXT:    retq
2831 ; SSSE3-LABEL: shuffle_v8i16_0123456z:
2832 ; SSSE3:       # %bb.0:
2833 ; SSSE3-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2834 ; SSSE3-NEXT:    retq
2836 ; SSE41-LABEL: shuffle_v8i16_0123456z:
2837 ; SSE41:       # %bb.0:
2838 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2839 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]
2840 ; SSE41-NEXT:    retq
2842 ; AVX-LABEL: shuffle_v8i16_0123456z:
2843 ; AVX:       # %bb.0:
2844 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2845 ; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6],xmm1[7]
2846 ; AVX-NEXT:    retq
2847   %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>
2848   ret <8 x i16> %shuffle
2851 define <8 x i16> @shuffle_v8i16_fu3ucc5u(<8 x i16> %a, <8 x i16> %b) {
2852 ; SSE-LABEL: shuffle_v8i16_fu3ucc5u:
2853 ; SSE:       # %bb.0:
2854 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2855 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2856 ; SSE-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2857 ; SSE-NEXT:    movdqa %xmm1, %xmm0
2858 ; SSE-NEXT:    retq
2860 ; AVX1-LABEL: shuffle_v8i16_fu3ucc5u:
2861 ; AVX1:       # %bb.0:
2862 ; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2863 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2864 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2865 ; AVX1-NEXT:    retq
2867 ; AVX2OR512VL-LABEL: shuffle_v8i16_fu3ucc5u:
2868 ; AVX2OR512VL:       # %bb.0:
2869 ; AVX2OR512VL-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2870 ; AVX2OR512VL-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]
2871 ; AVX2OR512VL-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
2872 ; AVX2OR512VL-NEXT:    retq
2874 ; XOP-LABEL: shuffle_v8i16_fu3ucc5u:
2875 ; XOP:       # %bb.0:
2876 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm1[14,15,10,11],xmm0[6,7,8,9],xmm1[8,9,8,9],xmm0[10,11,12,13]
2877 ; XOP-NEXT:    retq
2878   %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>
2879   ret <8 x i16> %shuffle
2882 define <8 x i16> @shuffle_v8i16_8012345u(<8 x i16> %a) {
2883 ; SSE-LABEL: shuffle_v8i16_8012345u:
2884 ; SSE:       # %bb.0:
2885 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2886 ; SSE-NEXT:    retq
2888 ; AVX-LABEL: shuffle_v8i16_8012345u:
2889 ; AVX:       # %bb.0:
2890 ; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
2891 ; AVX-NEXT:    retq
2892   %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>
2893   ret <8 x i16> %shuffle
2896 define <8 x i16> @shuffle_v8i16_02468ace(<8 x i16> %a, <8 x i16> %b) {
2897 ; SSE2-LABEL: shuffle_v8i16_02468ace:
2898 ; SSE2:       # %bb.0:
2899 ; SSE2-NEXT:    pslld $16, %xmm1
2900 ; SSE2-NEXT:    psrad $16, %xmm1
2901 ; SSE2-NEXT:    pslld $16, %xmm0
2902 ; SSE2-NEXT:    psrad $16, %xmm0
2903 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
2904 ; SSE2-NEXT:    retq
2906 ; SSSE3-LABEL: shuffle_v8i16_02468ace:
2907 ; SSSE3:       # %bb.0:
2908 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2909 ; SSSE3-NEXT:    pshufb %xmm2, %xmm1
2910 ; SSSE3-NEXT:    pshufb %xmm2, %xmm0
2911 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2912 ; SSSE3-NEXT:    retq
2914 ; SSE41-LABEL: shuffle_v8i16_02468ace:
2915 ; SSE41:       # %bb.0:
2916 ; SSE41-NEXT:    pxor %xmm2, %xmm2
2917 ; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2918 ; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2919 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
2920 ; SSE41-NEXT:    retq
2922 ; AVX1-LABEL: shuffle_v8i16_02468ace:
2923 ; AVX1:       # %bb.0:
2924 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2925 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2926 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2927 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2928 ; AVX1-NEXT:    retq
2930 ; AVX2-LABEL: shuffle_v8i16_02468ace:
2931 ; AVX2:       # %bb.0:
2932 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2933 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
2934 ; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
2935 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2936 ; AVX2-NEXT:    retq
2938 ; AVX512VL-LABEL: shuffle_v8i16_02468ace:
2939 ; AVX512VL:       # %bb.0:
2940 ; AVX512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0
2941 ; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2942 ; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0
2943 ; AVX512VL-NEXT:    vzeroupper
2944 ; AVX512VL-NEXT:    retq
2946 ; XOP-LABEL: shuffle_v8i16_02468ace:
2947 ; XOP:       # %bb.0:
2948 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13],xmm1[0,1,4,5,8,9,12,13]
2949 ; XOP-NEXT:    retq
2950   %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>
2951   ret <8 x i16> %shuffle
2954 define <8 x i16> @shuffle_v8i16_13579bdf(<8 x i16> %a, <8 x i16> %b) {
2955 ; SSE2-LABEL: shuffle_v8i16_13579bdf:
2956 ; SSE2:       # %bb.0:
2957 ; SSE2-NEXT:    psrad $16, %xmm1
2958 ; SSE2-NEXT:    psrad $16, %xmm0
2959 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
2960 ; SSE2-NEXT:    retq
2962 ; SSSE3-LABEL: shuffle_v8i16_13579bdf:
2963 ; SSSE3:       # %bb.0:
2964 ; SSSE3-NEXT:    psrad $16, %xmm1
2965 ; SSSE3-NEXT:    psrad $16, %xmm0
2966 ; SSSE3-NEXT:    packssdw %xmm1, %xmm0
2967 ; SSSE3-NEXT:    retq
2969 ; SSE41-LABEL: shuffle_v8i16_13579bdf:
2970 ; SSE41:       # %bb.0:
2971 ; SSE41-NEXT:    psrld $16, %xmm1
2972 ; SSE41-NEXT:    psrld $16, %xmm0
2973 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
2974 ; SSE41-NEXT:    retq
2976 ; AVX1-LABEL: shuffle_v8i16_13579bdf:
2977 ; AVX1:       # %bb.0:
2978 ; AVX1-NEXT:    vpsrld $16, %xmm1, %xmm1
2979 ; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0
2980 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2981 ; AVX1-NEXT:    retq
2983 ; AVX2OR512VL-LABEL: shuffle_v8i16_13579bdf:
2984 ; AVX2OR512VL:       # %bb.0:
2985 ; AVX2OR512VL-NEXT:    vpsrld $16, %xmm1, %xmm1
2986 ; AVX2OR512VL-NEXT:    vpsrld $16, %xmm0, %xmm0
2987 ; AVX2OR512VL-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2988 ; AVX2OR512VL-NEXT:    retq
2990 ; XOP-LABEL: shuffle_v8i16_13579bdf:
2991 ; XOP:       # %bb.0:
2992 ; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[2,3,6,7,10,11,14,15],xmm1[2,3,6,7,10,11,14,15]
2993 ; XOP-NEXT:    retq
2994   %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
2995   ret <8 x i16> %shuffle
2998 ; PR40306
2999 define <8 x i16> @shuffle_v8i16_9zzzuuuu(<8 x i16> %x) {
3000 ; SSE-LABEL: shuffle_v8i16_9zzzuuuu:
3001 ; SSE:       # %bb.0:
3002 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3003 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3004 ; SSE-NEXT:    retq
3006 ; AVX1-LABEL: shuffle_v8i16_9zzzuuuu:
3007 ; AVX1:       # %bb.0:
3008 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3009 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3010 ; AVX1-NEXT:    retq
3012 ; AVX2-SLOW-LABEL: shuffle_v8i16_9zzzuuuu:
3013 ; AVX2-SLOW:       # %bb.0:
3014 ; AVX2-SLOW-NEXT:    vpbroadcastd %xmm0, %xmm0
3015 ; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3016 ; AVX2-SLOW-NEXT:    retq
3018 ; AVX2-FAST-LABEL: shuffle_v8i16_9zzzuuuu:
3019 ; AVX2-FAST:       # %bb.0:
3020 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3021 ; AVX2-FAST-NEXT:    retq
3023 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_9zzzuuuu:
3024 ; AVX512VL-SLOW:       # %bb.0:
3025 ; AVX512VL-SLOW-NEXT:    vbroadcastss %xmm0, %xmm0
3026 ; AVX512VL-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3027 ; AVX512VL-SLOW-NEXT:    retq
3029 ; AVX512VL-FAST-LABEL: shuffle_v8i16_9zzzuuuu:
3030 ; AVX512VL-FAST:       # %bb.0:
3031 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3032 ; AVX512VL-FAST-NEXT:    retq
3034 ; XOP-LABEL: shuffle_v8i16_9zzzuuuu:
3035 ; XOP:       # %bb.0:
3036 ; XOP-NEXT:    extrq {{.*#+}} xmm0 = xmm0[2,3],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]
3037 ; XOP-NEXT:    retq
3038   %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>
3039   ret <8 x i16> %r
3042 ; PR40318
3043 define <8 x i16> @shuffle_v8i16_2zzzuuuu(<8 x i16> %x) {
3044 ; SSE-LABEL: shuffle_v8i16_2zzzuuuu:
3045 ; SSE:       # %bb.0:
3046 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
3047 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3048 ; SSE-NEXT:    retq
3050 ; AVX1-LABEL: shuffle_v8i16_2zzzuuuu:
3051 ; AVX1:       # %bb.0:
3052 ; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
3053 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3054 ; AVX1-NEXT:    retq
3056 ; AVX2-SLOW-LABEL: shuffle_v8i16_2zzzuuuu:
3057 ; AVX2-SLOW:       # %bb.0:
3058 ; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
3059 ; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3060 ; AVX2-SLOW-NEXT:    retq
3062 ; AVX2-FAST-LABEL: shuffle_v8i16_2zzzuuuu:
3063 ; AVX2-FAST:       # %bb.0:
3064 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3065 ; AVX2-FAST-NEXT:    retq
3067 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_2zzzuuuu:
3068 ; AVX512VL-SLOW:       # %bb.0:
3069 ; AVX512VL-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
3070 ; AVX512VL-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3071 ; AVX512VL-SLOW-NEXT:    retq
3073 ; AVX512VL-FAST-LABEL: shuffle_v8i16_2zzzuuuu:
3074 ; AVX512VL-FAST:       # %bb.0:
3075 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
3076 ; AVX512VL-FAST-NEXT:    retq
3078 ; XOP-LABEL: shuffle_v8i16_2zzzuuuu:
3079 ; XOP:       # %bb.0:
3080 ; XOP-NEXT:    extrq {{.*#+}} xmm0 = xmm0[4,5],zero,zero,zero,zero,zero,zero,xmm0[u,u,u,u,u,u,u,u]
3081 ; XOP-NEXT:    retq
3082   %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>
3083   ret <8 x i16> %r
3086 define <8 x i16> @shuffle_v8i16_3uu6zzzz(<8 x i16> %x) {
3087 ; SSE-LABEL: shuffle_v8i16_3uu6zzzz:
3088 ; SSE:       # %bb.0:
3089 ; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3090 ; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3091 ; SSE-NEXT:    retq
3093 ; AVX1-LABEL: shuffle_v8i16_3uu6zzzz:
3094 ; AVX1:       # %bb.0:
3095 ; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3096 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3097 ; AVX1-NEXT:    retq
3099 ; AVX2-SLOW-LABEL: shuffle_v8i16_3uu6zzzz:
3100 ; AVX2-SLOW:       # %bb.0:
3101 ; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3102 ; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3103 ; AVX2-SLOW-NEXT:    retq
3105 ; AVX2-FAST-LABEL: shuffle_v8i16_3uu6zzzz:
3106 ; AVX2-FAST:       # %bb.0:
3107 ; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13],zero,zero,zero,zero,zero,zero,zero,zero
3108 ; AVX2-FAST-NEXT:    retq
3110 ; AVX512VL-SLOW-LABEL: shuffle_v8i16_3uu6zzzz:
3111 ; AVX512VL-SLOW:       # %bb.0:
3112 ; AVX512VL-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3113 ; AVX512VL-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3114 ; AVX512VL-SLOW-NEXT:    retq
3116 ; AVX512VL-FAST-LABEL: shuffle_v8i16_3uu6zzzz:
3117 ; AVX512VL-FAST:       # %bb.0:
3118 ; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13],zero,zero,zero,zero,zero,zero,zero,zero
3119 ; AVX512VL-FAST-NEXT:    retq
3121 ; XOP-LABEL: shuffle_v8i16_3uu6zzzz:
3122 ; XOP:       # %bb.0:
3123 ; XOP-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
3124 ; XOP-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
3125 ; XOP-NEXT:    retq
3126   %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>
3127   ret <8 x i16> %r
3130 define <8 x i16> @mask_v8i16_012345ef(<8 x i16> %a, <8 x i16> %b) {
3131 ; SSE2-LABEL: mask_v8i16_012345ef:
3132 ; SSE2:       # %bb.0:
3133 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
3134 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
3135 ; SSE2-NEXT:    movaps %xmm1, %xmm0
3136 ; SSE2-NEXT:    retq
3138 ; SSSE3-LABEL: mask_v8i16_012345ef:
3139 ; SSSE3:       # %bb.0:
3140 ; SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
3141 ; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
3142 ; SSSE3-NEXT:    movaps %xmm1, %xmm0
3143 ; SSSE3-NEXT:    retq
3145 ; SSE41-LABEL: mask_v8i16_012345ef:
3146 ; SSE41:       # %bb.0:
3147 ; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]
3148 ; SSE41-NEXT:    retq
3150 ; AVX-LABEL: mask_v8i16_012345ef:
3151 ; AVX:       # %bb.0:
3152 ; AVX-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]
3153 ; AVX-NEXT:    retq
3154   %1 = bitcast <8 x i16> %a to <2 x i64>
3155   %2 = bitcast <8 x i16> %b to <2 x i64>
3156   %3 = and <2 x i64> %1, <i64 0, i64 -4294967296>
3157   %4 = and <2 x i64> %2, <i64 -1, i64 4294967295>
3158   %5 = or <2 x i64> %4, %3
3159   %6 = bitcast <2 x i64> %5 to <8 x i16>
3160   ret <8 x i16> %6
3163 define <8 x i16> @insert_dup_mem_v8i16_i32(ptr %ptr) {
3164 ; SSE-LABEL: insert_dup_mem_v8i16_i32:
3165 ; SSE:       # %bb.0:
3166 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3167 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3168 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3169 ; SSE-NEXT:    retq
3171 ; AVX1-LABEL: insert_dup_mem_v8i16_i32:
3172 ; AVX1:       # %bb.0:
3173 ; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3174 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3175 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3176 ; AVX1-NEXT:    retq
3178 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_i32:
3179 ; AVX2OR512VL:       # %bb.0:
3180 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3181 ; AVX2OR512VL-NEXT:    retq
3183 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_i32:
3184 ; XOPAVX1:       # %bb.0:
3185 ; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3186 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3187 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3188 ; XOPAVX1-NEXT:    retq
3190 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_i32:
3191 ; XOPAVX2:       # %bb.0:
3192 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3193 ; XOPAVX2-NEXT:    retq
3194   %tmp = load i32, ptr %ptr, align 4
3195   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0
3196   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
3197   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> zeroinitializer
3198   ret <8 x i16> %tmp3
3201 define <8 x i16> @insert_dup_mem_v8i16_sext_i16(ptr %ptr) {
3202 ; SSE-LABEL: insert_dup_mem_v8i16_sext_i16:
3203 ; SSE:       # %bb.0:
3204 ; SSE-NEXT:    movzwl (%rdi), %eax
3205 ; SSE-NEXT:    movd %eax, %xmm0
3206 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3207 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3208 ; SSE-NEXT:    retq
3210 ; AVX1-LABEL: insert_dup_mem_v8i16_sext_i16:
3211 ; AVX1:       # %bb.0:
3212 ; AVX1-NEXT:    movzwl (%rdi), %eax
3213 ; AVX1-NEXT:    vmovd %eax, %xmm0
3214 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3215 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3216 ; AVX1-NEXT:    retq
3218 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_sext_i16:
3219 ; AVX2OR512VL:       # %bb.0:
3220 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3221 ; AVX2OR512VL-NEXT:    retq
3223 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_sext_i16:
3224 ; XOPAVX1:       # %bb.0:
3225 ; XOPAVX1-NEXT:    movzwl (%rdi), %eax
3226 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3227 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3228 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3229 ; XOPAVX1-NEXT:    retq
3231 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_sext_i16:
3232 ; XOPAVX2:       # %bb.0:
3233 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3234 ; XOPAVX2-NEXT:    retq
3235   %tmp = load i16, ptr %ptr, align 2
3236   %tmp1 = sext i16 %tmp to i32
3237   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 0
3238   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
3239   %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> undef, <8 x i32> zeroinitializer
3240   ret <8 x i16> %tmp4
3243 define <8 x i16> @insert_dup_elt1_mem_v8i16_i32(ptr %ptr) {
3244 ; SSE-LABEL: insert_dup_elt1_mem_v8i16_i32:
3245 ; SSE:       # %bb.0:
3246 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3247 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3248 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3249 ; SSE-NEXT:    retq
3251 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_i32:
3252 ; AVX1:       # %bb.0:
3253 ; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3254 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3255 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3256 ; AVX1-NEXT:    retq
3258 ; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v8i16_i32:
3259 ; AVX2OR512VL:       # %bb.0:
3260 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3261 ; AVX2OR512VL-NEXT:    retq
3263 ; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_i32:
3264 ; XOPAVX1:       # %bb.0:
3265 ; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3266 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3267 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3268 ; XOPAVX1-NEXT:    retq
3270 ; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_i32:
3271 ; XOPAVX2:       # %bb.0:
3272 ; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3273 ; XOPAVX2-NEXT:    retq
3274   %tmp = load i32, ptr %ptr, align 4
3275   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0
3276   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
3277   %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>
3278   ret <8 x i16> %tmp3
3281 define <8 x i16> @insert_dup_elt3_mem_v8i16_i32(ptr %ptr) {
3282 ; SSE2-LABEL: insert_dup_elt3_mem_v8i16_i32:
3283 ; SSE2:       # %bb.0:
3284 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3285 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3286 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3287 ; SSE2-NEXT:    retq
3289 ; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_i32:
3290 ; SSSE3:       # %bb.0:
3291 ; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3292 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3293 ; SSSE3-NEXT:    retq
3295 ; SSE41-LABEL: insert_dup_elt3_mem_v8i16_i32:
3296 ; SSE41:       # %bb.0:
3297 ; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
3298 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3299 ; SSE41-NEXT:    retq
3301 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_i32:
3302 ; AVX1:       # %bb.0:
3303 ; AVX1-NEXT:    vbroadcastss (%rdi), %xmm0
3304 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3305 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3306 ; AVX1-NEXT:    retq
3308 ; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v8i16_i32:
3309 ; AVX2OR512VL:       # %bb.0:
3310 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3311 ; AVX2OR512VL-NEXT:    retq
3313 ; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_i32:
3314 ; XOPAVX1:       # %bb.0:
3315 ; XOPAVX1-NEXT:    vbroadcastss (%rdi), %xmm0
3316 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3317 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3318 ; XOPAVX1-NEXT:    retq
3320 ; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_i32:
3321 ; XOPAVX2:       # %bb.0:
3322 ; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3323 ; XOPAVX2-NEXT:    retq
3324   %tmp = load i32, ptr %ptr, align 4
3325   %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 1
3326   %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>
3327   %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>
3328   ret <8 x i16> %tmp3
3331 define <8 x i16> @insert_dup_elt1_mem_v8i16_sext_i16(ptr %ptr) {
3332 ; SSE-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3333 ; SSE:       # %bb.0:
3334 ; SSE-NEXT:    movswl (%rdi), %eax
3335 ; SSE-NEXT:    movd %eax, %xmm0
3336 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3337 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3338 ; SSE-NEXT:    retq
3340 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3341 ; AVX1:       # %bb.0:
3342 ; AVX1-NEXT:    movswl (%rdi), %eax
3343 ; AVX1-NEXT:    vmovd %eax, %xmm0
3344 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3345 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3346 ; AVX1-NEXT:    retq
3348 ; AVX2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3349 ; AVX2:       # %bb.0:
3350 ; AVX2-NEXT:    movswl (%rdi), %eax
3351 ; AVX2-NEXT:    shrl $16, %eax
3352 ; AVX2-NEXT:    vmovd %eax, %xmm0
3353 ; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3354 ; AVX2-NEXT:    retq
3356 ; AVX512VL-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3357 ; AVX512VL:       # %bb.0:
3358 ; AVX512VL-NEXT:    movswl (%rdi), %eax
3359 ; AVX512VL-NEXT:    shrl $16, %eax
3360 ; AVX512VL-NEXT:    vpbroadcastw %eax, %xmm0
3361 ; AVX512VL-NEXT:    retq
3363 ; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3364 ; XOPAVX1:       # %bb.0:
3365 ; XOPAVX1-NEXT:    movswl (%rdi), %eax
3366 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3367 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3368 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3369 ; XOPAVX1-NEXT:    retq
3371 ; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_sext_i16:
3372 ; XOPAVX2:       # %bb.0:
3373 ; XOPAVX2-NEXT:    movswl (%rdi), %eax
3374 ; XOPAVX2-NEXT:    shrl $16, %eax
3375 ; XOPAVX2-NEXT:    vmovd %eax, %xmm0
3376 ; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3377 ; XOPAVX2-NEXT:    retq
3378   %tmp = load i16, ptr %ptr, align 2
3379   %tmp1 = sext i16 %tmp to i32
3380   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 0
3381   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
3382   %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>
3383   ret <8 x i16> %tmp4
3386 define <8 x i16> @insert_dup_elt3_mem_v8i16_sext_i16(ptr %ptr) {
3387 ; SSE2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3388 ; SSE2:       # %bb.0:
3389 ; SSE2-NEXT:    movswl (%rdi), %eax
3390 ; SSE2-NEXT:    movd %eax, %xmm0
3391 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3392 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3393 ; SSE2-NEXT:    retq
3395 ; SSSE3-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3396 ; SSSE3:       # %bb.0:
3397 ; SSSE3-NEXT:    movswl (%rdi), %eax
3398 ; SSSE3-NEXT:    movd %eax, %xmm0
3399 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3400 ; SSSE3-NEXT:    retq
3402 ; SSE41-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3403 ; SSE41:       # %bb.0:
3404 ; SSE41-NEXT:    movswl (%rdi), %eax
3405 ; SSE41-NEXT:    movd %eax, %xmm0
3406 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3407 ; SSE41-NEXT:    retq
3409 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3410 ; AVX1:       # %bb.0:
3411 ; AVX1-NEXT:    movswl (%rdi), %eax
3412 ; AVX1-NEXT:    vmovd %eax, %xmm0
3413 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3414 ; AVX1-NEXT:    retq
3416 ; AVX2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3417 ; AVX2:       # %bb.0:
3418 ; AVX2-NEXT:    movswl (%rdi), %eax
3419 ; AVX2-NEXT:    shrl $16, %eax
3420 ; AVX2-NEXT:    vmovd %eax, %xmm0
3421 ; AVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3422 ; AVX2-NEXT:    retq
3424 ; AVX512VL-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3425 ; AVX512VL:       # %bb.0:
3426 ; AVX512VL-NEXT:    movswl (%rdi), %eax
3427 ; AVX512VL-NEXT:    shrl $16, %eax
3428 ; AVX512VL-NEXT:    vpbroadcastw %eax, %xmm0
3429 ; AVX512VL-NEXT:    retq
3431 ; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3432 ; XOPAVX1:       # %bb.0:
3433 ; XOPAVX1-NEXT:    movswl (%rdi), %eax
3434 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3435 ; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]
3436 ; XOPAVX1-NEXT:    retq
3438 ; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_sext_i16:
3439 ; XOPAVX2:       # %bb.0:
3440 ; XOPAVX2-NEXT:    movswl (%rdi), %eax
3441 ; XOPAVX2-NEXT:    shrl $16, %eax
3442 ; XOPAVX2-NEXT:    vmovd %eax, %xmm0
3443 ; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %xmm0
3444 ; XOPAVX2-NEXT:    retq
3445   %tmp = load i16, ptr %ptr, align 2
3446   %tmp1 = sext i16 %tmp to i32
3447   %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 1
3448   %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>
3449   %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>
3450   ret <8 x i16> %tmp4
3453 define <8 x i16> @insert_dup_mem_v8i16_i64(ptr %ptr) {
3454 ; SSE-LABEL: insert_dup_mem_v8i16_i64:
3455 ; SSE:       # %bb.0:
3456 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3457 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3458 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3459 ; SSE-NEXT:    retq
3461 ; AVX1-LABEL: insert_dup_mem_v8i16_i64:
3462 ; AVX1:       # %bb.0:
3463 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3464 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3465 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3466 ; AVX1-NEXT:    retq
3468 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_i64:
3469 ; AVX2OR512VL:       # %bb.0:
3470 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3471 ; AVX2OR512VL-NEXT:    retq
3473 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_i64:
3474 ; XOPAVX1:       # %bb.0:
3475 ; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3476 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3477 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3478 ; XOPAVX1-NEXT:    retq
3480 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_i64:
3481 ; XOPAVX2:       # %bb.0:
3482 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3483 ; XOPAVX2-NEXT:    retq
3484   %tmp = load i64, ptr %ptr, align 4
3485   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0
3486   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3487   %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <8 x i32> zeroinitializer
3488   ret <8 x i16> %tmp3
3491 define <8 x i16> @insert_dup_elt1_mem_v8i16_i64(ptr %ptr) {
3492 ; SSE-LABEL: insert_dup_elt1_mem_v8i16_i64:
3493 ; SSE:       # %bb.0:
3494 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3495 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3496 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3497 ; SSE-NEXT:    retq
3499 ; AVX1-LABEL: insert_dup_elt1_mem_v8i16_i64:
3500 ; AVX1:       # %bb.0:
3501 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3502 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3503 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3504 ; AVX1-NEXT:    retq
3506 ; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v8i16_i64:
3507 ; AVX2OR512VL:       # %bb.0:
3508 ; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3509 ; AVX2OR512VL-NEXT:    retq
3511 ; XOPAVX1-LABEL: insert_dup_elt1_mem_v8i16_i64:
3512 ; XOPAVX1:       # %bb.0:
3513 ; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3514 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
3515 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3516 ; XOPAVX1-NEXT:    retq
3518 ; XOPAVX2-LABEL: insert_dup_elt1_mem_v8i16_i64:
3519 ; XOPAVX2:       # %bb.0:
3520 ; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %xmm0
3521 ; XOPAVX2-NEXT:    retq
3522   %tmp = load i64, ptr %ptr, align 4
3523   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0
3524   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3525   %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>
3526   ret <8 x i16> %tmp3
3529 define <8 x i16> @insert_dup_elt3_mem_v8i16_i64(ptr %ptr) {
3530 ; SSE-LABEL: insert_dup_elt3_mem_v8i16_i64:
3531 ; SSE:       # %bb.0:
3532 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3533 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3534 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3535 ; SSE-NEXT:    retq
3537 ; AVX1-LABEL: insert_dup_elt3_mem_v8i16_i64:
3538 ; AVX1:       # %bb.0:
3539 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3540 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3541 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3542 ; AVX1-NEXT:    retq
3544 ; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v8i16_i64:
3545 ; AVX2OR512VL:       # %bb.0:
3546 ; AVX2OR512VL-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3547 ; AVX2OR512VL-NEXT:    retq
3549 ; XOPAVX1-LABEL: insert_dup_elt3_mem_v8i16_i64:
3550 ; XOPAVX1:       # %bb.0:
3551 ; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
3552 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
3553 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3554 ; XOPAVX1-NEXT:    retq
3556 ; XOPAVX2-LABEL: insert_dup_elt3_mem_v8i16_i64:
3557 ; XOPAVX2:       # %bb.0:
3558 ; XOPAVX2-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3559 ; XOPAVX2-NEXT:    retq
3560   %tmp = load i64, ptr %ptr, align 4
3561   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0
3562   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3563   %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>
3564   ret <8 x i16> %tmp3
3567 define <8 x i16> @insert_dup_elt7_mem_v8i16_i64(ptr %ptr) {
3568 ; SSE2-LABEL: insert_dup_elt7_mem_v8i16_i64:
3569 ; SSE2:       # %bb.0:
3570 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3571 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
3572 ; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]
3573 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
3574 ; SSE2-NEXT:    retq
3576 ; SSSE3-LABEL: insert_dup_elt7_mem_v8i16_i64:
3577 ; SSSE3:       # %bb.0:
3578 ; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3579 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]
3580 ; SSSE3-NEXT:    retq
3582 ; SSE41-LABEL: insert_dup_elt7_mem_v8i16_i64:
3583 ; SSE41:       # %bb.0:
3584 ; SSE41-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
3585 ; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]
3586 ; SSE41-NEXT:    retq
3588 ; AVX1-LABEL: insert_dup_elt7_mem_v8i16_i64:
3589 ; AVX1:       # %bb.0:
3590 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]
3591 ; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]
3592 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
3593 ; AVX1-NEXT:    retq
3595 ; AVX2OR512VL-LABEL: insert_dup_elt7_mem_v8i16_i64:
3596 ; AVX2OR512VL:       # %bb.0:
3597 ; AVX2OR512VL-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3598 ; AVX2OR512VL-NEXT:    retq
3600 ; XOPAVX1-LABEL: insert_dup_elt7_mem_v8i16_i64:
3601 ; XOPAVX1:       # %bb.0:
3602 ; XOPAVX1-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]
3603 ; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]
3604 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
3605 ; XOPAVX1-NEXT:    retq
3607 ; XOPAVX2-LABEL: insert_dup_elt7_mem_v8i16_i64:
3608 ; XOPAVX2:       # %bb.0:
3609 ; XOPAVX2-NEXT:    vpbroadcastw 6(%rdi), %xmm0
3610 ; XOPAVX2-NEXT:    retq
3611   %tmp = load i64, ptr %ptr, align 4
3612   %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 1
3613   %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>
3614   %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>
3615   ret <8 x i16> %tmp3
3618 define <8 x i16> @insert_dup_mem_v8i16_sext_i16_i64(ptr %ptr) {
3619 ; SSE-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3620 ; SSE:       # %bb.0:
3621 ; SSE-NEXT:    movzwl (%rdi), %eax
3622 ; SSE-NEXT:    movd %eax, %xmm0
3623 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3624 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3625 ; SSE-NEXT:    retq
3627 ; AVX1-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3628 ; AVX1:       # %bb.0:
3629 ; AVX1-NEXT:    movzwl (%rdi), %eax
3630 ; AVX1-NEXT:    vmovd %eax, %xmm0
3631 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3632 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3633 ; AVX1-NEXT:    retq
3635 ; AVX2OR512VL-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3636 ; AVX2OR512VL:       # %bb.0:
3637 ; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %xmm0
3638 ; AVX2OR512VL-NEXT:    retq
3640 ; XOPAVX1-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3641 ; XOPAVX1:       # %bb.0:
3642 ; XOPAVX1-NEXT:    movzwl (%rdi), %eax
3643 ; XOPAVX1-NEXT:    vmovd %eax, %xmm0
3644 ; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
3645 ; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
3646 ; XOPAVX1-NEXT:    retq
3648 ; XOPAVX2-LABEL: insert_dup_mem_v8i16_sext_i16_i64:
3649 ; XOPAVX2:       # %bb.0:
3650 ; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %xmm0
3651 ; XOPAVX2-NEXT:    retq
3652   %tmp = load i16, ptr %ptr, align 2
3653   %tmp1 = sext i16 %tmp to i64
3654   %tmp2 = insertelement <2 x i64> zeroinitializer, i64 %tmp1, i32 0
3655   %tmp3 = bitcast <2 x i64> %tmp2 to <8 x i16>
3656   %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> undef, <8 x i32> zeroinitializer
3657   ret <8 x i16> %tmp4