1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=ALL --check-prefix=SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+ssse3 -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=ALL --check-prefix=SSSE3
4 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5 target triple = "x86_64-unknown-unknown"
7 define <8 x i16> @shuffle_v8i16_01012323(<8 x i16> %a, <8 x i16> %b) {
8 ; ALL-LABEL: @shuffle_v8i16_01012323
10 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,0,1,1]
12 %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>
13 ret <8 x i16> %shuffle
15 define <8 x i16> @shuffle_v8i16_67452301(<8 x i16> %a, <8 x i16> %b) {
16 ; ALL-LABEL: @shuffle_v8i16_67452301
18 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,2,1,0]
20 %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>
21 ret <8 x i16> %shuffle
23 define <8 x i16> @shuffle_v8i16_456789AB(<8 x i16> %a, <8 x i16> %b) {
24 ; SSE2-LABEL: @shuffle_v8i16_456789AB
26 ; SSE2-NEXT: shufpd {{.*}} # xmm0 = xmm0[1],xmm1[0]
29 ; SSSE3-LABEL: @shuffle_v8i16_456789AB
31 ; SSSE3-NEXT: palignr {{.*}} # xmm1 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7]
32 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
34 %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>
35 ret <8 x i16> %shuffle
38 define <8 x i16> @shuffle_v8i16_00000000(<8 x i16> %a, <8 x i16> %b) {
39 ; SSE2-LABEL: @shuffle_v8i16_00000000
41 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,3]
42 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,0,0,4,5,6,7]
43 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
46 ; SSSE3-LABEL: @shuffle_v8i16_00000000
48 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
50 %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>
51 ret <8 x i16> %shuffle
53 define <8 x i16> @shuffle_v8i16_00004444(<8 x i16> %a, <8 x i16> %b) {
54 ; ALL-LABEL: @shuffle_v8i16_00004444
56 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,0,0,4,5,6,7]
57 ; ALL-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
59 %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>
60 ret <8 x i16> %shuffle
62 define <8 x i16> @shuffle_v8i16_u0u1u2u3(<8 x i16> %a, <8 x i16> %b) {
63 ; ALL-LABEL: @shuffle_v8i16_u0u1u2u3
65 ; ALL-NEXT: unpcklwd {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3]
67 %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>
68 ret <8 x i16> %shuffle
70 define <8 x i16> @shuffle_v8i16_u4u5u6u7(<8 x i16> %a, <8 x i16> %b) {
71 ; ALL-LABEL: @shuffle_v8i16_u4u5u6u7
73 ; ALL-NEXT: unpckhwd {{.*}} # xmm0 = xmm0[4,4,5,5,6,6,7,7]
75 %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>
76 ret <8 x i16> %shuffle
78 define <8 x i16> @shuffle_v8i16_31206745(<8 x i16> %a, <8 x i16> %b) {
79 ; ALL-LABEL: @shuffle_v8i16_31206745
81 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,1,2,0,4,5,6,7]
82 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,3,2]
84 %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>
85 ret <8 x i16> %shuffle
87 define <8 x i16> @shuffle_v8i16_44440000(<8 x i16> %a, <8 x i16> %b) {
88 ; SSE2-LABEL: @shuffle_v8i16_44440000
90 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,0,3]
91 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,0,0,4,5,6,7]
92 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
95 ; SSSE3-LABEL: @shuffle_v8i16_44440000
97 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
99 %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>
100 ret <8 x i16> %shuffle
102 define <8 x i16> @shuffle_v8i16_23016745(<8 x i16> %a, <8 x i16> %b) {
103 ; ALL-LABEL: @shuffle_v8i16_23016745
105 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[1,0,3,2]
107 %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>
108 ret <8 x i16> %shuffle
110 define <8 x i16> @shuffle_v8i16_23026745(<8 x i16> %a, <8 x i16> %b) {
111 ; ALL-LABEL: @shuffle_v8i16_23026745
113 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,3,0,2,4,5,6,7]
114 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,3,2]
116 %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>
117 ret <8 x i16> %shuffle
119 define <8 x i16> @shuffle_v8i16_23016747(<8 x i16> %a, <8 x i16> %b) {
120 ; ALL-LABEL: @shuffle_v8i16_23016747
122 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[1,0,2,3]
123 ; ALL-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,7,4,7]
125 %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>
126 ret <8 x i16> %shuffle
128 define <8 x i16> @shuffle_v8i16_75643120(<8 x i16> %a, <8 x i16> %b) {
129 ; SSE2-LABEL: @shuffle_v8i16_75643120
131 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
132 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,1,2,0,4,5,6,7]
133 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
136 ; SSSE3-LABEL: @shuffle_v8i16_75643120
138 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
140 %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>
141 ret <8 x i16> %shuffle
144 define <8 x i16> @shuffle_v8i16_10545410(<8 x i16> %a, <8 x i16> %b) {
145 ; SSE2-LABEL: @shuffle_v8i16_10545410
147 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
148 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,0,3,2,4,5,6,7]
149 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,4,7,6]
152 ; SSSE3-LABEL: @shuffle_v8i16_10545410
154 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
156 %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>
157 ret <8 x i16> %shuffle
159 define <8 x i16> @shuffle_v8i16_54105410(<8 x i16> %a, <8 x i16> %b) {
160 ; SSE2-LABEL: @shuffle_v8i16_54105410
162 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
163 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,2,1,0,4,5,6,7]
164 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,4,7,6]
167 ; SSSE3-LABEL: @shuffle_v8i16_54105410
169 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
171 %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>
172 ret <8 x i16> %shuffle
174 define <8 x i16> @shuffle_v8i16_54101054(<8 x i16> %a, <8 x i16> %b) {
175 ; SSE2-LABEL: @shuffle_v8i16_54101054
177 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
178 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,2,1,0,4,5,6,7]
179 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,6,5,4]
182 ; SSSE3-LABEL: @shuffle_v8i16_54101054
184 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
186 %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>
187 ret <8 x i16> %shuffle
189 define <8 x i16> @shuffle_v8i16_04400440(<8 x i16> %a, <8 x i16> %b) {
190 ; SSE2-LABEL: @shuffle_v8i16_04400440
192 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
193 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
194 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,4,4,6]
197 ; SSSE3-LABEL: @shuffle_v8i16_04400440
199 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
201 %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>
202 ret <8 x i16> %shuffle
204 define <8 x i16> @shuffle_v8i16_40044004(<8 x i16> %a, <8 x i16> %b) {
205 ; SSE2-LABEL: @shuffle_v8i16_40044004
207 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
208 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,0,0,2,4,5,6,7]
209 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,4]
212 ; SSSE3-LABEL: @shuffle_v8i16_40044004
214 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
216 %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>
217 ret <8 x i16> %shuffle
220 define <8 x i16> @shuffle_v8i16_26405173(<8 x i16> %a, <8 x i16> %b) {
221 ; SSE2-LABEL: @shuffle_v8i16_26405173
223 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
224 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
225 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,1]
226 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,3,0,4,5,6,7]
227 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,6,4,7]
230 ; SSSE3-LABEL: @shuffle_v8i16_26405173
232 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
234 %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>
235 ret <8 x i16> %shuffle
237 define <8 x i16> @shuffle_v8i16_20645173(<8 x i16> %a, <8 x i16> %b) {
238 ; SSE2-LABEL: @shuffle_v8i16_20645173
240 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
241 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
242 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,1]
243 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,0,2,3,4,5,6,7]
244 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,6,4,7]
247 ; SSSE3-LABEL: @shuffle_v8i16_20645173
249 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
251 %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>
252 ret <8 x i16> %shuffle
254 define <8 x i16> @shuffle_v8i16_26401375(<8 x i16> %a, <8 x i16> %b) {
255 ; SSE2-LABEL: @shuffle_v8i16_26401375
257 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
258 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
259 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,1,2]
260 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,3,0,4,5,6,7]
263 ; SSSE3-LABEL: @shuffle_v8i16_26401375
265 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
267 %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>
268 ret <8 x i16> %shuffle
271 define <8 x i16> @shuffle_v8i16_66751643(<8 x i16> %a, <8 x i16> %b) {
272 ; SSE2-LABEL: @shuffle_v8i16_66751643
274 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,1,2,3,4,5,6,7]
275 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,5,7]
276 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,2,0]
277 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,1,3,2,4,5,6,7]
278 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,4,6]
281 ; SSSE3-LABEL: @shuffle_v8i16_66751643
283 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
285 %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>
286 ret <8 x i16> %shuffle
289 define <8 x i16> @shuffle_v8i16_60514754(<8 x i16> %a, <8 x i16> %b) {
290 ; SSE2-LABEL: @shuffle_v8i16_60514754
292 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,5,4,7]
293 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
294 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,0,3,1,4,5,6,7]
295 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,7,5,6]
298 ; SSSE3-LABEL: @shuffle_v8i16_60514754
300 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
302 %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>
303 ret <8 x i16> %shuffle
306 define <8 x i16> @shuffle_v8i16_00444444(<8 x i16> %a, <8 x i16> %b) {
307 ; SSE2-LABEL: @shuffle_v8i16_00444444
309 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
310 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,2,2,4,5,6,7]
311 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
314 ; SSSE3-LABEL: @shuffle_v8i16_00444444
316 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
318 %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>
319 ret <8 x i16> %shuffle
321 define <8 x i16> @shuffle_v8i16_44004444(<8 x i16> %a, <8 x i16> %b) {
322 ; SSE2-LABEL: @shuffle_v8i16_44004444
324 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
325 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,2,0,0,4,5,6,7]
326 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
329 ; SSSE3-LABEL: @shuffle_v8i16_44004444
331 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
333 %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>
334 ret <8 x i16> %shuffle
336 define <8 x i16> @shuffle_v8i16_04404444(<8 x i16> %a, <8 x i16> %b) {
337 ; SSE2-LABEL: @shuffle_v8i16_04404444
339 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
340 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
341 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
344 ; SSSE3-LABEL: @shuffle_v8i16_04404444
346 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
348 %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>
349 ret <8 x i16> %shuffle
351 define <8 x i16> @shuffle_v8i16_04400000(<8 x i16> %a, <8 x i16> %b) {
352 ; SSE2-LABEL: @shuffle_v8i16_04400000
354 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,0,3]
355 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
356 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
359 ; SSSE3-LABEL: @shuffle_v8i16_04400000
361 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
363 %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>
364 ret <8 x i16> %shuffle
366 define <8 x i16> @shuffle_v8i16_04404567(<8 x i16> %a, <8 x i16> %b) {
367 ; ALL-LABEL: @shuffle_v8i16_04404567
369 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
370 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
372 %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>
373 ret <8 x i16> %shuffle
376 define <8 x i16> @shuffle_v8i16_0X444444(<8 x i16> %a, <8 x i16> %b) {
377 ; SSE2-LABEL: @shuffle_v8i16_0X444444
379 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
380 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,2,2,4,5,6,7]
381 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
384 ; SSSE3-LABEL: @shuffle_v8i16_0X444444
386 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,{{[0-9]+,[0-9]+}},8,9,8,9,8,9,8,9,8,9,8,9]
388 %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>
389 ret <8 x i16> %shuffle
391 define <8 x i16> @shuffle_v8i16_44X04444(<8 x i16> %a, <8 x i16> %b) {
392 ; SSE2-LABEL: @shuffle_v8i16_44X04444
394 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
395 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,2,2,0,4,5,6,7]
396 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
399 ; SSSE3-LABEL: @shuffle_v8i16_44X04444
401 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,8,9,{{[0-9]+,[0-9]+}},0,1,8,9,8,9,8,9,8,9]
403 %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>
404 ret <8 x i16> %shuffle
406 define <8 x i16> @shuffle_v8i16_X4404444(<8 x i16> %a, <8 x i16> %b) {
407 ; SSE2-LABEL: @shuffle_v8i16_X4404444
409 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
410 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
411 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
414 ; SSSE3-LABEL: @shuffle_v8i16_X4404444
416 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[{{[0-9]+,[0-9]+}},8,9,8,9,0,1,8,9,8,9,8,9,8,9]
418 %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>
419 ret <8 x i16> %shuffle
422 define <8 x i16> @shuffle_v8i16_0127XXXX(<8 x i16> %a, <8 x i16> %b) {
423 ; SSE2-LABEL: @shuffle_v8i16_0127XXXX
425 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,1,3]
426 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,7,6,7]
427 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
430 ; SSSE3-LABEL: @shuffle_v8i16_0127XXXX
432 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,2,3,4,5,14,15,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
434 %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>
435 ret <8 x i16> %shuffle
438 define <8 x i16> @shuffle_v8i16_XXXX4563(<8 x i16> %a, <8 x i16> %b) {
439 ; SSE2-LABEL: @shuffle_v8i16_XXXX4563
441 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
442 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,3,4,5,6,7]
443 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,2,0]
446 ; SSSE3-LABEL: @shuffle_v8i16_XXXX4563
448 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}},8,9,10,11,12,13,6,7]
450 %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>
451 ret <8 x i16> %shuffle
454 define <8 x i16> @shuffle_v8i16_4563XXXX(<8 x i16> %a, <8 x i16> %b) {
455 ; SSE2-LABEL: @shuffle_v8i16_4563XXXX
457 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
458 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,3,4,5,6,7]
459 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,0,2,3]
462 ; SSSE3-LABEL: @shuffle_v8i16_4563XXXX
464 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,10,11,12,13,6,7,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
466 %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>
467 ret <8 x i16> %shuffle
470 define <8 x i16> @shuffle_v8i16_01274563(<8 x i16> %a, <8 x i16> %b) {
471 ; SSE2-LABEL: @shuffle_v8i16_01274563
473 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,1,3]
474 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,5,4,7]
475 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,1,2]
478 ; SSSE3-LABEL: @shuffle_v8i16_01274563
480 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
482 %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>
483 ret <8 x i16> %shuffle
486 define <8 x i16> @shuffle_v8i16_45630127(<8 x i16> %a, <8 x i16> %b) {
487 ; SSE2-LABEL: @shuffle_v8i16_45630127
489 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
490 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,1,4,5,6,7]
491 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,0,3,1]
494 ; SSSE3-LABEL: @shuffle_v8i16_45630127
496 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
498 %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>
499 ret <8 x i16> %shuffle
502 define <8 x i16> @shuffle_v8i16_37102735(<8 x i16> %a, <8 x i16> %b) {
503 ; SSE2-LABEL: @shuffle_v8i16_37102735
505 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,5,7]
506 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,1,3]
507 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
508 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
509 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,2,1,0,4,5,6,7]
510 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,4,5,6]
513 ; SSSE3-LABEL: @shuffle_v8i16_37102735
515 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
517 %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>
518 ret <8 x i16> %shuffle
521 define <8 x i16> @shuffle_v8i16_08192a3b(<8 x i16> %a, <8 x i16> %b) {
522 ; ALL-LABEL: @shuffle_v8i16_08192a3b
524 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
526 %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>
527 ret <8 x i16> %shuffle
530 define <8 x i16> @shuffle_v8i16_0c1d2e3f(<8 x i16> %a, <8 x i16> %b) {
531 ; ALL-LABEL: @shuffle_v8i16_0c1d2e3f
533 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
534 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
536 %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>
537 ret <8 x i16> %shuffle
540 define <8 x i16> @shuffle_v8i16_4c5d6e7f(<8 x i16> %a, <8 x i16> %b) {
541 ; ALL-LABEL: @shuffle_v8i16_4c5d6e7f
543 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
544 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
545 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
547 %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>
548 ret <8 x i16> %shuffle
551 define <8 x i16> @shuffle_v8i16_48596a7b(<8 x i16> %a, <8 x i16> %b) {
552 ; ALL-LABEL: @shuffle_v8i16_48596a7b
554 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
555 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
557 %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>
558 ret <8 x i16> %shuffle
561 define <8 x i16> @shuffle_v8i16_08196e7f(<8 x i16> %a, <8 x i16> %b) {
562 ; ALL-LABEL: @shuffle_v8i16_08196e7f
564 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[0,3,2,3]
565 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,3]
566 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
568 %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>
569 ret <8 x i16> %shuffle
572 define <8 x i16> @shuffle_v8i16_0c1d6879(<8 x i16> %a, <8 x i16> %b) {
573 ; ALL-LABEL: @shuffle_v8i16_0c1d6879
575 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,0,2,3]
576 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,3]
577 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
579 %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>
580 ret <8 x i16> %shuffle
583 define <8 x i16> @shuffle_v8i16_109832ba(<8 x i16> %a, <8 x i16> %b) {
584 ; ALL-LABEL: @shuffle_v8i16_109832ba
586 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
587 ; ALL-NEXT: pshuflw {{.*}} # xmm1 = xmm0[2,0,3,1,4,5,6,7]
588 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,2,3]
589 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,0,3,1,4,5,6,7]
590 ; ALL-NEXT: punpcklqdq %xmm0, %xmm1
591 ; ALL-NEXT: movdqa %xmm1, %xmm0
593 %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>
594 ret <8 x i16> %shuffle
597 define <8 x i16> @shuffle_v8i16_8091a2b3(<8 x i16> %a, <8 x i16> %b) {
598 ; ALL-LABEL: @shuffle_v8i16_8091a2b3
600 ; ALL-NEXT: punpcklwd %xmm0, %xmm1
601 ; ALL-NEXT: movdqa %xmm1, %xmm0
603 %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>
604 ret <8 x i16> %shuffle
606 define <8 x i16> @shuffle_v8i16_c4d5e6f7(<8 x i16> %a, <8 x i16> %b) {
607 ; ALL-LABEL: @shuffle_v8i16_c4d5e6f7
609 ; ALL-NEXT: pshufd {{.*}} # xmm2 = xmm0[2,3,0,1]
610 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm1[2,3,0,1]
611 ; ALL-NEXT: punpcklwd %xmm2, %xmm0
613 %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>
614 ret <8 x i16> %shuffle
617 define <8 x i16> @shuffle_v8i16_0213cedf(<8 x i16> %a, <8 x i16> %b) {
618 ; ALL-LABEL: @shuffle_v8i16_0213cedf
620 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
621 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,2,3]
622 ; ALL-NEXT: pshuflw {{.*}} # xmm1 = xmm1[0,2,1,3,4,5,6,7]
623 ; ALL-NEXT: punpcklqdq %xmm1, %xmm0
625 %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>
626 ret <8 x i16> %shuffle
629 define <8 x i16> @shuffle_v8i16_443aXXXX(<8 x i16> %a, <8 x i16> %b) {
630 ; SSE2-LABEL: @shuffle_v8i16_443aXXXX
632 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
633 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,2,3,4,5,6,7]
634 ; SSE2-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
635 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,3,4,5,6,7]
636 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,5,6,7]
637 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
640 ; SSSE3-LABEL: @shuffle_v8i16_443aXXXX
642 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
643 ; SSSE3-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,2,3,4,5,6,7]
644 ; SSSE3-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
645 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,4,5,12,13,10,11,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
647 %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>
648 ret <8 x i16> %shuffle
651 define <8 x i16> @shuffle_v8i16_032dXXXX(<8 x i16> %a, <8 x i16> %b) {
652 ; SSE2-LABEL: @shuffle_v8i16_032dXXXX
654 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
655 ; SSE2-NEXT: punpcklwd %xmm1, %xmm0
656 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,3,4,5,6,7]
657 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
658 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
659 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,1,4,5,6,7]
662 ; SSSE3-LABEL: @shuffle_v8i16_032dXXXX
664 ; SSSE3-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
665 ; SSSE3-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
666 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,12,13,8,9,6,7,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
668 %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>
669 ret <8 x i16> %shuffle
671 define <8 x i16> @shuffle_v8i16_XXXdXXXX(<8 x i16> %a, <8 x i16> %b) {
672 ; ALL-LABEL: @shuffle_v8i16_XXXdXXXX
674 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm1[2,2,3,3]
676 %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>
677 ret <8 x i16> %shuffle
680 define <8 x i16> @shuffle_v8i16_012dXXXX(<8 x i16> %a, <8 x i16> %b) {
681 ; SSE2-LABEL: @shuffle_v8i16_012dXXXX
683 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
684 ; SSE2-NEXT: punpcklwd %xmm1, %xmm0
685 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
686 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
687 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
688 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,0,3,4,5,6,7]
691 ; SSSE3-LABEL: @shuffle_v8i16_012dXXXX
693 ; SSSE3-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
694 ; SSSE3-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
695 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,4,5,8,9,6,7,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
697 %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>
698 ret <8 x i16> %shuffle
701 define <8 x i16> @shuffle_v8i16_XXXXcde3(<8 x i16> %a, <8 x i16> %b) {
702 ; SSE2-LABEL: @shuffle_v8i16_XXXXcde3
704 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
705 ; SSE2-NEXT: punpckhwd %xmm0, %xmm1
706 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,2,2,3,4,5,6,7]
707 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,7,6,7]
708 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,2]
711 ; SSSE3-LABEL: @shuffle_v8i16_XXXXcde3
713 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
714 ; SSSE3-NEXT: punpckhwd %xmm0, %xmm1 # xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
715 ; SSSE3-NEXT: pshufb {{.*}} # xmm1 = xmm1[{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}},0,1,4,5,8,9,14,15]
716 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
718 %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>
719 ret <8 x i16> %shuffle
722 define <8 x i16> @shuffle_v8i16_cde3XXXX(<8 x i16> %a, <8 x i16> %b) {
723 ; SSE2-LABEL: @shuffle_v8i16_cde3XXXX
725 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
726 ; SSE2-NEXT: punpckhwd %xmm0, %xmm1
727 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,2,2,3,4,5,6,7]
728 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,7,6,7]
729 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
732 ; SSSE3-LABEL: @shuffle_v8i16_cde3XXXX
734 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
735 ; SSSE3-NEXT: punpckhwd %xmm0, %xmm1 # xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
736 ; SSSE3-NEXT: pshufb {{.*}} # xmm1 = xmm1[0,1,4,5,8,9,14,15,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
737 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
739 %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>
740 ret <8 x i16> %shuffle
743 define <8 x i16> @shuffle_v8i16_012dcde3(<8 x i16> %a, <8 x i16> %b) {
744 ; SSE2-LABEL: @shuffle_v8i16_012dcde3
746 ; SSE2-NEXT: pshufd {{.*}} # xmm2 = xmm0[0,1,0,1]
747 ; SSE2-NEXT: pshufd {{.*}} # xmm3 = xmm1[2,3,0,1]
748 ; SSE2-NEXT: punpckhwd %xmm2, %xmm1
749 ; SSE2-NEXT: pshuflw {{.*}} # xmm1 = xmm1[0,2,2,3,4,5,6,7]
750 ; SSE2-NEXT: pshufhw {{.*}} # xmm1 = xmm1[0,1,2,3,4,7,6,7]
751 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[0,2,2,3]
752 ; SSE2-NEXT: punpcklwd %xmm3, %xmm0
753 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
754 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
755 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
756 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,0,3,4,5,6,7]
757 ; SSE2-NEXT: punpcklqdq %xmm1, %xmm0
760 ; SSSE3-LABEL: @shuffle_v8i16_012dcde3
762 ; SSSE3-NEXT: pshufd {{.*}} # xmm2 = xmm0[0,1,0,1]
763 ; SSSE3-NEXT: pshufd {{.*}} # xmm3 = xmm1[2,3,0,1]
764 ; SSSE3-NEXT: punpckhwd %xmm2, %xmm1 # xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
765 ; SSSE3-NEXT: pshufb {{.*}} # xmm1 = xmm1[0,1,4,5,8,9,14,15,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
766 ; SSSE3-NEXT: punpcklwd %xmm3, %xmm0 # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
767 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,4,5,8,9,6,7,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
768 ; SSSE3-NEXT: punpcklqdq %xmm1, %xmm0
770 %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>
771 ret <8 x i16> %shuffle
774 define <8 x i16> @shuffle_v8i16_XXX1X579(<8 x i16> %a, <8 x i16> %b) {
775 ; SSE2-LABEL: @shuffle_v8i16_XXX1X579
777 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,7]
778 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
779 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,3,2,4,5,6,7]
780 ; SSE2-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
781 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
782 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,2,1]
783 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,2,2,4,5,6,7]
784 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,5,7]
787 ; SSSE3-LABEL: @shuffle_v8i16_XXX1X579
789 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[{{[0-9]+,[0-9]+}},2,3,10,11,14,15,{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}}]
790 ; SSSE3-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
791 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[{{[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+,[0-9]+}},4,5,{{[0-9]+,[0-9]+}},8,9,12,13,6,7]
793 %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>
794 ret <8 x i16> %shuffle
797 define <8 x i16> @shuffle_v8i16_XX4X8acX(<8 x i16> %a, <8 x i16> %b) {
798 ; SSE2-LABEL: @shuffle_v8i16_XX4X8acX
800 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
801 ; SSE2-NEXT: pshuflw {{.*}} # xmm1 = xmm1[0,2,2,3,4,5,6,7]
802 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[0,2,2,3]
803 ; SSE2-NEXT: punpcklwd {{.*}} # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
804 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,1,2,0,4,5,6,7]
805 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,2,1]
806 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,1,3,4,5,6,7]
807 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,6,4,7]
810 ; SSSE3-LABEL: @shuffle_v8i16_XX4X8acX
812 ; SSSE3-NEXT: pshufd {{.*}} # [[X:xmm[0-9]+]] = xmm0[2,3,0,1]
813 ; SSSE3-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,2,2,3,4,5,6,7]
814 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
815 ; SSSE3-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],[[X]][0],xmm0[1],[[X]][1],xmm0[2],[[X]][2],xmm0[3],[[X]][3]
816 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[{{[0-9]+,[0-9]+,[0-9]+,[0-9]+}},2,3,{{[0-9]+,[0-9]+}},0,1,4,5,8,9,{{[0-9]+,[0-9]+}}]
818 %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>
819 ret <8 x i16> %shuffle
822 define <8 x i16> @shuffle_v8i16_8zzzzzzz(i16 %i) {
823 ; ALL-LABEL: @shuffle_v8i16_8zzzzzzz
825 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
826 ; ALL-NEXT: movd %[[R]], %xmm0
828 %a = insertelement <8 x i16> undef, i16 %i, i32 0
829 %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>
830 ret <8 x i16> %shuffle
833 define <8 x i16> @shuffle_v8i16_z8zzzzzz(i16 %i) {
834 ; ALL-LABEL: @shuffle_v8i16_z8zzzzzz
836 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
837 ; ALL-NEXT: movd %[[R]], %xmm0
838 ; ALL-NEXT: pslldq $2, %xmm0
840 %a = insertelement <8 x i16> undef, i16 %i, i32 0
841 %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>
842 ret <8 x i16> %shuffle
845 define <8 x i16> @shuffle_v8i16_zzzzz8zz(i16 %i) {
846 ; ALL-LABEL: @shuffle_v8i16_zzzzz8zz
848 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
849 ; ALL-NEXT: movd %[[R]], %xmm0
850 ; ALL-NEXT: pslldq $10, %xmm0
852 %a = insertelement <8 x i16> undef, i16 %i, i32 0
853 %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>
854 ret <8 x i16> %shuffle
857 define <8 x i16> @shuffle_v8i16_zuuzuuz8(i16 %i) {
858 ; ALL-LABEL: @shuffle_v8i16_zuuzuuz8
860 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
861 ; ALL-NEXT: movd %[[R]], %xmm0
862 ; ALL-NEXT: pslldq $14, %xmm0
864 %a = insertelement <8 x i16> undef, i16 %i, i32 0
865 %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>
866 ret <8 x i16> %shuffle
869 define <8 x i16> @shuffle_v8i16_zzBzzzzz(i16 %i) {
870 ; ALL-LABEL: @shuffle_v8i16_zzBzzzzz
872 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
873 ; ALL-NEXT: movd %[[R]], %xmm0
874 ; ALL-NEXT: pslldq $4, %xmm0
876 %a = insertelement <8 x i16> undef, i16 %i, i32 3
877 %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>
878 ret <8 x i16> %shuffle
881 define <8 x i16> @shuffle_v8i16_def01234(<8 x i16> %a, <8 x i16> %b) {
882 ; SSSE3-LABEL: @shuffle_v8i16_def01234
884 ; SSSE3-NEXT: palignr $10, {{.*}} # xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
886 %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>
887 ret <8 x i16> %shuffle
890 define <8 x i16> @shuffle_v8i16_ueuu123u(<8 x i16> %a, <8 x i16> %b) {
891 ; SSSE3-LABEL: @shuffle_v8i16_ueuu123u
893 ; SSSE3-NEXT: palignr $10, {{.*}} # xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]
895 %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>
896 ret <8 x i16> %shuffle
899 define <8 x i16> @shuffle_v8i16_56701234(<8 x i16> %a, <8 x i16> %b) {
900 ; SSSE3-LABEL: @shuffle_v8i16_56701234
902 ; SSSE3-NEXT: palignr $10, {{.*}} # xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
904 %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>
905 ret <8 x i16> %shuffle
908 define <8 x i16> @shuffle_v8i16_u6uu123u(<8 x i16> %a, <8 x i16> %b) {
909 ; SSSE3-LABEL: @shuffle_v8i16_u6uu123u
911 ; SSSE3-NEXT: palignr $10, {{.*}} # xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
913 %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>
914 ret <8 x i16> %shuffle
917 define <8 x i16> @shuffle_v8i16_uuuu123u(<8 x i16> %a, <8 x i16> %b) {
918 ; SSSE3-LABEL: @shuffle_v8i16_uuuu123u
920 ; SSSE3-NEXT: palignr $10, {{.*}} # xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]
922 %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>
923 ret <8 x i16> %shuffle
926 define <8 x i16> @shuffle_v8i16_bcdef012(<8 x i16> %a, <8 x i16> %b) {
927 ; SSSE3-LABEL: @shuffle_v8i16_bcdef012
929 ; SSSE3-NEXT: palignr $6, {{.*}} # xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
931 %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>
932 ret <8 x i16> %shuffle
935 define <8 x i16> @shuffle_v8i16_ucdeuu1u(<8 x i16> %a, <8 x i16> %b) {
936 ; SSSE3-LABEL: @shuffle_v8i16_ucdeuu1u
938 ; SSSE3-NEXT: palignr $6, {{.*}} # xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]
940 %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>
941 ret <8 x i16> %shuffle
944 define <8 x i16> @shuffle_v8i16_34567012(<8 x i16> %a, <8 x i16> %b) {
945 ; SSSE3-LABEL: @shuffle_v8i16_34567012
947 ; SSSE3-NEXT: palignr $6, {{.*}} # xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
949 %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>
950 ret <8 x i16> %shuffle
953 define <8 x i16> @shuffle_v8i16_u456uu1u(<8 x i16> %a, <8 x i16> %b) {
954 ; SSSE3-LABEL: @shuffle_v8i16_u456uu1u
956 ; SSSE3-NEXT: palignr $6, {{.*}} # xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
958 %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>
959 ret <8 x i16> %shuffle
962 define <8 x i16> @shuffle_v8i16_u456uuuu(<8 x i16> %a, <8 x i16> %b) {
963 ; SSSE3-LABEL: @shuffle_v8i16_u456uuuu
965 ; SSSE3-NEXT: palignr $6, {{.*}} # xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
967 %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>
968 ret <8 x i16> %shuffle
971 define <8 x i16> @shuffle_v8i16_3456789a(<8 x i16> %a, <8 x i16> %b) {
972 ; SSSE3-LABEL: @shuffle_v8i16_3456789a
974 ; SSSE3-NEXT: palignr $6, {{.*}} # xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
975 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
977 %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>
978 ret <8 x i16> %shuffle
981 define <8 x i16> @shuffle_v8i16_u456uu9u(<8 x i16> %a, <8 x i16> %b) {
982 ; SSSE3-LABEL: @shuffle_v8i16_u456uu9u
984 ; SSSE3-NEXT: palignr $6, {{.*}} # xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]
985 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
987 %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>
988 ret <8 x i16> %shuffle
991 define <8 x i16> @shuffle_v8i16_56789abc(<8 x i16> %a, <8 x i16> %b) {
992 ; SSSE3-LABEL: @shuffle_v8i16_56789abc
994 ; SSSE3-NEXT: palignr $10, {{.*}} # xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
995 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
997 %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>
998 ret <8 x i16> %shuffle
1001 define <8 x i16> @shuffle_v8i16_u6uu9abu(<8 x i16> %a, <8 x i16> %b) {
1002 ; SSSE3-LABEL: @shuffle_v8i16_u6uu9abu
1004 ; SSSE3-NEXT: palignr $10, {{.*}} # xmm1 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]
1005 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1007 %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>
1008 ret <8 x i16> %shuffle
1011 define <8 x i16> @shuffle_v8i16_0uuu1uuu(<8 x i16> %a) {
1012 ; SSE2-LABEL: @shuffle_v8i16_0uuu1uuu
1014 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,3]
1015 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,5,6,7]
1018 ; SSSE3-LABEL: @shuffle_v8i16_0uuu1uuu
1020 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,3]
1021 ; SSSE3-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,5,6,7]
1024 ; SSE41-LABEL: @shuffle_v8i16_0uuu1uuu
1026 ; SSE41-NEXT: pmovzxwq %xmm0, %xmm0
1028 %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>
1029 ret <8 x i16> %shuffle
1032 define <8 x i16> @shuffle_v8i16_0zzz1zzz(<8 x i16> %a) {
1033 ; SSE2-LABEL: @shuffle_v8i16_0zzz1zzz
1035 ; SSE2-NEXT: pxor %[[X1:xmm[0-9]+]], %[[X1]]
1036 ; SSE2-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],[[X1]][0],xmm0[1],[[X1]][1],xmm0[2],[[X1]][2],xmm0[3],[[X1]][3]
1037 ; SSE2-NEXT: punpckldq {{.*}} # xmm0 = xmm0[0],[[X1]][0],xmm0[1],[[X1]][1]
1040 ; SSSE3-LABEL: @shuffle_v8i16_0zzz1zzz
1042 ; SSSE3-NEXT: pxor %[[X1:xmm[0-9]+]], %[[X1]]
1043 ; SSSE3-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],[[X1]][0],xmm0[1],[[X1]][1],xmm0[2],[[X1]][2],xmm0[3],[[X1]][3]
1044 ; SSSE3-NEXT: punpckldq {{.*}} # xmm0 = xmm0[0],[[X1]][0],xmm0[1],[[X1]][1]
1047 ; SSE41-LABEL: @shuffle_v8i16_0zzz1zzz
1049 ; SSE41-NEXT: pmovzxwq %xmm0, %xmm0
1051 %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>
1052 ret <8 x i16> %shuffle
1055 define <8 x i16> @shuffle_v8i16_0u1u2u3u(<8 x i16> %a) {
1056 ; SSE2-LABEL: @shuffle_v8i16_0u1u2u3u
1058 ; SSE2-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3]
1061 ; SSSE3-LABEL: @shuffle_v8i16_0u1u2u3u
1063 ; SSSE3-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3]
1066 ; SSE41-LABEL: @shuffle_v8i16_0u1u2u3u
1068 ; SSE41-NEXT: pmovzxwd %xmm0, %xmm0
1070 %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>
1071 ret <8 x i16> %shuffle
1074 define <8 x i16> @shuffle_v8i16_0z1z2z3z(<8 x i16> %a) {
1075 ; SSE2-LABEL: @shuffle_v8i16_0z1z2z3z
1077 ; SSE2-NEXT: pxor %[[X:xmm[0-9]+]], %[[X]]
1078 ; SSE2-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],[[X]][0],xmm0[1],[[X]][1],xmm0[2],[[X]][2],xmm0[3],[[X]][3]
1081 ; SSSE3-LABEL: @shuffle_v8i16_0z1z2z3z
1083 ; SSSE3-NEXT: pxor %[[X:xmm[0-9]+]], %[[X]]
1084 ; SSSE3-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],[[X]][0],xmm0[1],[[X]][1],xmm0[2],[[X]][2],xmm0[3],[[X]][3]
1087 ; SSE41-LABEL: @shuffle_v8i16_0z1z2z3z
1089 ; SSE41-NEXT: pmovzxwd %xmm0, %xmm0
1091 %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>
1092 ret <8 x i16> %shuffle