xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/fast-isel-cmp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s                             -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=SDAG
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -fast-isel-abort=1 -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=FAST
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oeq(float %x, float %y) {
5*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_oeq
6*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpeqss  %xmm1, %xmm0
7*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  movd     %xmm0, %eax
8*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  andl     $1, %eax
9*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_oeq
10*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
11*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  sete     %al
12*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %cl
13*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  andb     %al, %cl
14*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oeq float %x, %y
15*9880d681SAndroid Build Coastguard Worker  ret i1 %1
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ogt(float %x, float %y) {
19*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ogt
20*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
21*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  seta     %al
22*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
23*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  seta     %al
24*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ogt float %x, %y
25*9880d681SAndroid Build Coastguard Worker  ret i1 %1
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oge(float %x, float %y) {
29*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_oge
30*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
31*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setae    %al
32*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_oge
33*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
34*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setae    %al
35*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oge float %x, %y
36*9880d681SAndroid Build Coastguard Worker  ret i1 %1
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_olt(float %x, float %y) {
40*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_olt
41*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm1
42*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  seta     %al
43*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_olt
44*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm1
45*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  seta     %al
46*9880d681SAndroid Build Coastguard Worker  %1 = fcmp olt float %x, %y
47*9880d681SAndroid Build Coastguard Worker  ret i1 %1
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ole(float %x, float %y) {
51*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ole
52*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm1
53*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setae    %al
54*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ole
55*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm1
56*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setae    %al
57*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ole float %x, %y
58*9880d681SAndroid Build Coastguard Worker  ret i1 %1
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_one(float %x, float %y) {
62*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_one
63*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
64*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setne    %al
65*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_one
66*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
67*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setne    %al
68*9880d681SAndroid Build Coastguard Worker  %1 = fcmp one float %x, %y
69*9880d681SAndroid Build Coastguard Worker  ret i1 %1
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ord(float %x, float %y) {
73*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ord
74*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
75*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setnp    %al
76*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ord
77*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
78*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %al
79*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ord float %x, %y
80*9880d681SAndroid Build Coastguard Worker  ret i1 %1
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uno(float %x, float %y) {
84*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_uno
85*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
86*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setp     %al
87*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_uno
88*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
89*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %al
90*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uno float %x, %y
91*9880d681SAndroid Build Coastguard Worker  ret i1 %1
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ueq(float %x, float %y) {
95*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ueq
96*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
97*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  sete     %al
98*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ueq
99*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
100*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  sete     %al
101*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ueq float %x, %y
102*9880d681SAndroid Build Coastguard Worker  ret i1 %1
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ugt(float %x, float %y) {
106*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ugt
107*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm1
108*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setb     %al
109*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ugt
110*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm1
111*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setb     %al
112*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ugt float %x, %y
113*9880d681SAndroid Build Coastguard Worker  ret i1 %1
114*9880d681SAndroid Build Coastguard Worker}
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uge(float %x, float %y) {
117*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_uge
118*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm1
119*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setbe    %al
120*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_uge
121*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm1
122*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setbe    %al
123*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uge float %x, %y
124*9880d681SAndroid Build Coastguard Worker  ret i1 %1
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ult(float %x, float %y) {
128*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ult
129*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
130*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setb     %al
131*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ult
132*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
133*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setb     %al
134*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ult float %x, %y
135*9880d681SAndroid Build Coastguard Worker  ret i1 %1
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ule(float %x, float %y) {
139*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ule
140*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm1, %xmm0
141*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setbe    %al
142*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ule
143*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
144*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setbe    %al
145*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ule float %x, %y
146*9880d681SAndroid Build Coastguard Worker  ret i1 %1
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_une(float %x, float %y) {
150*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_une
151*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpneqss %xmm1, %xmm0
152*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  movd     %xmm0, %eax
153*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  andl     $1, %eax
154*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_une
155*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm1, %xmm0
156*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setne    %al
157*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %cl
158*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  orb      %al, %cl
159*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une float %x, %y
160*9880d681SAndroid Build Coastguard Worker  ret i1 %1
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_eq(i32 %x, i32 %y) {
164*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_eq
165*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
166*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  sete     %al
167*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_eq
168*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
169*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  sete     %al
170*9880d681SAndroid Build Coastguard Worker  %1 = icmp eq i32 %x, %y
171*9880d681SAndroid Build Coastguard Worker  ret i1 %1
172*9880d681SAndroid Build Coastguard Worker}
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ne(i32 %x, i32 %y) {
175*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ne
176*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
177*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setne    %al
178*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ne
179*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
180*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setne    %al
181*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i32 %x, %y
182*9880d681SAndroid Build Coastguard Worker  ret i1 %1
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ugt(i32 %x, i32 %y) {
186*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ugt
187*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %edi, %esi
188*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setb     %al
189*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ugt
190*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
191*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  seta     %al
192*9880d681SAndroid Build Coastguard Worker  %1 = icmp ugt i32 %x, %y
193*9880d681SAndroid Build Coastguard Worker  ret i1 %1
194*9880d681SAndroid Build Coastguard Worker}
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_uge(i32 %x, i32 %y) {
197*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_uge
198*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
199*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setae    %al
200*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_uge
201*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
202*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setae    %al
203*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i32 %x, %y
204*9880d681SAndroid Build Coastguard Worker  ret i1 %1
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ult(i32 %x, i32 %y) {
208*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ult
209*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
210*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setb     %al
211*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ult
212*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
213*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setb     %al
214*9880d681SAndroid Build Coastguard Worker  %1 = icmp ult i32 %x, %y
215*9880d681SAndroid Build Coastguard Worker  ret i1 %1
216*9880d681SAndroid Build Coastguard Worker}
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ule(i32 %x, i32 %y) {
219*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ule
220*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
221*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setbe    %al
222*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ule
223*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
224*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setbe    %al
225*9880d681SAndroid Build Coastguard Worker  %1 = icmp ule i32 %x, %y
226*9880d681SAndroid Build Coastguard Worker  ret i1 %1
227*9880d681SAndroid Build Coastguard Worker}
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_sgt(i32 %x, i32 %y) {
230*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_sgt
231*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
232*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setg     %al
233*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_sgt
234*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
235*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setg     %al
236*9880d681SAndroid Build Coastguard Worker  %1 = icmp sgt i32 %x, %y
237*9880d681SAndroid Build Coastguard Worker  ret i1 %1
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_sge(i32 %x, i32 %y) {
241*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_sge
242*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
243*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setge    %al
244*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_sge
245*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
246*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setge    %al
247*9880d681SAndroid Build Coastguard Worker  %1 = icmp sge i32 %x, %y
248*9880d681SAndroid Build Coastguard Worker  ret i1 %1
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_slt(i32 %x, i32 %y) {
252*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_slt
253*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
254*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setl     %al
255*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_slt
256*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
257*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setl     %al
258*9880d681SAndroid Build Coastguard Worker  %1 = icmp slt i32 %x, %y
259*9880d681SAndroid Build Coastguard Worker  ret i1 %1
260*9880d681SAndroid Build Coastguard Worker}
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_sle(i32 %x, i32 %y) {
263*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_sle
264*9880d681SAndroid Build Coastguard Worker; SDAG:       cmpl     %esi, %edi
265*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setle    %al
266*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_sle
267*9880d681SAndroid Build Coastguard Worker; FAST:       cmpl     %esi, %edi
268*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setle    %al
269*9880d681SAndroid Build Coastguard Worker  %1 = icmp sle i32 %x, %y
270*9880d681SAndroid Build Coastguard Worker  ret i1 %1
271*9880d681SAndroid Build Coastguard Worker}
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker; Test cmp folding and condition optimization.
274*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oeq2(float %x) {
275*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_oeq2
276*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
277*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setnp    %al
278*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_oeq2
279*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
280*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %al
281*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oeq float %x, %x
282*9880d681SAndroid Build Coastguard Worker  ret i1 %1
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oeq3(float %x) {
286*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_oeq3
287*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
288*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  cmpeqss  %xmm1, %xmm0
289*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  movd     %xmm0, %eax
290*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  andl     $1, %eax
291*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_oeq3
292*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
293*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
294*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  sete     %al
295*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %cl
296*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  andb     %al, %cl
297*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oeq float %x, 0.000000e+00
298*9880d681SAndroid Build Coastguard Worker  ret i1 %1
299*9880d681SAndroid Build Coastguard Worker}
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ogt2(float %x) {
302*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ogt2
303*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
304*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ogt2
305*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
306*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ogt float %x, %x
307*9880d681SAndroid Build Coastguard Worker  ret i1 %1
308*9880d681SAndroid Build Coastguard Worker}
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ogt3(float %x) {
311*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ogt3
312*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
313*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm1, %xmm0
314*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  seta     %al
315*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ogt3
316*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
317*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
318*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  seta     %al
319*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ogt float %x, 0.000000e+00
320*9880d681SAndroid Build Coastguard Worker  ret i1 %1
321*9880d681SAndroid Build Coastguard Worker}
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oge2(float %x) {
324*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_oge2
325*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
326*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setnp    %al
327*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_oge2
328*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
329*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %al
330*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oge float %x, %x
331*9880d681SAndroid Build Coastguard Worker  ret i1 %1
332*9880d681SAndroid Build Coastguard Worker}
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oge3(float %x) {
335*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_oge3
336*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
337*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm1, %xmm0
338*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setae    %al
339*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_oge3
340*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
341*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
342*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setae    %al
343*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oge float %x, 0.000000e+00
344*9880d681SAndroid Build Coastguard Worker  ret i1 %1
345*9880d681SAndroid Build Coastguard Worker}
346*9880d681SAndroid Build Coastguard Worker
347*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_olt2(float %x) {
348*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_olt2
349*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
350*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_olt2
351*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
352*9880d681SAndroid Build Coastguard Worker  %1 = fcmp olt float %x, %x
353*9880d681SAndroid Build Coastguard Worker  ret i1 %1
354*9880d681SAndroid Build Coastguard Worker}
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_olt3(float %x) {
357*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_olt3
358*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
359*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm0, %xmm1
360*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  seta     %al
361*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_olt3
362*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
363*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm0, %xmm1
364*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  seta     %al
365*9880d681SAndroid Build Coastguard Worker  %1 = fcmp olt float %x, 0.000000e+00
366*9880d681SAndroid Build Coastguard Worker  ret i1 %1
367*9880d681SAndroid Build Coastguard Worker}
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ole2(float %x) {
370*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ole2
371*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
372*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setnp    %al
373*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ole2
374*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
375*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %al
376*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ole float %x, %x
377*9880d681SAndroid Build Coastguard Worker  ret i1 %1
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ole3(float %x) {
381*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ole3
382*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
383*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm0, %xmm1
384*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setae    %al
385*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ole3
386*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
387*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm0, %xmm1
388*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setae    %al
389*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ole float %x, 0.000000e+00
390*9880d681SAndroid Build Coastguard Worker  ret i1 %1
391*9880d681SAndroid Build Coastguard Worker}
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_one2(float %x) {
394*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_one2
395*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
396*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_one2
397*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
398*9880d681SAndroid Build Coastguard Worker  %1 = fcmp one float %x, %x
399*9880d681SAndroid Build Coastguard Worker  ret i1 %1
400*9880d681SAndroid Build Coastguard Worker}
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_one3(float %x) {
403*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_one3
404*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
405*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm1, %xmm0
406*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setne    %al
407*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_one3
408*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
409*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
410*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setne    %al
411*9880d681SAndroid Build Coastguard Worker  %1 = fcmp one float %x, 0.000000e+00
412*9880d681SAndroid Build Coastguard Worker  ret i1 %1
413*9880d681SAndroid Build Coastguard Worker}
414*9880d681SAndroid Build Coastguard Worker
415*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ord2(float %x) {
416*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ord2
417*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
418*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setnp    %al
419*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ord2
420*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
421*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %al
422*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ord float %x, %x
423*9880d681SAndroid Build Coastguard Worker  ret i1 %1
424*9880d681SAndroid Build Coastguard Worker}
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ord3(float %x) {
427*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ord3
428*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
429*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setnp    %al
430*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ord3
431*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
432*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setnp    %al
433*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ord float %x, 0.000000e+00
434*9880d681SAndroid Build Coastguard Worker  ret i1 %1
435*9880d681SAndroid Build Coastguard Worker}
436*9880d681SAndroid Build Coastguard Worker
437*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uno2(float %x) {
438*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_uno2
439*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
440*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setp     %al
441*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_uno2
442*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
443*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %al
444*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uno float %x, %x
445*9880d681SAndroid Build Coastguard Worker  ret i1 %1
446*9880d681SAndroid Build Coastguard Worker}
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uno3(float %x) {
449*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_uno3
450*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
451*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setp     %al
452*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_uno3
453*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
454*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %al
455*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uno float %x, 0.000000e+00
456*9880d681SAndroid Build Coastguard Worker  ret i1 %1
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ueq2(float %x) {
460*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ueq2
461*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
462*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ueq2
463*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
464*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ueq float %x, %x
465*9880d681SAndroid Build Coastguard Worker  ret i1 %1
466*9880d681SAndroid Build Coastguard Worker}
467*9880d681SAndroid Build Coastguard Worker
468*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ueq3(float %x) {
469*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ueq3
470*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
471*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm1, %xmm0
472*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  sete     %al
473*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ueq3
474*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
475*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
476*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  sete     %al
477*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ueq float %x, 0.000000e+00
478*9880d681SAndroid Build Coastguard Worker  ret i1 %1
479*9880d681SAndroid Build Coastguard Worker}
480*9880d681SAndroid Build Coastguard Worker
481*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ugt2(float %x) {
482*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ugt2
483*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
484*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setp     %al
485*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ugt2
486*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
487*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %al
488*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ugt float %x, %x
489*9880d681SAndroid Build Coastguard Worker  ret i1 %1
490*9880d681SAndroid Build Coastguard Worker}
491*9880d681SAndroid Build Coastguard Worker
492*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ugt3(float %x) {
493*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ugt3
494*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
495*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm0, %xmm1
496*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setb     %al
497*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ugt3
498*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
499*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm0, %xmm1
500*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setb     %al
501*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ugt float %x, 0.000000e+00
502*9880d681SAndroid Build Coastguard Worker  ret i1 %1
503*9880d681SAndroid Build Coastguard Worker}
504*9880d681SAndroid Build Coastguard Worker
505*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uge2(float %x) {
506*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_uge2
507*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
508*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_uge2
509*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
510*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uge float %x, %x
511*9880d681SAndroid Build Coastguard Worker  ret i1 %1
512*9880d681SAndroid Build Coastguard Worker}
513*9880d681SAndroid Build Coastguard Worker
514*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uge3(float %x) {
515*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_uge3
516*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
517*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm0, %xmm1
518*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setbe    %al
519*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_uge3
520*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
521*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm0, %xmm1
522*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setbe    %al
523*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uge float %x, 0.000000e+00
524*9880d681SAndroid Build Coastguard Worker  ret i1 %1
525*9880d681SAndroid Build Coastguard Worker}
526*9880d681SAndroid Build Coastguard Worker
527*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ult2(float %x) {
528*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ult2
529*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
530*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setp     %al
531*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ult2
532*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
533*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %al
534*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ult float %x, %x
535*9880d681SAndroid Build Coastguard Worker  ret i1 %1
536*9880d681SAndroid Build Coastguard Worker}
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ult3(float %x) {
539*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ult3
540*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
541*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm1, %xmm0
542*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setb     %al
543*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ult3
544*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
545*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
546*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setb     %al
547*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ult float %x, 0.000000e+00
548*9880d681SAndroid Build Coastguard Worker  ret i1 %1
549*9880d681SAndroid Build Coastguard Worker}
550*9880d681SAndroid Build Coastguard Worker
551*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ule2(float %x) {
552*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ule2
553*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
554*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ule2
555*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
556*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ule float %x, %x
557*9880d681SAndroid Build Coastguard Worker  ret i1 %1
558*9880d681SAndroid Build Coastguard Worker}
559*9880d681SAndroid Build Coastguard Worker
560*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ule3(float %x) {
561*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_ule3
562*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
563*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  ucomiss  %xmm1, %xmm0
564*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setbe    %al
565*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_ule3
566*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
567*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
568*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setbe    %al
569*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ule float %x, 0.000000e+00
570*9880d681SAndroid Build Coastguard Worker  ret i1 %1
571*9880d681SAndroid Build Coastguard Worker}
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_une2(float %x) {
574*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_une2
575*9880d681SAndroid Build Coastguard Worker; SDAG:       ucomiss  %xmm0, %xmm0
576*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  setp     %al
577*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_une2
578*9880d681SAndroid Build Coastguard Worker; FAST:       ucomiss  %xmm0, %xmm0
579*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %al
580*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une float %x, %x
581*9880d681SAndroid Build Coastguard Worker  ret i1 %1
582*9880d681SAndroid Build Coastguard Worker}
583*9880d681SAndroid Build Coastguard Worker
584*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_une3(float %x) {
585*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: fcmp_une3
586*9880d681SAndroid Build Coastguard Worker; SDAG:       xorps    %xmm1, %xmm1
587*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  cmpneqss %xmm1, %xmm0
588*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  movd     %xmm0, %eax
589*9880d681SAndroid Build Coastguard Worker; SDAG-NEXT:  andl     $1, %eax
590*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: fcmp_une3
591*9880d681SAndroid Build Coastguard Worker; FAST:       xorps    %xmm1, %xmm1
592*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  ucomiss  %xmm1, %xmm0
593*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setne    %al
594*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  setp     %cl
595*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:  orb      %al, %cl
596*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une float %x, 0.000000e+00
597*9880d681SAndroid Build Coastguard Worker  ret i1 %1
598*9880d681SAndroid Build Coastguard Worker}
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_eq2(i32 %x) {
601*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_eq2
602*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
603*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_eq2
604*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
605*9880d681SAndroid Build Coastguard Worker  %1 = icmp eq i32 %x, %x
606*9880d681SAndroid Build Coastguard Worker  ret i1 %1
607*9880d681SAndroid Build Coastguard Worker}
608*9880d681SAndroid Build Coastguard Worker
609*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ne2(i32 %x) {
610*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ne2
611*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
612*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ne2
613*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
614*9880d681SAndroid Build Coastguard Worker  %1 = icmp ne i32 %x, %x
615*9880d681SAndroid Build Coastguard Worker  ret i1 %1
616*9880d681SAndroid Build Coastguard Worker}
617*9880d681SAndroid Build Coastguard Worker
618*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ugt2(i32 %x) {
619*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ugt2
620*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
621*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ugt2
622*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
623*9880d681SAndroid Build Coastguard Worker  %1 = icmp ugt i32 %x, %x
624*9880d681SAndroid Build Coastguard Worker  ret i1 %1
625*9880d681SAndroid Build Coastguard Worker}
626*9880d681SAndroid Build Coastguard Worker
627*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_uge2(i32 %x) {
628*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_uge2
629*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
630*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_uge2
631*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
632*9880d681SAndroid Build Coastguard Worker  %1 = icmp uge i32 %x, %x
633*9880d681SAndroid Build Coastguard Worker  ret i1 %1
634*9880d681SAndroid Build Coastguard Worker}
635*9880d681SAndroid Build Coastguard Worker
636*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ult2(i32 %x) {
637*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ult2
638*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
639*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ult2
640*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
641*9880d681SAndroid Build Coastguard Worker  %1 = icmp ult i32 %x, %x
642*9880d681SAndroid Build Coastguard Worker  ret i1 %1
643*9880d681SAndroid Build Coastguard Worker}
644*9880d681SAndroid Build Coastguard Worker
645*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_ule2(i32 %x) {
646*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_ule2
647*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
648*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_ule2
649*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
650*9880d681SAndroid Build Coastguard Worker  %1 = icmp ule i32 %x, %x
651*9880d681SAndroid Build Coastguard Worker  ret i1 %1
652*9880d681SAndroid Build Coastguard Worker}
653*9880d681SAndroid Build Coastguard Worker
654*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_sgt2(i32 %x) {
655*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_sgt2
656*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
657*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_sgt2
658*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
659*9880d681SAndroid Build Coastguard Worker  %1 = icmp sgt i32 %x, %x
660*9880d681SAndroid Build Coastguard Worker  ret i1 %1
661*9880d681SAndroid Build Coastguard Worker}
662*9880d681SAndroid Build Coastguard Worker
663*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_sge2(i32 %x) {
664*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_sge2
665*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
666*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_sge2
667*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
668*9880d681SAndroid Build Coastguard Worker  %1 = icmp sge i32 %x, %x
669*9880d681SAndroid Build Coastguard Worker  ret i1 %1
670*9880d681SAndroid Build Coastguard Worker}
671*9880d681SAndroid Build Coastguard Worker
672*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_slt2(i32 %x) {
673*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_slt2
674*9880d681SAndroid Build Coastguard Worker; SDAG:       xorl     %eax, %eax
675*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_slt2
676*9880d681SAndroid Build Coastguard Worker; FAST:       xorl     %eax, %eax
677*9880d681SAndroid Build Coastguard Worker  %1 = icmp slt i32 %x, %x
678*9880d681SAndroid Build Coastguard Worker  ret i1 %1
679*9880d681SAndroid Build Coastguard Worker}
680*9880d681SAndroid Build Coastguard Worker
681*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @icmp_sle2(i32 %x) {
682*9880d681SAndroid Build Coastguard Worker; SDAG-LABEL: icmp_sle2
683*9880d681SAndroid Build Coastguard Worker; SDAG:       movb     $1, %al
684*9880d681SAndroid Build Coastguard Worker; FAST-LABEL: icmp_sle2
685*9880d681SAndroid Build Coastguard Worker; FAST:       movb     $1, %al
686*9880d681SAndroid Build Coastguard Worker  %1 = icmp sle i32 %x, %x
687*9880d681SAndroid Build Coastguard Worker  ret i1 %1
688*9880d681SAndroid Build Coastguard Worker}
689*9880d681SAndroid Build Coastguard Worker
690