xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sse41-intrinsics-x86.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=i386-apple-darwin -mattr=+sse4.1 | FileCheck %s --check-prefix=CHECK --check-prefix=SSE41
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i386-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=KNL
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
6*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_blendvpd:
7*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
8*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movapd %xmm0, %xmm3
9*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm2, %xmm0
10*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendvpd %xmm1, %xmm3
11*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movapd %xmm3, %xmm0
12*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
13*9880d681SAndroid Build Coastguard Worker;
14*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_blendvpd:
15*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
16*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
17*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
18*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) ; <<2 x double>> [#uses=1]
19*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
25*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_blendvps:
26*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
27*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm0, %xmm3
28*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm2, %xmm0
29*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendvps %xmm1, %xmm3
30*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm3, %xmm0
31*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
32*9880d681SAndroid Build Coastguard Worker;
33*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_blendvps:
34*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
35*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0
36*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
37*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) ; <<4 x float>> [#uses=1]
38*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_dppd(<2 x double> %a0, <2 x double> %a1) {
44*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_dppd:
45*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
46*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    dppd $7, %xmm1, %xmm0
47*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
48*9880d681SAndroid Build Coastguard Worker;
49*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_dppd:
50*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
51*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0
52*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
53*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %a0, <2 x double> %a1, i8 7) ; <<2 x double>> [#uses=1]
54*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.dppd(<2 x double>, <2 x double>, i8) nounwind readnone
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_dpps(<4 x float> %a0, <4 x float> %a1) {
60*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_dpps:
61*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
62*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    dpps $7, %xmm1, %xmm0
63*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
64*9880d681SAndroid Build Coastguard Worker;
65*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_dpps:
66*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
67*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0
68*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
69*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1]
70*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i8) nounwind readnone
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_insertps(<4 x float> %a0, <4 x float> %a1) {
76*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_insertps:
77*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
78*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3]
79*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
80*9880d681SAndroid Build Coastguard Worker;
81*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_insertps:
82*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
83*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3]
84*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
85*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i8 17) ; <<4 x float>> [#uses=1]
86*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i8) nounwind readnone
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_mpsadbw(<16 x i8> %a0, <16 x i8> %a1) {
93*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_mpsadbw:
94*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
95*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    mpsadbw $7, %xmm1, %xmm0
96*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
97*9880d681SAndroid Build Coastguard Worker;
98*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_mpsadbw:
99*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
100*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0
101*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
102*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <<8 x i16>> [#uses=1]
103*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8>, <16 x i8>, i8) nounwind readnone
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_packusdw(<4 x i32> %a0, <4 x i32> %a1) {
109*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_packusdw:
110*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
111*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    packusdw %xmm1, %xmm0
112*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
113*9880d681SAndroid Build Coastguard Worker;
114*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_packusdw:
115*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
116*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
117*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
118*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %a0, <4 x i32> %a1) ; <<8 x i16>> [#uses=1]
119*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) nounwind readnone
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_x86_sse41_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) {
125*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pblendvb:
126*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
127*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm0, %xmm3
128*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movaps %xmm2, %xmm0
129*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendvb %xmm1, %xmm3
130*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movdqa %xmm3, %xmm0
131*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
132*9880d681SAndroid Build Coastguard Worker;
133*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pblendvb:
134*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
135*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0
136*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
137*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2) ; <<16 x i8>> [#uses=1]
138*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_phminposuw(<8 x i16> %a0) {
144*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_phminposuw:
145*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
146*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    phminposuw %xmm0, %xmm0
147*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
148*9880d681SAndroid Build Coastguard Worker;
149*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_phminposuw:
150*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
151*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vphminposuw %xmm0, %xmm0
152*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
153*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %a0) ; <<8 x i16>> [#uses=1]
154*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>) nounwind readnone
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_x86_sse41_pmaxsb(<16 x i8> %a0, <16 x i8> %a1) {
160*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxsb:
161*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
162*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmaxsb %xmm1, %xmm0
163*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
164*9880d681SAndroid Build Coastguard Worker;
165*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxsb:
166*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
167*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
168*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
169*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
170*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8>, <16 x i8>) nounwind readnone
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pmaxsd(<4 x i32> %a0, <4 x i32> %a1) {
176*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxsd:
177*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
178*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmaxsd %xmm1, %xmm0
179*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
180*9880d681SAndroid Build Coastguard Worker;
181*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxsd:
182*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
183*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
185*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
186*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32>, <4 x i32>) nounwind readnone
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pmaxud(<4 x i32> %a0, <4 x i32> %a1) {
192*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxud:
193*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
194*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmaxud %xmm1, %xmm0
195*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
196*9880d681SAndroid Build Coastguard Worker;
197*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxud:
198*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
199*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
200*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
201*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
202*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32>, <4 x i32>) nounwind readnone
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_pmaxuw(<8 x i16> %a0, <8 x i16> %a1) {
208*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmaxuw:
209*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
210*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmaxuw %xmm1, %xmm0
211*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
212*9880d681SAndroid Build Coastguard Worker;
213*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmaxuw:
214*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
215*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
216*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
217*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
218*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16>, <8 x i16>) nounwind readnone
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_x86_sse41_pminsb(<16 x i8> %a0, <16 x i8> %a1) {
224*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminsb:
225*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
226*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pminsb %xmm1, %xmm0
227*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
228*9880d681SAndroid Build Coastguard Worker;
229*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminsb:
230*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
231*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
232*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
233*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8> %a0, <16 x i8> %a1) ; <<16 x i8>> [#uses=1]
234*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8>, <16 x i8>) nounwind readnone
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pminsd(<4 x i32> %a0, <4 x i32> %a1) {
240*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminsd:
241*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
242*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pminsd %xmm1, %xmm0
243*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
244*9880d681SAndroid Build Coastguard Worker;
245*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminsd:
246*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
247*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
248*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
249*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
250*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
251*9880d681SAndroid Build Coastguard Worker}
252*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32>, <4 x i32>) nounwind readnone
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_sse41_pminud(<4 x i32> %a0, <4 x i32> %a1) {
256*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminud:
257*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
258*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pminud %xmm1, %xmm0
259*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
260*9880d681SAndroid Build Coastguard Worker;
261*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminud:
262*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
263*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpminud %xmm1, %xmm0, %xmm0
264*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
265*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.sse41.pminud(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
266*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
267*9880d681SAndroid Build Coastguard Worker}
268*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.sse41.pminud(<4 x i32>, <4 x i32>) nounwind readnone
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_x86_sse41_pminuw(<8 x i16> %a0, <8 x i16> %a1) {
272*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pminuw:
273*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
274*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pminuw %xmm1, %xmm0
275*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
276*9880d681SAndroid Build Coastguard Worker;
277*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pminuw:
278*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
279*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
280*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
281*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16> %a0, <8 x i16> %a1) ; <<8 x i16>> [#uses=1]
282*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16>, <8 x i16>) nounwind readnone
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_sse41_pmuldq(<4 x i32> %a0, <4 x i32> %a1) {
288*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_pmuldq:
289*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
290*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pmuldq %xmm1, %xmm0
291*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
292*9880d681SAndroid Build Coastguard Worker;
293*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_pmuldq:
294*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
295*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmuldq %xmm1, %xmm0, %xmm0
296*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
297*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32> %a0, <4 x i32> %a1) ; <<2 x i64>> [#uses=1]
298*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
299*9880d681SAndroid Build Coastguard Worker}
300*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32>, <4 x i32>) nounwind readnone
301*9880d681SAndroid Build Coastguard Worker
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_sse41_ptestc(<2 x i64> %a0, <2 x i64> %a1) {
304*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_ptestc:
305*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
306*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    ptest %xmm1, %xmm0
307*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    sbbl %eax, %eax
308*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    andl $1, %eax
309*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
310*9880d681SAndroid Build Coastguard Worker;
311*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_ptestc:
312*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
313*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptest %xmm1, %xmm0
314*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    sbbl %eax, %eax
315*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    andl $1, %eax
316*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
317*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestc(<2 x i64> %a0, <2 x i64> %a1) ; <i32> [#uses=1]
318*9880d681SAndroid Build Coastguard Worker  ret i32 %res
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestc(<2 x i64>, <2 x i64>) nounwind readnone
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_sse41_ptestnzc(<2 x i64> %a0, <2 x i64> %a1) {
324*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_ptestnzc:
325*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
326*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl %eax, %eax
327*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    ptest %xmm1, %xmm0
328*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    seta %al
329*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
330*9880d681SAndroid Build Coastguard Worker;
331*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_ptestnzc:
332*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
333*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    xorl %eax, %eax
334*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptest %xmm1, %xmm0
335*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    seta %al
336*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
337*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestnzc(<2 x i64> %a0, <2 x i64> %a1) ; <i32> [#uses=1]
338*9880d681SAndroid Build Coastguard Worker  ret i32 %res
339*9880d681SAndroid Build Coastguard Worker}
340*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestnzc(<2 x i64>, <2 x i64>) nounwind readnone
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_sse41_ptestz(<2 x i64> %a0, <2 x i64> %a1) {
344*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_ptestz:
345*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
346*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl %eax, %eax
347*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    ptest %xmm1, %xmm0
348*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    sete %al
349*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
350*9880d681SAndroid Build Coastguard Worker;
351*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_ptestz:
352*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
353*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    xorl %eax, %eax
354*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptest %xmm1, %xmm0
355*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    sete %al
356*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
357*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse41.ptestz(<2 x i64> %a0, <2 x i64> %a1) ; <i32> [#uses=1]
358*9880d681SAndroid Build Coastguard Worker  ret i32 %res
359*9880d681SAndroid Build Coastguard Worker}
360*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse41.ptestz(<2 x i64>, <2 x i64>) nounwind readnone
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_round_pd(<2 x double> %a0) {
364*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_pd:
365*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
366*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    roundpd $7, %xmm0, %xmm0
367*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
368*9880d681SAndroid Build Coastguard Worker;
369*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_pd:
370*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
371*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vroundpd $7, %xmm0, %xmm0
372*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
373*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %a0, i32 7) ; <<2 x double>> [#uses=1]
374*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
375*9880d681SAndroid Build Coastguard Worker}
376*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.round.pd(<2 x double>, i32) nounwind readnone
377*9880d681SAndroid Build Coastguard Worker
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_round_ps(<4 x float> %a0) {
380*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_ps:
381*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
382*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    roundps $7, %xmm0, %xmm0
383*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
384*9880d681SAndroid Build Coastguard Worker;
385*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_ps:
386*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
387*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vroundps $7, %xmm0, %xmm0
388*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
389*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %a0, i32 7) ; <<4 x float>> [#uses=1]
390*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
391*9880d681SAndroid Build Coastguard Worker}
392*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.round.ps(<4 x float>, i32) nounwind readnone
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_sse41_round_sd(<2 x double> %a0, <2 x double> %a1) {
396*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_sd:
397*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
398*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    roundsd $7, %xmm1, %xmm0
399*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
400*9880d681SAndroid Build Coastguard Worker;
401*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_sd:
402*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
403*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vroundsd $7, %xmm1, %xmm0, %xmm0
404*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
405*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %a0, <2 x double> %a1, i32 7) ; <<2 x double>> [#uses=1]
406*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
407*9880d681SAndroid Build Coastguard Worker}
408*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.sse41.round.sd(<2 x double>, <2 x double>, i32) nounwind readnone
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_sse41_round_ss(<4 x float> %a0, <4 x float> %a1) {
412*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_x86_sse41_round_ss:
413*9880d681SAndroid Build Coastguard Worker; SSE41:       ## BB#0:
414*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    roundss $7, %xmm1, %xmm0
415*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retl
416*9880d681SAndroid Build Coastguard Worker;
417*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_x86_sse41_round_ss:
418*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
419*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vroundss $7, %xmm1, %xmm0, %xmm0
420*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retl
421*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %a0, <4 x float> %a1, i32 7) ; <<4 x float>> [#uses=1]
422*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
423*9880d681SAndroid Build Coastguard Worker}
424*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse41.round.ss(<4 x float>, <4 x float>, i32) nounwind readnone
425