xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/fp-select-cmp-and.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=nehalem | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine double @test1(double %a, double %b, double %eps) {
4*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt double %a, %eps
5*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %b, double 0.000000e+00
6*9880d681SAndroid Build Coastguard Worker  ret double %cond
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1
9*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltsd	%xmm2, %xmm0
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andpd	%xmm1, %xmm0
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine double @test2(double %a, double %b, double %eps) {
14*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole double %a, %eps
15*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %b, double 0.000000e+00
16*9880d681SAndroid Build Coastguard Worker  ret double %cond
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2
19*9880d681SAndroid Build Coastguard Worker; CHECK:	cmplesd	%xmm2, %xmm0
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andpd	%xmm1, %xmm0
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine double @test3(double %a, double %b, double %eps) {
24*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt double %a, %eps
25*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %b, double 0.000000e+00
26*9880d681SAndroid Build Coastguard Worker  ret double %cond
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3
29*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltsd	%xmm0, %xmm2
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andpd	%xmm1, %xmm2
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerdefine double @test4(double %a, double %b, double %eps) {
34*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge double %a, %eps
35*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %b, double 0.000000e+00
36*9880d681SAndroid Build Coastguard Worker  ret double %cond
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4
39*9880d681SAndroid Build Coastguard Worker; CHECK:	cmplesd	%xmm0, %xmm2
40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andpd	%xmm1, %xmm2
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine double @test5(double %a, double %b, double %eps) {
44*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt double %a, %eps
45*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double 0.000000e+00, double %b
46*9880d681SAndroid Build Coastguard Worker  ret double %cond
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5
49*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltsd	%xmm2, %xmm0
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnpd	%xmm1, %xmm0
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdefine double @test6(double %a, double %b, double %eps) {
54*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole double %a, %eps
55*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double 0.000000e+00, double %b
56*9880d681SAndroid Build Coastguard Worker  ret double %cond
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6
59*9880d681SAndroid Build Coastguard Worker; CHECK:	cmplesd	%xmm2, %xmm0
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnpd	%xmm1, %xmm0
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine double @test7(double %a, double %b, double %eps) {
64*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt double %a, %eps
65*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double 0.000000e+00, double %b
66*9880d681SAndroid Build Coastguard Worker  ret double %cond
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7
69*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltsd	%xmm0, %xmm2
70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnpd	%xmm1, %xmm2
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerdefine double @test8(double %a, double %b, double %eps) {
74*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge double %a, %eps
75*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double 0.000000e+00, double %b
76*9880d681SAndroid Build Coastguard Worker  ret double %cond
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8
79*9880d681SAndroid Build Coastguard Worker; CHECK:	cmplesd	%xmm0, %xmm2
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnpd	%xmm1, %xmm2
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerdefine float @test9(float %a, float %b, float %eps) {
84*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt float %a, %eps
85*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %b, float 0.000000e+00
86*9880d681SAndroid Build Coastguard Worker  ret float %cond
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test9
89*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltss	%xmm2, %xmm0
90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andps	%xmm1, %xmm0
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine float @test10(float %a, float %b, float %eps) {
94*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole float %a, %eps
95*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %b, float 0.000000e+00
96*9880d681SAndroid Build Coastguard Worker  ret float %cond
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10
99*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpless	%xmm2, %xmm0
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andps	%xmm1, %xmm0
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerdefine float @test11(float %a, float %b, float %eps) {
104*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt float %a, %eps
105*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %b, float 0.000000e+00
106*9880d681SAndroid Build Coastguard Worker  ret float %cond
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test11
109*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltss	%xmm0, %xmm2
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andps	%xmm1, %xmm2
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine float @test12(float %a, float %b, float %eps) {
114*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge float %a, %eps
115*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %b, float 0.000000e+00
116*9880d681SAndroid Build Coastguard Worker  ret float %cond
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test12
119*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpless	%xmm0, %xmm2
120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andps	%xmm1, %xmm2
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdefine float @test13(float %a, float %b, float %eps) {
124*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt float %a, %eps
125*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float 0.000000e+00, float %b
126*9880d681SAndroid Build Coastguard Worker  ret float %cond
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test13
129*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltss	%xmm2, %xmm0
130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnps	%xmm1, %xmm0
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine float @test14(float %a, float %b, float %eps) {
134*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole float %a, %eps
135*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float 0.000000e+00, float %b
136*9880d681SAndroid Build Coastguard Worker  ret float %cond
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test14
139*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpless	%xmm2, %xmm0
140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnps	%xmm1, %xmm0
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdefine float @test15(float %a, float %b, float %eps) {
144*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt float %a, %eps
145*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float 0.000000e+00, float %b
146*9880d681SAndroid Build Coastguard Worker  ret float %cond
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test15
149*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpltss	%xmm0, %xmm2
150*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnps	%xmm1, %xmm2
151*9880d681SAndroid Build Coastguard Worker}
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Workerdefine float @test16(float %a, float %b, float %eps) {
154*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge float %a, %eps
155*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float 0.000000e+00, float %b
156*9880d681SAndroid Build Coastguard Worker  ret float %cond
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test16
159*9880d681SAndroid Build Coastguard Worker; CHECK:	cmpless	%xmm0, %xmm2
160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	andnps	%xmm1, %xmm2
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Workerdefine float @test17(float %a, float %b, float %c, float %eps) {
164*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge float %a, %eps
165*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %c, float %b
166*9880d681SAndroid Build Coastguard Worker  ret float %cond
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test17
169*9880d681SAndroid Build Coastguard Worker; CHECK: cmpless	%xmm0, %xmm3
170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andps	%xmm3, %xmm2
171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andnps	%xmm1, %xmm3
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: orps	%xmm2, %xmm3
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerdefine double @test18(double %a, double %b, double %c, double %eps) {
176*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge double %a, %eps
177*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %c, double %b
178*9880d681SAndroid Build Coastguard Worker  ret double %cond
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test18
181*9880d681SAndroid Build Coastguard Worker; CHECK: cmplesd	%xmm0, %xmm3
182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andpd	%xmm3, %xmm2
183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andnpd	%xmm1, %xmm3
184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: orpd	%xmm2, %xmm3
185*9880d681SAndroid Build Coastguard Worker}
186