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 ; ALL-LABEL: @shuffle_v8i16_456789AB
26 ; ALL: shufpd {{.*}} # xmm0 = xmm0[1],xmm1[0]
28 %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>
29 ret <8 x i16> %shuffle
32 define <8 x i16> @shuffle_v8i16_00000000(<8 x i16> %a, <8 x i16> %b) {
33 ; SSE2-LABEL: @shuffle_v8i16_00000000
35 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,3]
36 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,0,0,4,5,6,7]
37 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
40 ; SSSE3-LABEL: @shuffle_v8i16_00000000
42 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
44 %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>
45 ret <8 x i16> %shuffle
47 define <8 x i16> @shuffle_v8i16_00004444(<8 x i16> %a, <8 x i16> %b) {
48 ; ALL-LABEL: @shuffle_v8i16_00004444
50 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,0,0,4,5,6,7]
51 ; ALL-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
53 %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>
54 ret <8 x i16> %shuffle
56 define <8 x i16> @shuffle_v8i16_u0u1u2u3(<8 x i16> %a, <8 x i16> %b) {
57 ; ALL-LABEL: @shuffle_v8i16_u0u1u2u3
59 ; ALL-NEXT: unpcklwd {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3]
61 %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>
62 ret <8 x i16> %shuffle
64 define <8 x i16> @shuffle_v8i16_u4u5u6u7(<8 x i16> %a, <8 x i16> %b) {
65 ; ALL-LABEL: @shuffle_v8i16_u4u5u6u7
67 ; ALL-NEXT: unpckhwd {{.*}} # xmm0 = xmm0[4,4,5,5,6,6,7,7]
69 %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>
70 ret <8 x i16> %shuffle
72 define <8 x i16> @shuffle_v8i16_31206745(<8 x i16> %a, <8 x i16> %b) {
73 ; ALL-LABEL: @shuffle_v8i16_31206745
75 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,1,2,0,4,5,6,7]
76 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,3,2]
78 %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>
79 ret <8 x i16> %shuffle
81 define <8 x i16> @shuffle_v8i16_44440000(<8 x i16> %a, <8 x i16> %b) {
82 ; SSE2-LABEL: @shuffle_v8i16_44440000
84 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,0,3]
85 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,0,0,4,5,6,7]
86 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
89 ; SSSE3-LABEL: @shuffle_v8i16_44440000
91 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]
93 %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>
94 ret <8 x i16> %shuffle
96 define <8 x i16> @shuffle_v8i16_75643120(<8 x i16> %a, <8 x i16> %b) {
97 ; SSE2-LABEL: @shuffle_v8i16_75643120
99 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
100 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,1,2,0,4,5,6,7]
101 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
104 ; SSSE3-LABEL: @shuffle_v8i16_75643120
106 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]
108 %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>
109 ret <8 x i16> %shuffle
112 define <8 x i16> @shuffle_v8i16_10545410(<8 x i16> %a, <8 x i16> %b) {
113 ; SSE2-LABEL: @shuffle_v8i16_10545410
115 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
116 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,0,3,2,4,5,6,7]
117 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,4,7,6]
120 ; SSSE3-LABEL: @shuffle_v8i16_10545410
122 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]
124 %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>
125 ret <8 x i16> %shuffle
127 define <8 x i16> @shuffle_v8i16_54105410(<8 x i16> %a, <8 x i16> %b) {
128 ; SSE2-LABEL: @shuffle_v8i16_54105410
130 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
131 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,2,1,0,4,5,6,7]
132 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,4,7,6]
135 ; SSSE3-LABEL: @shuffle_v8i16_54105410
137 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]
139 %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>
140 ret <8 x i16> %shuffle
142 define <8 x i16> @shuffle_v8i16_54101054(<8 x i16> %a, <8 x i16> %b) {
143 ; SSE2-LABEL: @shuffle_v8i16_54101054
145 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
146 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,2,1,0,4,5,6,7]
147 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,6,5,4]
150 ; SSSE3-LABEL: @shuffle_v8i16_54101054
152 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]
154 %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>
155 ret <8 x i16> %shuffle
157 define <8 x i16> @shuffle_v8i16_04400440(<8 x i16> %a, <8 x i16> %b) {
158 ; SSE2-LABEL: @shuffle_v8i16_04400440
160 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
161 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
162 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,4,4,6]
165 ; SSSE3-LABEL: @shuffle_v8i16_04400440
167 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]
169 %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>
170 ret <8 x i16> %shuffle
172 define <8 x i16> @shuffle_v8i16_40044004(<8 x i16> %a, <8 x i16> %b) {
173 ; SSE2-LABEL: @shuffle_v8i16_40044004
175 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,0]
176 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,0,0,2,4,5,6,7]
177 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,4]
180 ; SSSE3-LABEL: @shuffle_v8i16_40044004
182 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]
184 %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>
185 ret <8 x i16> %shuffle
188 define <8 x i16> @shuffle_v8i16_26405173(<8 x i16> %a, <8 x i16> %b) {
189 ; SSE2-LABEL: @shuffle_v8i16_26405173
191 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
192 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
193 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,1]
194 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,3,0,4,5,6,7]
195 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,6,4,7]
198 ; SSSE3-LABEL: @shuffle_v8i16_26405173
200 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]
202 %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>
203 ret <8 x i16> %shuffle
205 define <8 x i16> @shuffle_v8i16_20645173(<8 x i16> %a, <8 x i16> %b) {
206 ; SSE2-LABEL: @shuffle_v8i16_20645173
208 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
209 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
210 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,1]
211 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,0,2,3,4,5,6,7]
212 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,5,6,4,7]
215 ; SSSE3-LABEL: @shuffle_v8i16_20645173
217 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]
219 %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>
220 ret <8 x i16> %shuffle
222 define <8 x i16> @shuffle_v8i16_26401375(<8 x i16> %a, <8 x i16> %b) {
223 ; SSE2-LABEL: @shuffle_v8i16_26401375
225 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
226 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
227 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,1,2]
228 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,3,0,4,5,6,7]
231 ; SSSE3-LABEL: @shuffle_v8i16_26401375
233 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]
235 %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>
236 ret <8 x i16> %shuffle
239 define <8 x i16> @shuffle_v8i16_66751643(<8 x i16> %a, <8 x i16> %b) {
240 ; SSE2-LABEL: @shuffle_v8i16_66751643
242 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,1,2,3,4,5,6,7]
243 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,5,7]
244 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,2,0]
245 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,1,3,2,4,5,6,7]
246 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,4,6]
249 ; SSSE3-LABEL: @shuffle_v8i16_66751643
251 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]
253 %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>
254 ret <8 x i16> %shuffle
257 define <8 x i16> @shuffle_v8i16_60514754(<8 x i16> %a, <8 x i16> %b) {
258 ; SSE2-LABEL: @shuffle_v8i16_60514754
260 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,5,4,7]
261 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
262 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,0,3,1,4,5,6,7]
263 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,7,5,6]
266 ; SSSE3-LABEL: @shuffle_v8i16_60514754
268 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[12,13,0,1,10,11,2,3,8,9,14,15,10,11,8,9]
270 %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>
271 ret <8 x i16> %shuffle
274 define <8 x i16> @shuffle_v8i16_00444444(<8 x i16> %a, <8 x i16> %b) {
275 ; SSE2-LABEL: @shuffle_v8i16_00444444
277 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
278 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,2,2,4,5,6,7]
279 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
282 ; SSSE3-LABEL: @shuffle_v8i16_00444444
284 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]
286 %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>
287 ret <8 x i16> %shuffle
289 define <8 x i16> @shuffle_v8i16_44004444(<8 x i16> %a, <8 x i16> %b) {
290 ; SSE2-LABEL: @shuffle_v8i16_44004444
292 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
293 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,2,0,0,4,5,6,7]
294 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
297 ; SSSE3-LABEL: @shuffle_v8i16_44004444
299 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]
301 %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>
302 ret <8 x i16> %shuffle
304 define <8 x i16> @shuffle_v8i16_04404444(<8 x i16> %a, <8 x i16> %b) {
305 ; SSE2-LABEL: @shuffle_v8i16_04404444
307 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
308 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
309 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
312 ; SSSE3-LABEL: @shuffle_v8i16_04404444
314 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]
316 %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>
317 ret <8 x i16> %shuffle
319 define <8 x i16> @shuffle_v8i16_04400000(<8 x i16> %a, <8 x i16> %b) {
320 ; SSE2-LABEL: @shuffle_v8i16_04400000
322 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,0,3]
323 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
324 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
327 ; SSSE3-LABEL: @shuffle_v8i16_04400000
329 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]
331 %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>
332 ret <8 x i16> %shuffle
334 define <8 x i16> @shuffle_v8i16_04404567(<8 x i16> %a, <8 x i16> %b) {
335 ; ALL-LABEL: @shuffle_v8i16_04404567
337 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
338 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
340 %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>
341 ret <8 x i16> %shuffle
344 define <8 x i16> @shuffle_v8i16_0X444444(<8 x i16> %a, <8 x i16> %b) {
345 ; SSE2-LABEL: @shuffle_v8i16_0X444444
347 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
348 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,2,2,4,5,6,7]
349 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
352 ; SSSE3-LABEL: @shuffle_v8i16_0X444444
354 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,{{[0-9]+,[0-9]+}},8,9,8,9,8,9,8,9,8,9,8,9]
356 %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>
357 ret <8 x i16> %shuffle
359 define <8 x i16> @shuffle_v8i16_44X04444(<8 x i16> %a, <8 x i16> %b) {
360 ; SSE2-LABEL: @shuffle_v8i16_44X04444
362 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
363 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,2,2,0,4,5,6,7]
364 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
367 ; SSSE3-LABEL: @shuffle_v8i16_44X04444
369 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,8,9,{{[0-9]+,[0-9]+}},0,1,8,9,8,9,8,9,8,9]
371 %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>
372 ret <8 x i16> %shuffle
374 define <8 x i16> @shuffle_v8i16_X4404444(<8 x i16> %a, <8 x i16> %b) {
375 ; SSE2-LABEL: @shuffle_v8i16_X4404444
377 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
378 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,0,4,5,6,7]
379 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,4,4]
382 ; SSSE3-LABEL: @shuffle_v8i16_X4404444
384 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[{{[0-9]+,[0-9]+}},8,9,8,9,0,1,8,9,8,9,8,9,8,9]
386 %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>
387 ret <8 x i16> %shuffle
390 define <8 x i16> @shuffle_v8i16_0127XXXX(<8 x i16> %a, <8 x i16> %b) {
391 ; SSE2-LABEL: @shuffle_v8i16_0127XXXX
393 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,1,3]
394 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,7,6,7]
395 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
398 ; SSSE3-LABEL: @shuffle_v8i16_0127XXXX
400 ; 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]+}}]
402 %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>
403 ret <8 x i16> %shuffle
406 define <8 x i16> @shuffle_v8i16_XXXX4563(<8 x i16> %a, <8 x i16> %b) {
407 ; SSE2-LABEL: @shuffle_v8i16_XXXX4563
409 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
410 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,3,4,5,6,7]
411 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,2,0]
414 ; SSSE3-LABEL: @shuffle_v8i16_XXXX4563
416 ; 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]
418 %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>
419 ret <8 x i16> %shuffle
422 define <8 x i16> @shuffle_v8i16_4563XXXX(<8 x i16> %a, <8 x i16> %b) {
423 ; SSE2-LABEL: @shuffle_v8i16_4563XXXX
425 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
426 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,3,4,5,6,7]
427 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,0,2,3]
430 ; SSSE3-LABEL: @shuffle_v8i16_4563XXXX
432 ; 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]+}}]
434 %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>
435 ret <8 x i16> %shuffle
438 define <8 x i16> @shuffle_v8i16_01274563(<8 x i16> %a, <8 x i16> %b) {
439 ; SSE2-LABEL: @shuffle_v8i16_01274563
441 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,1,3]
442 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,5,4,7]
443 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,1,2]
446 ; SSSE3-LABEL: @shuffle_v8i16_01274563
448 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]
450 %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>
451 ret <8 x i16> %shuffle
454 define <8 x i16> @shuffle_v8i16_45630127(<8 x i16> %a, <8 x i16> %b) {
455 ; SSE2-LABEL: @shuffle_v8i16_45630127
457 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
458 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,1,4,5,6,7]
459 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,0,3,1]
462 ; SSSE3-LABEL: @shuffle_v8i16_45630127
464 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]
466 %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>
467 ret <8 x i16> %shuffle
470 define <8 x i16> @shuffle_v8i16_37102735(<8 x i16> %a, <8 x i16> %b) {
471 ; SSE2-LABEL: @shuffle_v8i16_37102735
473 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,5,7]
474 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,1,3]
475 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,4]
476 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
477 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[3,2,1,0,4,5,6,7]
478 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,4,5,6]
481 ; SSSE3-LABEL: @shuffle_v8i16_37102735
483 ; SSSE3-NEXT: pshufb {{.*}} # xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]
485 %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>
486 ret <8 x i16> %shuffle
489 define <8 x i16> @shuffle_v8i16_08192a3b(<8 x i16> %a, <8 x i16> %b) {
490 ; ALL-LABEL: @shuffle_v8i16_08192a3b
492 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
494 %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>
495 ret <8 x i16> %shuffle
498 define <8 x i16> @shuffle_v8i16_0c1d2e3f(<8 x i16> %a, <8 x i16> %b) {
499 ; ALL-LABEL: @shuffle_v8i16_0c1d2e3f
501 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
502 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
504 %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>
505 ret <8 x i16> %shuffle
508 define <8 x i16> @shuffle_v8i16_4c5d6e7f(<8 x i16> %a, <8 x i16> %b) {
509 ; ALL-LABEL: @shuffle_v8i16_4c5d6e7f
511 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
512 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
513 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
515 %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>
516 ret <8 x i16> %shuffle
519 define <8 x i16> @shuffle_v8i16_48596a7b(<8 x i16> %a, <8 x i16> %b) {
520 ; ALL-LABEL: @shuffle_v8i16_48596a7b
522 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
523 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
525 %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>
526 ret <8 x i16> %shuffle
529 define <8 x i16> @shuffle_v8i16_08196e7f(<8 x i16> %a, <8 x i16> %b) {
530 ; ALL-LABEL: @shuffle_v8i16_08196e7f
532 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[0,3,2,3]
533 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,3]
534 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
536 %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>
537 ret <8 x i16> %shuffle
540 define <8 x i16> @shuffle_v8i16_0c1d6879(<8 x i16> %a, <8 x i16> %b) {
541 ; ALL-LABEL: @shuffle_v8i16_0c1d6879
543 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,0,2,3]
544 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,3,2,3]
545 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
547 %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>
548 ret <8 x i16> %shuffle
551 define <8 x i16> @shuffle_v8i16_109832ba(<8 x i16> %a, <8 x i16> %b) {
552 ; ALL-LABEL: @shuffle_v8i16_109832ba
554 ; ALL-NEXT: punpcklwd %xmm1, %xmm0
555 ; ALL-NEXT: pshuflw {{.*}} # xmm1 = xmm0[2,0,3,1,4,5,6,7]
556 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,2,3]
557 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[2,0,3,1,4,5,6,7]
558 ; ALL-NEXT: punpcklqdq %xmm0, %xmm1
559 ; ALL-NEXT: movdqa %xmm1, %xmm0
561 %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>
562 ret <8 x i16> %shuffle
565 define <8 x i16> @shuffle_v8i16_8091a2b3(<8 x i16> %a, <8 x i16> %b) {
566 ; ALL-LABEL: @shuffle_v8i16_8091a2b3
568 ; ALL-NEXT: punpcklwd %xmm0, %xmm1
569 ; ALL-NEXT: movdqa %xmm1, %xmm0
571 %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>
572 ret <8 x i16> %shuffle
574 define <8 x i16> @shuffle_v8i16_c4d5e6f7(<8 x i16> %a, <8 x i16> %b) {
575 ; ALL-LABEL: @shuffle_v8i16_c4d5e6f7
577 ; ALL-NEXT: pshufd {{.*}} # xmm2 = xmm0[2,3,0,1]
578 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm1[2,3,0,1]
579 ; ALL-NEXT: punpcklwd %xmm2, %xmm0
581 %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>
582 ret <8 x i16> %shuffle
585 define <8 x i16> @shuffle_v8i16_0213cedf(<8 x i16> %a, <8 x i16> %b) {
586 ; ALL-LABEL: @shuffle_v8i16_0213cedf
588 ; ALL-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,1,3,4,5,6,7]
589 ; ALL-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,2,3]
590 ; ALL-NEXT: pshuflw {{.*}} # xmm1 = xmm1[0,2,1,3,4,5,6,7]
591 ; ALL-NEXT: punpcklqdq %xmm1, %xmm0
593 %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>
594 ret <8 x i16> %shuffle
597 define <8 x i16> @shuffle_v8i16_443aXXXX(<8 x i16> %a, <8 x i16> %b) {
598 ; SSE2-LABEL: @shuffle_v8i16_443aXXXX
600 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
601 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,2,3,4,5,6,7]
602 ; SSE2-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
603 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,2,2,3,4,5,6,7]
604 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,6,5,6,7]
605 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
608 ; SSSE3-LABEL: @shuffle_v8i16_443aXXXX
610 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
611 ; SSSE3-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,0,2,3,4,5,6,7]
612 ; SSSE3-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
613 ; 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]+}}]
615 %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>
616 ret <8 x i16> %shuffle
619 define <8 x i16> @shuffle_v8i16_032dXXXX(<8 x i16> %a, <8 x i16> %b) {
620 ; SSE2-LABEL: @shuffle_v8i16_032dXXXX
622 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
623 ; SSE2-NEXT: punpcklwd %xmm1, %xmm0
624 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,3,4,5,6,7]
625 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
626 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
627 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,3,2,1,4,5,6,7]
630 ; SSSE3-LABEL: @shuffle_v8i16_032dXXXX
632 ; SSSE3-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
633 ; SSSE3-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
634 ; 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]+}}]
636 %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>
637 ret <8 x i16> %shuffle
639 define <8 x i16> @shuffle_v8i16_XXXdXXXX(<8 x i16> %a, <8 x i16> %b) {
640 ; ALL-LABEL: @shuffle_v8i16_XXXdXXXX
642 ; ALL-NEXT: pshufd {{.*}} # xmm0 = xmm1[2,2,3,3]
644 %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>
645 ret <8 x i16> %shuffle
648 define <8 x i16> @shuffle_v8i16_012dXXXX(<8 x i16> %a, <8 x i16> %b) {
649 ; SSE2-LABEL: @shuffle_v8i16_012dXXXX
651 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
652 ; SSE2-NEXT: punpcklwd %xmm1, %xmm0
653 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
654 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
655 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
656 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,0,3,4,5,6,7]
659 ; SSSE3-LABEL: @shuffle_v8i16_012dXXXX
661 ; SSSE3-NEXT: pshufd {{.*}} # xmm1 = xmm1[2,3,0,1]
662 ; SSSE3-NEXT: punpcklwd %xmm1, %xmm0 # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
663 ; 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]+}}]
665 %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>
666 ret <8 x i16> %shuffle
669 define <8 x i16> @shuffle_v8i16_XXXXcde3(<8 x i16> %a, <8 x i16> %b) {
670 ; SSE2-LABEL: @shuffle_v8i16_XXXXcde3
672 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
673 ; SSE2-NEXT: punpckhwd %xmm0, %xmm1
674 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,2,2,3,4,5,6,7]
675 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,7,6,7]
676 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,2]
679 ; SSSE3-LABEL: @shuffle_v8i16_XXXXcde3
681 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
682 ; SSSE3-NEXT: punpckhwd %xmm0, %xmm1 # xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
683 ; 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]
684 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
686 %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>
687 ret <8 x i16> %shuffle
690 define <8 x i16> @shuffle_v8i16_cde3XXXX(<8 x i16> %a, <8 x i16> %b) {
691 ; SSE2-LABEL: @shuffle_v8i16_cde3XXXX
693 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
694 ; SSE2-NEXT: punpckhwd %xmm0, %xmm1
695 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,2,2,3,4,5,6,7]
696 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,7,6,7]
697 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
700 ; SSSE3-LABEL: @shuffle_v8i16_cde3XXXX
702 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,0,1]
703 ; SSSE3-NEXT: punpckhwd %xmm0, %xmm1 # xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
704 ; 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]+}}]
705 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
707 %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>
708 ret <8 x i16> %shuffle
711 define <8 x i16> @shuffle_v8i16_012dcde3(<8 x i16> %a, <8 x i16> %b) {
712 ; SSE2-LABEL: @shuffle_v8i16_012dcde3
714 ; SSE2-NEXT: pshufd {{.*}} # xmm2 = xmm0[0,1,0,1]
715 ; SSE2-NEXT: pshufd {{.*}} # xmm3 = xmm1[2,3,0,1]
716 ; SSE2-NEXT: punpckhwd %xmm2, %xmm1
717 ; SSE2-NEXT: pshuflw {{.*}} # xmm1 = xmm1[0,2,2,3,4,5,6,7]
718 ; SSE2-NEXT: pshufhw {{.*}} # xmm1 = xmm1[0,1,2,3,4,7,6,7]
719 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[0,2,2,3]
720 ; SSE2-NEXT: punpcklwd %xmm3, %xmm0
721 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[3,1,2,0]
722 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
723 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,1,2,3]
724 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[1,2,0,3,4,5,6,7]
725 ; SSE2-NEXT: punpcklqdq %xmm1, %xmm0
728 ; SSSE3-LABEL: @shuffle_v8i16_012dcde3
730 ; SSSE3-NEXT: pshufd {{.*}} # xmm2 = xmm0[0,1,0,1]
731 ; SSSE3-NEXT: pshufd {{.*}} # xmm3 = xmm1[2,3,0,1]
732 ; SSSE3-NEXT: punpckhwd %xmm2, %xmm1 # xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
733 ; 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]+}}]
734 ; SSSE3-NEXT: punpcklwd %xmm3, %xmm0 # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
735 ; 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]+}}]
736 ; SSSE3-NEXT: punpcklqdq %xmm1, %xmm0
738 %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>
739 ret <8 x i16> %shuffle
742 define <8 x i16> @shuffle_v8i16_XXX1X579(<8 x i16> %a, <8 x i16> %b) {
743 ; SSE2-LABEL: @shuffle_v8i16_XXX1X579
745 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,5,6,7]
746 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
747 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,3,2,4,5,6,7]
748 ; SSE2-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
749 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,6,6,7]
750 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,2,1]
751 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,2,2,4,5,6,7]
752 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,4,4,5,7]
755 ; SSSE3-LABEL: @shuffle_v8i16_XXX1X579
757 ; 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]+}}]
758 ; SSSE3-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
759 ; 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]
761 %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>
762 ret <8 x i16> %shuffle
765 define <8 x i16> @shuffle_v8i16_XX4X8acX(<8 x i16> %a, <8 x i16> %b) {
766 ; SSE2-LABEL: @shuffle_v8i16_XX4X8acX
768 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[2,3,0,1]
769 ; SSE2-NEXT: pshuflw {{.*}} # xmm1 = xmm1[0,2,2,3,4,5,6,7]
770 ; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[0,2,2,3]
771 ; SSE2-NEXT: punpcklwd {{.*}} # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
772 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,1,2,0,4,5,6,7]
773 ; SSE2-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,1,2,1]
774 ; SSE2-NEXT: pshuflw {{.*}} # xmm0 = xmm0[0,1,1,3,4,5,6,7]
775 ; SSE2-NEXT: pshufhw {{.*}} # xmm0 = xmm0[0,1,2,3,7,6,4,7]
778 ; SSSE3-LABEL: @shuffle_v8i16_XX4X8acX
780 ; SSSE3-NEXT: pshufd {{.*}} # [[X:xmm[0-9]+]] = xmm0[2,3,0,1]
781 ; SSSE3-NEXT: pshuflw {{.*}} # xmm0 = xmm1[0,2,2,3,4,5,6,7]
782 ; SSSE3-NEXT: pshufd {{.*}} # xmm0 = xmm0[0,2,2,3]
783 ; SSSE3-NEXT: punpcklwd {{.*}} # xmm0 = xmm0[0],[[X]][0],xmm0[1],[[X]][1],xmm0[2],[[X]][2],xmm0[3],[[X]][3]
784 ; 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]+}}]
786 %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>
787 ret <8 x i16> %shuffle
790 define <8 x i16> @shuffle_v8i16_8zzzzzzz(i16 %i) {
791 ; ALL-LABEL: @shuffle_v8i16_8zzzzzzz
793 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
794 ; ALL-NEXT: movd %[[R]], %xmm0
796 %a = insertelement <8 x i16> undef, i16 %i, i32 0
797 %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>
798 ret <8 x i16> %shuffle
801 define <8 x i16> @shuffle_v8i16_z8zzzzzz(i16 %i) {
802 ; ALL-LABEL: @shuffle_v8i16_z8zzzzzz
804 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
805 ; ALL-NEXT: movd %[[R]], %xmm0
806 ; ALL-NEXT: pslldq $2, %xmm0
808 %a = insertelement <8 x i16> undef, i16 %i, i32 0
809 %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>
810 ret <8 x i16> %shuffle
813 define <8 x i16> @shuffle_v8i16_zzzzz8zz(i16 %i) {
814 ; ALL-LABEL: @shuffle_v8i16_zzzzz8zz
816 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
817 ; ALL-NEXT: movd %[[R]], %xmm0
818 ; ALL-NEXT: pslldq $10, %xmm0
820 %a = insertelement <8 x i16> undef, i16 %i, i32 0
821 %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>
822 ret <8 x i16> %shuffle
825 define <8 x i16> @shuffle_v8i16_zuuzuuz8(i16 %i) {
826 ; ALL-LABEL: @shuffle_v8i16_zuuzuuz8
828 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
829 ; ALL-NEXT: movd %[[R]], %xmm0
830 ; ALL-NEXT: pslldq $14, %xmm0
832 %a = insertelement <8 x i16> undef, i16 %i, i32 0
833 %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>
834 ret <8 x i16> %shuffle
837 define <8 x i16> @shuffle_v8i16_zzBzzzzz(i16 %i) {
838 ; ALL-LABEL: @shuffle_v8i16_zzBzzzzz
840 ; ALL-NEXT: movzwl {{.*}}, %[[R:.*]]
841 ; ALL-NEXT: movd %[[R]], %xmm0
842 ; ALL-NEXT: pslldq $4, %xmm0
844 %a = insertelement <8 x i16> undef, i16 %i, i32 3
845 %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>
846 ret <8 x i16> %shuffle