xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/ssse3-intrinsics-fast-isel.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 -fast-isel -mtriple=i386-unknown-unknown -mattr=ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=X32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=X64
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/ssse3-builtins.c
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_abs_epi8(<2 x i64> %a0) {
8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_abs_epi8:
9*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pabsb %xmm0, %xmm0
11*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
12*9880d681SAndroid Build Coastguard Worker;
13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_abs_epi8:
14*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pabsb %xmm0, %xmm0
16*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker  %arg = bitcast <2 x i64> %a0 to <16 x i8>
18*9880d681SAndroid Build Coastguard Worker  %call = call <16 x i8> @llvm.x86.ssse3.pabs.b.128(<16 x i8> %arg)
19*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i8> %call to <2 x i64>
20*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.pabs.b.128(<16 x i8>) nounwind readnone
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_abs_epi16(<2 x i64> %a0) {
25*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_abs_epi16:
26*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
27*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pabsw %xmm0, %xmm0
28*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
29*9880d681SAndroid Build Coastguard Worker;
30*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_abs_epi16:
31*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
32*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pabsw %xmm0, %xmm0
33*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
34*9880d681SAndroid Build Coastguard Worker  %arg = bitcast <2 x i64> %a0 to <8 x i16>
35*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.pabs.w.128(<8 x i16> %arg)
36*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
37*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.pabs.w.128(<8 x i16>) nounwind readnone
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_abs_epi32(<2 x i64> %a0) {
42*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_abs_epi32:
43*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
44*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pabsd %xmm0, %xmm0
45*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
46*9880d681SAndroid Build Coastguard Worker;
47*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_abs_epi32:
48*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
49*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pabsd %xmm0, %xmm0
50*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
51*9880d681SAndroid Build Coastguard Worker  %arg = bitcast <2 x i64> %a0 to <4 x i32>
52*9880d681SAndroid Build Coastguard Worker  %call = call <4 x i32> @llvm.x86.ssse3.pabs.d.128(<4 x i32> %arg)
53*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %call to <2 x i64>
54*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.pabs.d.128(<4 x i32>) nounwind readnone
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_alignr_epi8(<2 x i64> %a0, <2 x i64> %a1) {
59*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_alignr_epi8:
60*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
61*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    palignr {{.*#+}} xmm1 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1]
62*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movdqa %xmm1, %xmm0
63*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
64*9880d681SAndroid Build Coastguard Worker;
65*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_alignr_epi8:
66*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
67*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    palignr {{.*#+}} xmm1 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1]
68*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movdqa %xmm1, %xmm0
69*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
70*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
71*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
72*9880d681SAndroid Build Coastguard Worker  %shuf = shufflevector <16 x i8> %arg0, <16 x i8> %arg1, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
73*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i8> %shuf to <2 x i64>
74*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test2_mm_alignr_epi8(<2 x i64> %a0, <2 x i64> %a1) {
78*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test2_mm_alignr_epi8:
79*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    palignr {{.*#+}} xmm1 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0]
81*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movdqa %xmm1, %xmm0
82*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
83*9880d681SAndroid Build Coastguard Worker;
84*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test2_mm_alignr_epi8:
85*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
86*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    palignr {{.*#+}} xmm1 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0]
87*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movdqa %xmm1, %xmm0
88*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
89*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
90*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
91*9880d681SAndroid Build Coastguard Worker  %shuf = shufflevector <16 x i8> %arg0, <16 x i8> %arg1, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
92*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i8> %shuf to <2 x i64>
93*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
94*9880d681SAndroid Build Coastguard Worker}
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hadd_epi16(<2 x i64> %a0, <2 x i64> %a1) {
97*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hadd_epi16:
98*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
99*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    phaddw %xmm1, %xmm0
100*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
101*9880d681SAndroid Build Coastguard Worker;
102*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hadd_epi16:
103*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
104*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    phaddw %xmm1, %xmm0
105*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
106*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
107*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
108*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16> %arg0, <8 x i16> %arg1)
109*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
110*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16>, <8 x i16>) nounwind readnone
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hadd_epi32(<2 x i64> %a0, <2 x i64> %a1) {
115*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hadd_epi32:
116*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
117*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    phaddd %xmm1, %xmm0
118*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
119*9880d681SAndroid Build Coastguard Worker;
120*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hadd_epi32:
121*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
122*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    phaddd %xmm1, %xmm0
123*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
124*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
125*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
126*9880d681SAndroid Build Coastguard Worker  %call = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> %arg0, <4 x i32> %arg1)
127*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %call to <2 x i64>
128*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32>, <4 x i32>) nounwind readnone
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hadds_epi16(<2 x i64> %a0, <2 x i64> %a1) {
133*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hadds_epi16:
134*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
135*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    phaddsw %xmm1, %xmm0
136*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
137*9880d681SAndroid Build Coastguard Worker;
138*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hadds_epi16:
139*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
140*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    phaddsw %xmm1, %xmm0
141*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
142*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
143*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
144*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16> %arg0, <8 x i16> %arg1)
145*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
146*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16>, <8 x i16>) nounwind readnone
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsub_epi16(<2 x i64> %a0, <2 x i64> %a1) {
151*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsub_epi16:
152*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
153*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    phsubw %xmm1, %xmm0
154*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
155*9880d681SAndroid Build Coastguard Worker;
156*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsub_epi16:
157*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
158*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    phsubw %xmm1, %xmm0
159*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
160*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
161*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
162*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16> %arg0, <8 x i16> %arg1)
163*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
164*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16>, <8 x i16>) nounwind readnone
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsub_epi32(<2 x i64> %a0, <2 x i64> %a1) {
169*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsub_epi32:
170*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
171*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    phsubd %xmm1, %xmm0
172*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
173*9880d681SAndroid Build Coastguard Worker;
174*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsub_epi32:
175*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
176*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    phsubd %xmm1, %xmm0
177*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
178*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
179*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
180*9880d681SAndroid Build Coastguard Worker  %call = call <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32> %arg0, <4 x i32> %arg1)
181*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %call to <2 x i64>
182*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32>, <4 x i32>) nounwind readnone
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsubs_epi16(<2 x i64> %a0, <2 x i64> %a1) {
187*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsubs_epi16:
188*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
189*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    phsubsw %xmm1, %xmm0
190*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
191*9880d681SAndroid Build Coastguard Worker;
192*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsubs_epi16:
193*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
194*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    phsubsw %xmm1, %xmm0
195*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
196*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
197*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
198*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16> %arg0, <8 x i16> %arg1)
199*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
200*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
201*9880d681SAndroid Build Coastguard Worker}
202*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16>, <8 x i16>) nounwind readnone
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maddubs_epi16(<2 x i64> %a0, <2 x i64> %a1) {
205*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maddubs_epi16:
206*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
207*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmaddubsw %xmm1, %xmm0
208*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
209*9880d681SAndroid Build Coastguard Worker;
210*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maddubs_epi16:
211*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
212*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmaddubsw %xmm1, %xmm0
213*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
214*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
215*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
216*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8> %arg0, <16 x i8> %arg1)
217*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
218*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8>, <16 x i8>) nounwind readnone
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_mulhrs_epi16(<2 x i64> %a0, <2 x i64> %a1) {
223*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_mulhrs_epi16:
224*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
225*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pmulhrsw %xmm1, %xmm0
226*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
227*9880d681SAndroid Build Coastguard Worker;
228*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_mulhrs_epi16:
229*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
230*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pmulhrsw %xmm1, %xmm0
231*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
232*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
233*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
234*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %arg0, <8 x i16> %arg1)
235*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
236*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
237*9880d681SAndroid Build Coastguard Worker}
238*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16>, <8 x i16>) nounwind readnone
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_shuffle_epi8(<2 x i64> %a0, <2 x i64> %a1) {
241*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_shuffle_epi8:
242*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
243*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pshufb %xmm1, %xmm0
244*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
245*9880d681SAndroid Build Coastguard Worker;
246*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_shuffle_epi8:
247*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
248*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pshufb %xmm1, %xmm0
249*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
250*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
251*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
252*9880d681SAndroid Build Coastguard Worker  %call = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %arg0, <16 x i8> %arg1)
253*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i8> %call to <2 x i64>
254*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>) nounwind readnone
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sign_epi8(<2 x i64> %a0, <2 x i64> %a1) {
259*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sign_epi8:
260*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
261*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    psignb %xmm1, %xmm0
262*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
263*9880d681SAndroid Build Coastguard Worker;
264*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sign_epi8:
265*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
266*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    psignb %xmm1, %xmm0
267*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
268*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
269*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
270*9880d681SAndroid Build Coastguard Worker  %call = call <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8> %arg0, <16 x i8> %arg1)
271*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i8> %call to <2 x i64>
272*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8>, <16 x i8>) nounwind readnone
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sign_epi16(<2 x i64> %a0, <2 x i64> %a1) {
277*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sign_epi16:
278*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
279*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    psignw %xmm1, %xmm0
280*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
281*9880d681SAndroid Build Coastguard Worker;
282*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sign_epi16:
283*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
284*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    psignw %xmm1, %xmm0
285*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
286*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <8 x i16>
287*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <8 x i16>
288*9880d681SAndroid Build Coastguard Worker  %call = call <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16> %arg0, <8 x i16> %arg1)
289*9880d681SAndroid Build Coastguard Worker  %res = bitcast <8 x i16> %call to <2 x i64>
290*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
291*9880d681SAndroid Build Coastguard Worker}
292*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16>, <8 x i16>) nounwind readnone
293*9880d681SAndroid Build Coastguard Worker
294*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sign_epi32(<2 x i64> %a0, <2 x i64> %a1) {
295*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sign_epi32:
296*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
297*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    psignd %xmm1, %xmm0
298*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
299*9880d681SAndroid Build Coastguard Worker;
300*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sign_epi32:
301*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
302*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    psignd %xmm1, %xmm0
303*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
304*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <4 x i32>
305*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <4 x i32>
306*9880d681SAndroid Build Coastguard Worker  %call = call <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32> %arg0, <4 x i32> %arg1)
307*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %call to <2 x i64>
308*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
309*9880d681SAndroid Build Coastguard Worker}
310*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32>, <4 x i32>) nounwind readnone
311