xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-fast-isel-fcmp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O0 -fast-isel-abort=1 -verify-machineinstrs -mtriple=arm64-apple-darwin < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_float1(float %a) {
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_float1
5*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, #0.0
6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, ne
7*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une float %a, 0.000000e+00
8*9880d681SAndroid Build Coastguard Worker  ret i1 %1
9*9880d681SAndroid Build Coastguard Worker}
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_float2(float %a, float %b) {
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_float2
13*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, ne
15*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une float %a, %b
16*9880d681SAndroid Build Coastguard Worker  ret i1 %1
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_double1(double %a) {
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_double1
21*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp d0, #0.0
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, ne
23*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une double %a, 0.000000e+00
24*9880d681SAndroid Build Coastguard Worker  ret i1 %1
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_double2(double %a, double %b) {
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_double2
29*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp d0, d1
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, ne
31*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une double %a, %b
32*9880d681SAndroid Build Coastguard Worker  ret i1 %1
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker; Check each fcmp condition
36*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_false(float %a) {
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_false
38*9880d681SAndroid Build Coastguard Worker; CHECK:       mov {{w[0-9]+}}, wzr
39*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ogt float %a, %a
40*9880d681SAndroid Build Coastguard Worker  ret i1 %1
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oeq(float %a, float %b) {
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_oeq
45*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, eq
47*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oeq float %a, %b
48*9880d681SAndroid Build Coastguard Worker  ret i1 %1
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ogt(float %a, float %b) {
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ogt
53*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, gt
55*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ogt float %a, %b
56*9880d681SAndroid Build Coastguard Worker  ret i1 %1
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_oge(float %a, float %b) {
60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_oge
61*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, ge
63*9880d681SAndroid Build Coastguard Worker  %1 = fcmp oge float %a, %b
64*9880d681SAndroid Build Coastguard Worker  ret i1 %1
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_olt(float %a, float %b) {
68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_olt
69*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, mi
71*9880d681SAndroid Build Coastguard Worker  %1 = fcmp olt float %a, %b
72*9880d681SAndroid Build Coastguard Worker  ret i1 %1
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ole(float %a, float %b) {
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ole
77*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, ls
79*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ole float %a, %b
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_one(float %a, float %b) {
84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_one
85*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset [[REG:w[0-9]+]], mi
87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  csinc {{w[0-9]+}}, [[REG]], wzr, le
88*9880d681SAndroid Build Coastguard Worker  %1 = fcmp one float %a, %b
89*9880d681SAndroid Build Coastguard Worker  ret i1 %1
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ord(float %a, float %b) {
93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ord
94*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, vc
96*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ord float %a, %b
97*9880d681SAndroid Build Coastguard Worker  ret i1 %1
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uno(float %a, float %b) {
101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_uno
102*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, vs
104*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uno float %a, %b
105*9880d681SAndroid Build Coastguard Worker  ret i1 %1
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ueq(float %a, float %b) {
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ueq
110*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset [[REG:w[0-9]+]], eq
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  csinc {{w[0-9]+}}, [[REG]], wzr, vc
113*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ueq float %a, %b
114*9880d681SAndroid Build Coastguard Worker  ret i1 %1
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ugt(float %a, float %b) {
118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ugt
119*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, hi
121*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ugt float %a, %b
122*9880d681SAndroid Build Coastguard Worker  ret i1 %1
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_uge(float %a, float %b) {
126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_uge
127*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, pl
129*9880d681SAndroid Build Coastguard Worker  %1 = fcmp uge float %a, %b
130*9880d681SAndroid Build Coastguard Worker  ret i1 %1
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ult(float %a, float %b) {
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ult
135*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, lt
137*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ult float %a, %b
138*9880d681SAndroid Build Coastguard Worker  ret i1 %1
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_ule(float %a, float %b) {
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_ule
143*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, le
145*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ule float %a, %b
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 %a, float %b) {
150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_une
151*9880d681SAndroid Build Coastguard Worker; CHECK:       fcmp s0, s1
152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  cset {{w[0-9]+}}, ne
153*9880d681SAndroid Build Coastguard Worker  %1 = fcmp une float %a, %b
154*9880d681SAndroid Build Coastguard Worker  ret i1 %1
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @fcmp_true(float %a) {
158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fcmp_true
159*9880d681SAndroid Build Coastguard Worker; CHECK:       orr {{w[0-9]+}}, wzr, #0x1
160*9880d681SAndroid Build Coastguard Worker  %1 = fcmp ueq float %a, %a
161*9880d681SAndroid Build Coastguard Worker  ret i1 %1
162*9880d681SAndroid Build Coastguard Worker}
163