xref: /llvm-project/llvm/test/CodeGen/PowerPC/GlobalISel/fcmp.ll (revision 6a930e889145cbfb3ff1d99f67a5382c19bc1745)
1ac93a4e7SChen Zheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2ac93a4e7SChen Zheng; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -global-isel -o - \
3ac93a4e7SChen Zheng; RUN:   -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s
4ac93a4e7SChen Zheng
5ac93a4e7SChen Zheng;; Note that SETUEQ, SETOGE, SETOLE, SETONE, SETULT and SETUGT should be
6*6a930e88SChen Zheng;; expanded by DAG legalizer for floating-point types f32 and f64, so there are
7*6a930e88SChen Zheng;; no patterns defined in PPCInstrInfo.td file for these setcc patterns for now.
8ac93a4e7SChen Zheng
9ac93a4e7SChen Zhengdefine i1 @fcmp_false(float %a, float %b) {
10ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_false:
11ac93a4e7SChen Zheng; CHECK:       # %bb.0:
12ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
13ac93a4e7SChen Zheng; CHECK-NEXT:    blr
14ac93a4e7SChen Zheng  %cmp = fcmp false float %a, %b
15ac93a4e7SChen Zheng  ret i1 %cmp
16ac93a4e7SChen Zheng}
17ac93a4e7SChen Zheng
18ac93a4e7SChen Zhengdefine i1 @fcmp_oeq(float %a, float %b) {
19ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_oeq:
20ac93a4e7SChen Zheng; CHECK:       # %bb.0:
21ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
22ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
23ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
24ac93a4e7SChen Zheng; CHECK-NEXT:    iseleq r3, r4, r3
25ac93a4e7SChen Zheng; CHECK-NEXT:    blr
26ac93a4e7SChen Zheng  %cmp = fcmp oeq float %a, %b
27ac93a4e7SChen Zheng  ret i1 %cmp
28ac93a4e7SChen Zheng}
29ac93a4e7SChen Zheng
30ac93a4e7SChen Zhengdefine i1 @fcmp_ogt(float %a, float %b) {
31ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ogt:
32ac93a4e7SChen Zheng; CHECK:       # %bb.0:
33ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
34ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
35ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
36ac93a4e7SChen Zheng; CHECK-NEXT:    iselgt r3, r4, r3
37ac93a4e7SChen Zheng; CHECK-NEXT:    blr
38ac93a4e7SChen Zheng  %cmp = fcmp ogt float %a, %b
39ac93a4e7SChen Zheng  ret i1 %cmp
40ac93a4e7SChen Zheng}
41ac93a4e7SChen Zheng
42ac93a4e7SChen Zhengdefine i1 @fcmp_olt(float %a, float %b) {
43ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_olt:
44ac93a4e7SChen Zheng; CHECK:       # %bb.0:
45ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
46ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
47ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
48ac93a4e7SChen Zheng; CHECK-NEXT:    isellt r3, r4, r3
49ac93a4e7SChen Zheng; CHECK-NEXT:    blr
50ac93a4e7SChen Zheng  %cmp = fcmp olt float %a, %b
51ac93a4e7SChen Zheng  ret i1 %cmp
52ac93a4e7SChen Zheng}
53ac93a4e7SChen Zheng
54ac93a4e7SChen Zhengdefine i1 @fcmp_ord(float %a, float %b) {
55ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ord:
56ac93a4e7SChen Zheng; CHECK:       # %bb.0:
57ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
58ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
59ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
60ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, un
61ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
62ac93a4e7SChen Zheng; CHECK-NEXT:    blr
63ac93a4e7SChen Zheng  %cmp = fcmp ord float %a, %b
64ac93a4e7SChen Zheng  ret i1 %cmp
65ac93a4e7SChen Zheng}
66ac93a4e7SChen Zheng
67ac93a4e7SChen Zhengdefine i1 @fcmp_uge(float %a, float %b) {
68ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uge:
69ac93a4e7SChen Zheng; CHECK:       # %bb.0:
70ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
71ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
72ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
73ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, lt
74ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
75ac93a4e7SChen Zheng; CHECK-NEXT:    blr
76ac93a4e7SChen Zheng  %cmp = fcmp uge float %a, %b
77ac93a4e7SChen Zheng  ret i1 %cmp
78ac93a4e7SChen Zheng}
79ac93a4e7SChen Zheng
80ac93a4e7SChen Zhengdefine i1 @fcmp_ule(float %a, float %b) {
81ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ule:
82ac93a4e7SChen Zheng; CHECK:       # %bb.0:
83ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
84ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
85ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
86ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, gt
87ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
88ac93a4e7SChen Zheng; CHECK-NEXT:    blr
89ac93a4e7SChen Zheng  %cmp = fcmp ule float %a, %b
90ac93a4e7SChen Zheng  ret i1 %cmp
91ac93a4e7SChen Zheng}
92ac93a4e7SChen Zheng
93ac93a4e7SChen Zhengdefine i1 @fcmp_une(float %a, float %b) {
94ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_une:
95ac93a4e7SChen Zheng; CHECK:       # %bb.0:
96ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
97ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
98ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
99ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, eq
100ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
101ac93a4e7SChen Zheng; CHECK-NEXT:    blr
102ac93a4e7SChen Zheng  %cmp = fcmp une float %a, %b
103ac93a4e7SChen Zheng  ret i1 %cmp
104ac93a4e7SChen Zheng}
105ac93a4e7SChen Zheng
106ac93a4e7SChen Zhengdefine i1 @fcmp_uno(float %a, float %b) {
107ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uno:
108ac93a4e7SChen Zheng; CHECK:       # %bb.0:
109ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
110ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
111ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
112ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, un
113ac93a4e7SChen Zheng; CHECK-NEXT:    blr
114ac93a4e7SChen Zheng  %cmp = fcmp uno float %a, %b
115ac93a4e7SChen Zheng  ret i1 %cmp
116ac93a4e7SChen Zheng}
117ac93a4e7SChen Zheng
118ac93a4e7SChen Zhengdefine i1 @fcmp_true(float %a, float %b) {
119ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_true:
120ac93a4e7SChen Zheng; CHECK:       # %bb.0:
121ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 1
122ac93a4e7SChen Zheng; CHECK-NEXT:    blr
123ac93a4e7SChen Zheng  %cmp = fcmp true float %a, %b
124ac93a4e7SChen Zheng  ret i1 %cmp
125ac93a4e7SChen Zheng}
126ac93a4e7SChen Zheng
127ac93a4e7SChen Zhengdefine i1 @fcmp_false_double(double %a, double %b) {
128ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_false_double:
129ac93a4e7SChen Zheng; CHECK:       # %bb.0:
130ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
131ac93a4e7SChen Zheng; CHECK-NEXT:    blr
132ac93a4e7SChen Zheng  %cmp = fcmp false double %a, %b
133ac93a4e7SChen Zheng  ret i1 %cmp
134ac93a4e7SChen Zheng}
135ac93a4e7SChen Zheng
136ac93a4e7SChen Zhengdefine i1 @fcmp_oeq_double(double %a, double %b) {
137ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_oeq_double:
138ac93a4e7SChen Zheng; CHECK:       # %bb.0:
139ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
140ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
141ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
142ac93a4e7SChen Zheng; CHECK-NEXT:    iseleq r3, r4, r3
143ac93a4e7SChen Zheng; CHECK-NEXT:    blr
144ac93a4e7SChen Zheng  %cmp = fcmp oeq double %a, %b
145ac93a4e7SChen Zheng  ret i1 %cmp
146ac93a4e7SChen Zheng}
147ac93a4e7SChen Zheng
148ac93a4e7SChen Zhengdefine i1 @fcmp_ogt_double(double %a, double %b) {
149ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ogt_double:
150ac93a4e7SChen Zheng; CHECK:       # %bb.0:
151ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
152ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
153ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
154ac93a4e7SChen Zheng; CHECK-NEXT:    iselgt r3, r4, r3
155ac93a4e7SChen Zheng; CHECK-NEXT:    blr
156ac93a4e7SChen Zheng  %cmp = fcmp ogt double %a, %b
157ac93a4e7SChen Zheng  ret i1 %cmp
158ac93a4e7SChen Zheng}
159ac93a4e7SChen Zheng
160ac93a4e7SChen Zhengdefine i1 @fcmp_olt_double(double %a, double %b) {
161ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_olt_double:
162ac93a4e7SChen Zheng; CHECK:       # %bb.0:
163ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
164ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
165ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
166ac93a4e7SChen Zheng; CHECK-NEXT:    isellt r3, r4, r3
167ac93a4e7SChen Zheng; CHECK-NEXT:    blr
168ac93a4e7SChen Zheng  %cmp = fcmp olt double %a, %b
169ac93a4e7SChen Zheng  ret i1 %cmp
170ac93a4e7SChen Zheng}
171ac93a4e7SChen Zheng
172ac93a4e7SChen Zhengdefine i1 @fcmp_ord_double(double %a, double %b) {
173ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ord_double:
174ac93a4e7SChen Zheng; CHECK:       # %bb.0:
175ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
176ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
177ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
178ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, un
179ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
180ac93a4e7SChen Zheng; CHECK-NEXT:    blr
181ac93a4e7SChen Zheng  %cmp = fcmp ord double %a, %b
182ac93a4e7SChen Zheng  ret i1 %cmp
183ac93a4e7SChen Zheng}
184ac93a4e7SChen Zheng
185ac93a4e7SChen Zhengdefine i1 @fcmp_uge_double(double %a, double %b) {
186ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uge_double:
187ac93a4e7SChen Zheng; CHECK:       # %bb.0:
188ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
189ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
190ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
191ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, lt
192ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
193ac93a4e7SChen Zheng; CHECK-NEXT:    blr
194ac93a4e7SChen Zheng  %cmp = fcmp uge double %a, %b
195ac93a4e7SChen Zheng  ret i1 %cmp
196ac93a4e7SChen Zheng}
197ac93a4e7SChen Zheng
198ac93a4e7SChen Zhengdefine i1 @fcmp_ule_double(double %a, double %b) {
199ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_ule_double:
200ac93a4e7SChen Zheng; CHECK:       # %bb.0:
201ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
202ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
203ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
204ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, gt
205ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
206ac93a4e7SChen Zheng; CHECK-NEXT:    blr
207ac93a4e7SChen Zheng  %cmp = fcmp ule double %a, %b
208ac93a4e7SChen Zheng  ret i1 %cmp
209ac93a4e7SChen Zheng}
210ac93a4e7SChen Zheng
211ac93a4e7SChen Zhengdefine i1 @fcmp_une_double(double %a, double %b) {
212ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_une_double:
213ac93a4e7SChen Zheng; CHECK:       # %bb.0:
214ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
215ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
216ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
217ac93a4e7SChen Zheng; CHECK-NEXT:    crnot 4*cr5+lt, eq
218ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, 4*cr5+lt
219ac93a4e7SChen Zheng; CHECK-NEXT:    blr
220ac93a4e7SChen Zheng  %cmp = fcmp une double %a, %b
221ac93a4e7SChen Zheng  ret i1 %cmp
222ac93a4e7SChen Zheng}
223ac93a4e7SChen Zheng
224ac93a4e7SChen Zhengdefine i1 @fcmp_uno_double(double %a, double %b) {
225ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_uno_double:
226ac93a4e7SChen Zheng; CHECK:       # %bb.0:
227ac93a4e7SChen Zheng; CHECK-NEXT:    fcmpu cr0, f1, f2
228ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 0
229ac93a4e7SChen Zheng; CHECK-NEXT:    li r4, 1
230ac93a4e7SChen Zheng; CHECK-NEXT:    isel r3, r4, r3, un
231ac93a4e7SChen Zheng; CHECK-NEXT:    blr
232ac93a4e7SChen Zheng  %cmp = fcmp uno double %a, %b
233ac93a4e7SChen Zheng  ret i1 %cmp
234ac93a4e7SChen Zheng}
235ac93a4e7SChen Zheng
236ac93a4e7SChen Zhengdefine i1 @fcmp_true_double(double %a, double %b) {
237ac93a4e7SChen Zheng; CHECK-LABEL: fcmp_true_double:
238ac93a4e7SChen Zheng; CHECK:       # %bb.0:
239ac93a4e7SChen Zheng; CHECK-NEXT:    li r3, 1
240ac93a4e7SChen Zheng; CHECK-NEXT:    blr
241ac93a4e7SChen Zheng  %cmp = fcmp true double %a, %b
242ac93a4e7SChen Zheng  ret i1 %cmp
243ac93a4e7SChen Zheng}
244