xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shuffle-combining-ssse3.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512F
7*9880d681SAndroid Build Coastguard Worker;
8*9880d681SAndroid Build Coastguard Worker; Combine tests involving SSE3/SSSE3 target shuffles (MOVDDUP, MOVSHDUP, MOVSLDUP, PSHUFB)
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>)
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_vpshufb_zero(<16 x i8> %a0) {
13*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_vpshufb_zero:
14*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    xorps %xmm0, %xmm0
16*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker;
18*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_vpshufb_zero:
19*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
20*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm0
21*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
22*9880d681SAndroid Build Coastguard Worker  %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 128, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>)
23*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res0, <16 x i8> <i8 0, i8 128, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>)
24*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res1, <16 x i8> <i8 0, i8 1, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>)
25*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res2
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_vpshufb_movq(<16 x i8> %a0) {
29*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_vpshufb_movq:
30*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
31*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
32*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
33*9880d681SAndroid Build Coastguard Worker;
34*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_vpshufb_movq:
35*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
36*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
37*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
38*9880d681SAndroid Build Coastguard Worker  %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 0, i8 128, i8 1, i8 128, i8 2, i8 128, i8 3, i8 128, i8 4, i8 128, i8 5, i8 128, i8 6, i8 128, i8 7, i8 128>)
39*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res0, <16 x i8> <i8 0, i8 2, i8 4, i8 6, i8 8, i8 10, i8 12, i8 14, i8 1, i8 3, i8 5, i8 7, i8 9, i8 11, i8 13, i8 15>)
40*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res1
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @combine_pshufb_movddup(<4 x float> %a0) {
44*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_movddup:
45*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
46*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,7,7,7,7,5,5,5,5,7,7,7,7]
47*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
48*9880d681SAndroid Build Coastguard Worker;
49*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_movddup:
50*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
51*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,7,7,7,7,5,5,5,5,7,7,7,7]
52*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
53*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x float> %a0 to <16 x i8>
54*9880d681SAndroid Build Coastguard Worker  %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 7, i8 7, i8 7, i8 7, i8 1, i8 1, i8 1, i8 1, i8 3, i8 3, i8 3, i8 3>)
55*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <16 x i8> %2 to <4 x float>
56*9880d681SAndroid Build Coastguard Worker  %4 = shufflevector <4 x float> %3, <4 x float> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
57*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %4
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @combine_pshufb_movshdup(<4 x float> %a0) {
61*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_movshdup:
62*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
63*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3]
64*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
65*9880d681SAndroid Build Coastguard Worker;
66*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_movshdup:
67*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
68*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3]
69*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
70*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x float> %a0 to <16 x i8>
71*9880d681SAndroid Build Coastguard Worker  %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 7, i8 7, i8 7, i8 7, i8 1, i8 1, i8 1, i8 1, i8 3, i8 3, i8 3, i8 3>)
72*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <16 x i8> %2 to <4 x float>
73*9880d681SAndroid Build Coastguard Worker  %4 = shufflevector <4 x float> %3, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
74*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %4
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @combine_pshufb_movsldup(<4 x float> %a0) {
78*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_movsldup:
79*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1]
81*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
82*9880d681SAndroid Build Coastguard Worker;
83*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_movsldup:
84*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
85*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1]
86*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
87*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x float> %a0 to <16 x i8>
88*9880d681SAndroid Build Coastguard Worker  %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 7, i8 7, i8 7, i8 7, i8 1, i8 1, i8 1, i8 1, i8 3, i8 3, i8 3, i8 3>)
89*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <16 x i8> %2 to <4 x float>
90*9880d681SAndroid Build Coastguard Worker  %4 = shufflevector <4 x float> %3, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
91*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %4
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_palignr(<16 x i8> %a0, <16 x i8> %a1) {
95*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_palignr:
96*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
97*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
98*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
99*9880d681SAndroid Build Coastguard Worker;
100*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_palignr:
101*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
102*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
103*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
104*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>
105*9880d681SAndroid Build Coastguard Worker  %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>)
106*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_pslldq(<16 x i8> %a0) {
110*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_pslldq:
111*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
112*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    xorps %xmm0, %xmm0
113*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
114*9880d681SAndroid Build Coastguard Worker;
115*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_pslldq:
116*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
117*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm0
118*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
119*9880d681SAndroid Build Coastguard Worker  %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>)
120*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <16 x i8> %1, <16 x i8> zeroinitializer, <16 x i32> <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
121*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_psrldq(<16 x i8> %a0) {
125*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_psrldq:
126*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    xorps %xmm0, %xmm0
128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
129*9880d681SAndroid Build Coastguard Worker;
130*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_psrldq:
131*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
132*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm0
133*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
134*9880d681SAndroid Build Coastguard Worker  %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>)
135*9880d681SAndroid Build Coastguard Worker  %2 = shufflevector <16 x i8> %1, <16 x i8> zeroinitializer, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
136*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_pslldq(<16 x i8> %a0) {
140*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_pslldq:
141*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
144*9880d681SAndroid Build Coastguard Worker;
145*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_pslldq:
146*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
147*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]
148*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
149*9880d681SAndroid Build Coastguard Worker  %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>)
150*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res0
151*9880d681SAndroid Build Coastguard Worker}
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_psrldq(<16 x i8> %a0) {
154*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_psrldq:
155*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
156*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
157*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
158*9880d681SAndroid Build Coastguard Worker;
159*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_psrldq:
160*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
161*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
162*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
163*9880d681SAndroid Build Coastguard Worker  %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>)
164*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res0
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_pshuflw(<16 x i8> %a0) {
168*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_pshuflw:
169*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
170*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
171*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
172*9880d681SAndroid Build Coastguard Worker;
173*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_pshuflw:
174*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
175*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
176*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
177*9880d681SAndroid Build Coastguard Worker  %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 2, i8 3, i8 0, i8 1, i8 6, i8 7, i8 4, i8 5, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>)
178*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res0
179*9880d681SAndroid Build Coastguard Worker}
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_pshufhw(<16 x i8> %a0) {
182*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_pshufhw:
183*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
185*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
186*9880d681SAndroid Build Coastguard Worker;
187*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_pshufhw:
188*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
189*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
190*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
191*9880d681SAndroid Build Coastguard Worker  %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 10, i8 11, i8 8, i8 9, i8 14, i8 15, i8 12, i8 13>)
192*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res0
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_not_as_pshufw(<16 x i8> %a0) {
196*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_not_as_pshufw:
197*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
198*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
200*9880d681SAndroid Build Coastguard Worker;
201*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_not_as_pshufw:
202*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
203*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]
204*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
205*9880d681SAndroid Build Coastguard Worker  %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 2, i8 3, i8 0, i8 1, i8 6, i8 7, i8 4, i8 5, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>)
206*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res0, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 10, i8 11, i8 8, i8 9, i8 14, i8 15, i8 12, i8 13>)
207*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res1
208*9880d681SAndroid Build Coastguard Worker}
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_unary_unpcklbw(<16 x i8> %a0) {
211*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_unary_unpcklbw:
212*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
215*9880d681SAndroid Build Coastguard Worker;
216*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_unary_unpcklbw:
217*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
218*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
219*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
220*9880d681SAndroid Build Coastguard Worker  %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 0, i8 undef, i8 undef, i8 1, i8 2, i8 2, i8 3, i8 3, i8 4, i8 4, i8 5, i8 5, i8 6, i8 6, i8 7, i8 7>)
221*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %1
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_unary_unpckhwd(<16 x i8> %a0) {
225*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_unary_unpckhwd:
226*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
227*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
229*9880d681SAndroid Build Coastguard Worker;
230*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_unary_unpckhwd:
231*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
232*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
233*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
234*9880d681SAndroid Build Coastguard Worker  %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 8, i8 9, i8 8, i8 9, i8 10, i8 11, i8 10, i8 11, i8 12, i8 13, i8 12, i8 13, i8 14, i8 15, i8 undef, i8 undef>)
235*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %1
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_unpckl_arg0_pshufb(<16 x i8> %a0, <16 x i8> %a1) {
239*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_unpckl_arg0_pshufb:
240*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero
242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
243*9880d681SAndroid Build Coastguard Worker;
244*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_unpckl_arg0_pshufb:
245*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
246*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero
247*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
248*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
249*9880d681SAndroid Build Coastguard Worker  %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1>)
250*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
251*9880d681SAndroid Build Coastguard Worker}
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_unpckl_arg1_pshufb(<16 x i8> %a0, <16 x i8> %a1) {
254*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_unpckl_arg1_pshufb:
255*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
256*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero
257*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm0
258*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
259*9880d681SAndroid Build Coastguard Worker;
260*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_unpckl_arg1_pshufb:
261*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
262*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero
263*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
264*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
265*9880d681SAndroid Build Coastguard Worker  %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 1, i8 -1, i8 -1, i8 -1, i8 1, i8 -1, i8 -1, i8 -1, i8 1, i8 -1, i8 -1, i8 -1, i8 1, i8 -1, i8 -1, i8 -1>)
266*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
267*9880d681SAndroid Build Coastguard Worker}
268