1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \
3 ; RUN: -target-abi ilp32f < %s | FileCheck -check-prefix=CHECKIZFH %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \
5 ; RUN: -target-abi lp64f < %s | FileCheck -check-prefix=CHECKIZFH %s
6 ; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \
7 ; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=CHECKIZHINX %s
8 ; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \
9 ; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=CHECKIZHINX %s
10 ; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \
11 ; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=RV32I %s
12 ; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \
13 ; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=RV64I %s
14 ; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs \
15 ; RUN: -target-abi ilp32f < %s | FileCheck -check-prefix=CHECKIZFHMIN-ILP32F-LP64F %s
16 ; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs \
17 ; RUN: -target-abi lp64f < %s | FileCheck -check-prefix=CHECKIZFHMIN-ILP32F-LP64F %s
18 ; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs \
19 ; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=CHECKIZFHMIN %s
20 ; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs \
21 ; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=CHECKIZFHMIN %s
22 ; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs \
23 ; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=CHECKIZHINXMIN %s
24 ; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs \
25 ; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=CHECKIZHINXMIN %s
27 define i32 @fcmp_false(half %a, half %b) nounwind {
28 ; CHECKIZFH-LABEL: fcmp_false:
30 ; CHECKIZFH-NEXT: li a0, 0
33 ; CHECKIZHINX-LABEL: fcmp_false:
34 ; CHECKIZHINX: # %bb.0:
35 ; CHECKIZHINX-NEXT: li a0, 0
36 ; CHECKIZHINX-NEXT: ret
38 ; RV32I-LABEL: fcmp_false:
40 ; RV32I-NEXT: li a0, 0
43 ; RV64I-LABEL: fcmp_false:
45 ; RV64I-NEXT: li a0, 0
48 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_false:
49 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
50 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: li a0, 0
51 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
53 ; CHECKIZFHMIN-LABEL: fcmp_false:
54 ; CHECKIZFHMIN: # %bb.0:
55 ; CHECKIZFHMIN-NEXT: li a0, 0
56 ; CHECKIZFHMIN-NEXT: ret
58 ; CHECKIZHINXMIN-LABEL: fcmp_false:
59 ; CHECKIZHINXMIN: # %bb.0:
60 ; CHECKIZHINXMIN-NEXT: li a0, 0
61 ; CHECKIZHINXMIN-NEXT: ret
62 %1 = fcmp false half %a, %b
63 %2 = zext i1 %1 to i32
67 define i32 @fcmp_oeq(half %a, half %b) nounwind {
68 ; CHECKIZFH-LABEL: fcmp_oeq:
70 ; CHECKIZFH-NEXT: feq.h a0, fa0, fa1
73 ; CHECKIZHINX-LABEL: fcmp_oeq:
74 ; CHECKIZHINX: # %bb.0:
75 ; CHECKIZHINX-NEXT: feq.h a0, a0, a1
76 ; CHECKIZHINX-NEXT: ret
78 ; RV32I-LABEL: fcmp_oeq:
80 ; RV32I-NEXT: fmv.h.x fa5, a1
81 ; RV32I-NEXT: fmv.h.x fa4, a0
82 ; RV32I-NEXT: feq.h a0, fa4, fa5
85 ; RV64I-LABEL: fcmp_oeq:
87 ; RV64I-NEXT: fmv.h.x fa5, a1
88 ; RV64I-NEXT: fmv.h.x fa4, a0
89 ; RV64I-NEXT: feq.h a0, fa4, fa5
92 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_oeq:
93 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
94 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
95 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
96 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: feq.s a0, fa4, fa5
97 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
99 ; CHECKIZFHMIN-LABEL: fcmp_oeq:
100 ; CHECKIZFHMIN: # %bb.0:
101 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
102 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
103 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
104 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
105 ; CHECKIZFHMIN-NEXT: feq.s a0, fa5, fa4
106 ; CHECKIZFHMIN-NEXT: ret
108 ; CHECKIZHINXMIN-LABEL: fcmp_oeq:
109 ; CHECKIZHINXMIN: # %bb.0:
110 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
111 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
112 ; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a1
113 ; CHECKIZHINXMIN-NEXT: ret
114 %1 = fcmp oeq half %a, %b
115 %2 = zext i1 %1 to i32
119 define i32 @fcmp_ogt(half %a, half %b) nounwind {
120 ; CHECKIZFH-LABEL: fcmp_ogt:
121 ; CHECKIZFH: # %bb.0:
122 ; CHECKIZFH-NEXT: flt.h a0, fa1, fa0
123 ; CHECKIZFH-NEXT: ret
125 ; CHECKIZHINX-LABEL: fcmp_ogt:
126 ; CHECKIZHINX: # %bb.0:
127 ; CHECKIZHINX-NEXT: flt.h a0, a1, a0
128 ; CHECKIZHINX-NEXT: ret
130 ; RV32I-LABEL: fcmp_ogt:
132 ; RV32I-NEXT: fmv.h.x fa5, a0
133 ; RV32I-NEXT: fmv.h.x fa4, a1
134 ; RV32I-NEXT: flt.h a0, fa4, fa5
137 ; RV64I-LABEL: fcmp_ogt:
139 ; RV64I-NEXT: fmv.h.x fa5, a0
140 ; RV64I-NEXT: fmv.h.x fa4, a1
141 ; RV64I-NEXT: flt.h a0, fa4, fa5
144 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_ogt:
145 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
146 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa0
147 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa1
148 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a0, fa4, fa5
149 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
151 ; CHECKIZFHMIN-LABEL: fcmp_ogt:
152 ; CHECKIZFHMIN: # %bb.0:
153 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a1
154 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a0
155 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
156 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
157 ; CHECKIZFHMIN-NEXT: flt.s a0, fa5, fa4
158 ; CHECKIZFHMIN-NEXT: ret
160 ; CHECKIZHINXMIN-LABEL: fcmp_ogt:
161 ; CHECKIZHINXMIN: # %bb.0:
162 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
163 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
164 ; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0
165 ; CHECKIZHINXMIN-NEXT: ret
166 %1 = fcmp ogt half %a, %b
167 %2 = zext i1 %1 to i32
171 define i32 @fcmp_oge(half %a, half %b) nounwind {
172 ; CHECKIZFH-LABEL: fcmp_oge:
173 ; CHECKIZFH: # %bb.0:
174 ; CHECKIZFH-NEXT: fle.h a0, fa1, fa0
175 ; CHECKIZFH-NEXT: ret
177 ; CHECKIZHINX-LABEL: fcmp_oge:
178 ; CHECKIZHINX: # %bb.0:
179 ; CHECKIZHINX-NEXT: fle.h a0, a1, a0
180 ; CHECKIZHINX-NEXT: ret
182 ; RV32I-LABEL: fcmp_oge:
184 ; RV32I-NEXT: fmv.h.x fa5, a0
185 ; RV32I-NEXT: fmv.h.x fa4, a1
186 ; RV32I-NEXT: fle.h a0, fa4, fa5
189 ; RV64I-LABEL: fcmp_oge:
191 ; RV64I-NEXT: fmv.h.x fa5, a0
192 ; RV64I-NEXT: fmv.h.x fa4, a1
193 ; RV64I-NEXT: fle.h a0, fa4, fa5
196 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_oge:
197 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
198 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa0
199 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa1
200 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fle.s a0, fa4, fa5
201 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
203 ; CHECKIZFHMIN-LABEL: fcmp_oge:
204 ; CHECKIZFHMIN: # %bb.0:
205 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a1
206 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a0
207 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
208 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
209 ; CHECKIZFHMIN-NEXT: fle.s a0, fa5, fa4
210 ; CHECKIZFHMIN-NEXT: ret
212 ; CHECKIZHINXMIN-LABEL: fcmp_oge:
213 ; CHECKIZHINXMIN: # %bb.0:
214 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
215 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
216 ; CHECKIZHINXMIN-NEXT: fle.s a0, a1, a0
217 ; CHECKIZHINXMIN-NEXT: ret
218 %1 = fcmp oge half %a, %b
219 %2 = zext i1 %1 to i32
223 define i32 @fcmp_olt(half %a, half %b) nounwind {
224 ; CHECKIZFH-LABEL: fcmp_olt:
225 ; CHECKIZFH: # %bb.0:
226 ; CHECKIZFH-NEXT: flt.h a0, fa0, fa1
227 ; CHECKIZFH-NEXT: ret
229 ; CHECKIZHINX-LABEL: fcmp_olt:
230 ; CHECKIZHINX: # %bb.0:
231 ; CHECKIZHINX-NEXT: flt.h a0, a0, a1
232 ; CHECKIZHINX-NEXT: ret
234 ; RV32I-LABEL: fcmp_olt:
236 ; RV32I-NEXT: fmv.h.x fa5, a1
237 ; RV32I-NEXT: fmv.h.x fa4, a0
238 ; RV32I-NEXT: flt.h a0, fa4, fa5
241 ; RV64I-LABEL: fcmp_olt:
243 ; RV64I-NEXT: fmv.h.x fa5, a1
244 ; RV64I-NEXT: fmv.h.x fa4, a0
245 ; RV64I-NEXT: flt.h a0, fa4, fa5
248 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_olt:
249 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
250 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
251 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
252 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a0, fa4, fa5
253 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
255 ; CHECKIZFHMIN-LABEL: fcmp_olt:
256 ; CHECKIZFHMIN: # %bb.0:
257 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
258 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
259 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
260 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
261 ; CHECKIZFHMIN-NEXT: flt.s a0, fa5, fa4
262 ; CHECKIZFHMIN-NEXT: ret
264 ; CHECKIZHINXMIN-LABEL: fcmp_olt:
265 ; CHECKIZHINXMIN: # %bb.0:
266 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
267 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
268 ; CHECKIZHINXMIN-NEXT: flt.s a0, a0, a1
269 ; CHECKIZHINXMIN-NEXT: ret
270 %1 = fcmp olt half %a, %b
271 %2 = zext i1 %1 to i32
275 define i32 @fcmp_ole(half %a, half %b) nounwind {
276 ; CHECKIZFH-LABEL: fcmp_ole:
277 ; CHECKIZFH: # %bb.0:
278 ; CHECKIZFH-NEXT: fle.h a0, fa0, fa1
279 ; CHECKIZFH-NEXT: ret
281 ; CHECKIZHINX-LABEL: fcmp_ole:
282 ; CHECKIZHINX: # %bb.0:
283 ; CHECKIZHINX-NEXT: fle.h a0, a0, a1
284 ; CHECKIZHINX-NEXT: ret
286 ; RV32I-LABEL: fcmp_ole:
288 ; RV32I-NEXT: fmv.h.x fa5, a1
289 ; RV32I-NEXT: fmv.h.x fa4, a0
290 ; RV32I-NEXT: fle.h a0, fa4, fa5
293 ; RV64I-LABEL: fcmp_ole:
295 ; RV64I-NEXT: fmv.h.x fa5, a1
296 ; RV64I-NEXT: fmv.h.x fa4, a0
297 ; RV64I-NEXT: fle.h a0, fa4, fa5
300 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_ole:
301 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
302 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
303 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
304 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fle.s a0, fa4, fa5
305 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
307 ; CHECKIZFHMIN-LABEL: fcmp_ole:
308 ; CHECKIZFHMIN: # %bb.0:
309 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
310 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
311 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
312 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
313 ; CHECKIZFHMIN-NEXT: fle.s a0, fa5, fa4
314 ; CHECKIZFHMIN-NEXT: ret
316 ; CHECKIZHINXMIN-LABEL: fcmp_ole:
317 ; CHECKIZHINXMIN: # %bb.0:
318 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
319 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
320 ; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a1
321 ; CHECKIZHINXMIN-NEXT: ret
322 %1 = fcmp ole half %a, %b
323 %2 = zext i1 %1 to i32
327 define i32 @fcmp_one(half %a, half %b) nounwind {
328 ; CHECKIZFH-LABEL: fcmp_one:
329 ; CHECKIZFH: # %bb.0:
330 ; CHECKIZFH-NEXT: flt.h a0, fa0, fa1
331 ; CHECKIZFH-NEXT: flt.h a1, fa1, fa0
332 ; CHECKIZFH-NEXT: or a0, a1, a0
333 ; CHECKIZFH-NEXT: ret
335 ; CHECKIZHINX-LABEL: fcmp_one:
336 ; CHECKIZHINX: # %bb.0:
337 ; CHECKIZHINX-NEXT: flt.h a2, a0, a1
338 ; CHECKIZHINX-NEXT: flt.h a0, a1, a0
339 ; CHECKIZHINX-NEXT: or a0, a0, a2
340 ; CHECKIZHINX-NEXT: ret
342 ; RV32I-LABEL: fcmp_one:
344 ; RV32I-NEXT: fmv.h.x fa5, a1
345 ; RV32I-NEXT: fmv.h.x fa4, a0
346 ; RV32I-NEXT: flt.h a0, fa4, fa5
347 ; RV32I-NEXT: flt.h a1, fa5, fa4
348 ; RV32I-NEXT: or a0, a1, a0
351 ; RV64I-LABEL: fcmp_one:
353 ; RV64I-NEXT: fmv.h.x fa5, a1
354 ; RV64I-NEXT: fmv.h.x fa4, a0
355 ; RV64I-NEXT: flt.h a0, fa4, fa5
356 ; RV64I-NEXT: flt.h a1, fa5, fa4
357 ; RV64I-NEXT: or a0, a1, a0
360 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_one:
361 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
362 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
363 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
364 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a0, fa4, fa5
365 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a1, fa5, fa4
366 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: or a0, a1, a0
367 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
369 ; CHECKIZFHMIN-LABEL: fcmp_one:
370 ; CHECKIZFHMIN: # %bb.0:
371 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
372 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
373 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
374 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
375 ; CHECKIZFHMIN-NEXT: flt.s a0, fa5, fa4
376 ; CHECKIZFHMIN-NEXT: flt.s a1, fa4, fa5
377 ; CHECKIZFHMIN-NEXT: or a0, a1, a0
378 ; CHECKIZFHMIN-NEXT: ret
380 ; CHECKIZHINXMIN-LABEL: fcmp_one:
381 ; CHECKIZHINXMIN: # %bb.0:
382 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
383 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
384 ; CHECKIZHINXMIN-NEXT: flt.s a2, a0, a1
385 ; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0
386 ; CHECKIZHINXMIN-NEXT: or a0, a0, a2
387 ; CHECKIZHINXMIN-NEXT: ret
388 %1 = fcmp one half %a, %b
389 %2 = zext i1 %1 to i32
393 define i32 @fcmp_ord(half %a, half %b) nounwind {
394 ; CHECKIZFH-LABEL: fcmp_ord:
395 ; CHECKIZFH: # %bb.0:
396 ; CHECKIZFH-NEXT: feq.h a0, fa1, fa1
397 ; CHECKIZFH-NEXT: feq.h a1, fa0, fa0
398 ; CHECKIZFH-NEXT: and a0, a1, a0
399 ; CHECKIZFH-NEXT: ret
401 ; CHECKIZHINX-LABEL: fcmp_ord:
402 ; CHECKIZHINX: # %bb.0:
403 ; CHECKIZHINX-NEXT: feq.h a1, a1, a1
404 ; CHECKIZHINX-NEXT: feq.h a0, a0, a0
405 ; CHECKIZHINX-NEXT: and a0, a0, a1
406 ; CHECKIZHINX-NEXT: ret
408 ; RV32I-LABEL: fcmp_ord:
410 ; RV32I-NEXT: fmv.h.x fa5, a0
411 ; RV32I-NEXT: fmv.h.x fa4, a1
412 ; RV32I-NEXT: feq.h a0, fa4, fa4
413 ; RV32I-NEXT: feq.h a1, fa5, fa5
414 ; RV32I-NEXT: and a0, a1, a0
417 ; RV64I-LABEL: fcmp_ord:
419 ; RV64I-NEXT: fmv.h.x fa5, a0
420 ; RV64I-NEXT: fmv.h.x fa4, a1
421 ; RV64I-NEXT: feq.h a0, fa4, fa4
422 ; RV64I-NEXT: feq.h a1, fa5, fa5
423 ; RV64I-NEXT: and a0, a1, a0
426 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_ord:
427 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
428 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
429 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: feq.s a0, fa5, fa5
430 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa0
431 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: feq.s a1, fa5, fa5
432 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: and a0, a1, a0
433 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
435 ; CHECKIZFHMIN-LABEL: fcmp_ord:
436 ; CHECKIZFHMIN: # %bb.0:
437 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
438 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
439 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
440 ; CHECKIZFHMIN-NEXT: feq.s a0, fa4, fa4
441 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
442 ; CHECKIZFHMIN-NEXT: feq.s a1, fa5, fa5
443 ; CHECKIZFHMIN-NEXT: and a0, a1, a0
444 ; CHECKIZFHMIN-NEXT: ret
446 ; CHECKIZHINXMIN-LABEL: fcmp_ord:
447 ; CHECKIZHINXMIN: # %bb.0:
448 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
449 ; CHECKIZHINXMIN-NEXT: feq.s a1, a1, a1
450 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
451 ; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a0
452 ; CHECKIZHINXMIN-NEXT: and a0, a0, a1
453 ; CHECKIZHINXMIN-NEXT: ret
454 %1 = fcmp ord half %a, %b
455 %2 = zext i1 %1 to i32
459 define i32 @fcmp_ueq(half %a, half %b) nounwind {
460 ; CHECKIZFH-LABEL: fcmp_ueq:
461 ; CHECKIZFH: # %bb.0:
462 ; CHECKIZFH-NEXT: flt.h a0, fa0, fa1
463 ; CHECKIZFH-NEXT: flt.h a1, fa1, fa0
464 ; CHECKIZFH-NEXT: or a0, a1, a0
465 ; CHECKIZFH-NEXT: xori a0, a0, 1
466 ; CHECKIZFH-NEXT: ret
468 ; CHECKIZHINX-LABEL: fcmp_ueq:
469 ; CHECKIZHINX: # %bb.0:
470 ; CHECKIZHINX-NEXT: flt.h a2, a0, a1
471 ; CHECKIZHINX-NEXT: flt.h a0, a1, a0
472 ; CHECKIZHINX-NEXT: or a0, a0, a2
473 ; CHECKIZHINX-NEXT: xori a0, a0, 1
474 ; CHECKIZHINX-NEXT: ret
476 ; RV32I-LABEL: fcmp_ueq:
478 ; RV32I-NEXT: fmv.h.x fa5, a1
479 ; RV32I-NEXT: fmv.h.x fa4, a0
480 ; RV32I-NEXT: flt.h a0, fa4, fa5
481 ; RV32I-NEXT: flt.h a1, fa5, fa4
482 ; RV32I-NEXT: or a0, a1, a0
483 ; RV32I-NEXT: xori a0, a0, 1
486 ; RV64I-LABEL: fcmp_ueq:
488 ; RV64I-NEXT: fmv.h.x fa5, a1
489 ; RV64I-NEXT: fmv.h.x fa4, a0
490 ; RV64I-NEXT: flt.h a0, fa4, fa5
491 ; RV64I-NEXT: flt.h a1, fa5, fa4
492 ; RV64I-NEXT: or a0, a1, a0
493 ; RV64I-NEXT: xori a0, a0, 1
496 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_ueq:
497 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
498 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
499 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
500 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a0, fa4, fa5
501 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a1, fa5, fa4
502 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: or a0, a1, a0
503 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: xori a0, a0, 1
504 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
506 ; CHECKIZFHMIN-LABEL: fcmp_ueq:
507 ; CHECKIZFHMIN: # %bb.0:
508 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
509 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
510 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
511 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
512 ; CHECKIZFHMIN-NEXT: flt.s a0, fa5, fa4
513 ; CHECKIZFHMIN-NEXT: flt.s a1, fa4, fa5
514 ; CHECKIZFHMIN-NEXT: or a0, a1, a0
515 ; CHECKIZFHMIN-NEXT: xori a0, a0, 1
516 ; CHECKIZFHMIN-NEXT: ret
518 ; CHECKIZHINXMIN-LABEL: fcmp_ueq:
519 ; CHECKIZHINXMIN: # %bb.0:
520 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
521 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
522 ; CHECKIZHINXMIN-NEXT: flt.s a2, a0, a1
523 ; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0
524 ; CHECKIZHINXMIN-NEXT: or a0, a0, a2
525 ; CHECKIZHINXMIN-NEXT: xori a0, a0, 1
526 ; CHECKIZHINXMIN-NEXT: ret
527 %1 = fcmp ueq half %a, %b
528 %2 = zext i1 %1 to i32
532 define i32 @fcmp_ugt(half %a, half %b) nounwind {
533 ; CHECKIZFH-LABEL: fcmp_ugt:
534 ; CHECKIZFH: # %bb.0:
535 ; CHECKIZFH-NEXT: fle.h a0, fa0, fa1
536 ; CHECKIZFH-NEXT: xori a0, a0, 1
537 ; CHECKIZFH-NEXT: ret
539 ; CHECKIZHINX-LABEL: fcmp_ugt:
540 ; CHECKIZHINX: # %bb.0:
541 ; CHECKIZHINX-NEXT: fle.h a0, a0, a1
542 ; CHECKIZHINX-NEXT: xori a0, a0, 1
543 ; CHECKIZHINX-NEXT: ret
545 ; RV32I-LABEL: fcmp_ugt:
547 ; RV32I-NEXT: fmv.h.x fa5, a1
548 ; RV32I-NEXT: fmv.h.x fa4, a0
549 ; RV32I-NEXT: fle.h a0, fa4, fa5
550 ; RV32I-NEXT: xori a0, a0, 1
553 ; RV64I-LABEL: fcmp_ugt:
555 ; RV64I-NEXT: fmv.h.x fa5, a1
556 ; RV64I-NEXT: fmv.h.x fa4, a0
557 ; RV64I-NEXT: fle.h a0, fa4, fa5
558 ; RV64I-NEXT: xori a0, a0, 1
561 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_ugt:
562 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
563 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
564 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
565 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fle.s a0, fa4, fa5
566 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: xori a0, a0, 1
567 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
569 ; CHECKIZFHMIN-LABEL: fcmp_ugt:
570 ; CHECKIZFHMIN: # %bb.0:
571 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
572 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
573 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
574 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
575 ; CHECKIZFHMIN-NEXT: fle.s a0, fa5, fa4
576 ; CHECKIZFHMIN-NEXT: xori a0, a0, 1
577 ; CHECKIZFHMIN-NEXT: ret
579 ; CHECKIZHINXMIN-LABEL: fcmp_ugt:
580 ; CHECKIZHINXMIN: # %bb.0:
581 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
582 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
583 ; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a1
584 ; CHECKIZHINXMIN-NEXT: xori a0, a0, 1
585 ; CHECKIZHINXMIN-NEXT: ret
586 %1 = fcmp ugt half %a, %b
587 %2 = zext i1 %1 to i32
591 define i32 @fcmp_uge(half %a, half %b) nounwind {
592 ; CHECKIZFH-LABEL: fcmp_uge:
593 ; CHECKIZFH: # %bb.0:
594 ; CHECKIZFH-NEXT: flt.h a0, fa0, fa1
595 ; CHECKIZFH-NEXT: xori a0, a0, 1
596 ; CHECKIZFH-NEXT: ret
598 ; CHECKIZHINX-LABEL: fcmp_uge:
599 ; CHECKIZHINX: # %bb.0:
600 ; CHECKIZHINX-NEXT: flt.h a0, a0, a1
601 ; CHECKIZHINX-NEXT: xori a0, a0, 1
602 ; CHECKIZHINX-NEXT: ret
604 ; RV32I-LABEL: fcmp_uge:
606 ; RV32I-NEXT: fmv.h.x fa5, a1
607 ; RV32I-NEXT: fmv.h.x fa4, a0
608 ; RV32I-NEXT: flt.h a0, fa4, fa5
609 ; RV32I-NEXT: xori a0, a0, 1
612 ; RV64I-LABEL: fcmp_uge:
614 ; RV64I-NEXT: fmv.h.x fa5, a1
615 ; RV64I-NEXT: fmv.h.x fa4, a0
616 ; RV64I-NEXT: flt.h a0, fa4, fa5
617 ; RV64I-NEXT: xori a0, a0, 1
620 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_uge:
621 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
622 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
623 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
624 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a0, fa4, fa5
625 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: xori a0, a0, 1
626 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
628 ; CHECKIZFHMIN-LABEL: fcmp_uge:
629 ; CHECKIZFHMIN: # %bb.0:
630 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
631 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
632 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
633 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
634 ; CHECKIZFHMIN-NEXT: flt.s a0, fa5, fa4
635 ; CHECKIZFHMIN-NEXT: xori a0, a0, 1
636 ; CHECKIZFHMIN-NEXT: ret
638 ; CHECKIZHINXMIN-LABEL: fcmp_uge:
639 ; CHECKIZHINXMIN: # %bb.0:
640 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
641 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
642 ; CHECKIZHINXMIN-NEXT: flt.s a0, a0, a1
643 ; CHECKIZHINXMIN-NEXT: xori a0, a0, 1
644 ; CHECKIZHINXMIN-NEXT: ret
645 %1 = fcmp uge half %a, %b
646 %2 = zext i1 %1 to i32
650 define i32 @fcmp_ult(half %a, half %b) nounwind {
651 ; CHECKIZFH-LABEL: fcmp_ult:
652 ; CHECKIZFH: # %bb.0:
653 ; CHECKIZFH-NEXT: fle.h a0, fa1, fa0
654 ; CHECKIZFH-NEXT: xori a0, a0, 1
655 ; CHECKIZFH-NEXT: ret
657 ; CHECKIZHINX-LABEL: fcmp_ult:
658 ; CHECKIZHINX: # %bb.0:
659 ; CHECKIZHINX-NEXT: fle.h a0, a1, a0
660 ; CHECKIZHINX-NEXT: xori a0, a0, 1
661 ; CHECKIZHINX-NEXT: ret
663 ; RV32I-LABEL: fcmp_ult:
665 ; RV32I-NEXT: fmv.h.x fa5, a0
666 ; RV32I-NEXT: fmv.h.x fa4, a1
667 ; RV32I-NEXT: fle.h a0, fa4, fa5
668 ; RV32I-NEXT: xori a0, a0, 1
671 ; RV64I-LABEL: fcmp_ult:
673 ; RV64I-NEXT: fmv.h.x fa5, a0
674 ; RV64I-NEXT: fmv.h.x fa4, a1
675 ; RV64I-NEXT: fle.h a0, fa4, fa5
676 ; RV64I-NEXT: xori a0, a0, 1
679 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_ult:
680 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
681 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa0
682 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa1
683 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fle.s a0, fa4, fa5
684 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: xori a0, a0, 1
685 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
687 ; CHECKIZFHMIN-LABEL: fcmp_ult:
688 ; CHECKIZFHMIN: # %bb.0:
689 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a1
690 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a0
691 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
692 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
693 ; CHECKIZFHMIN-NEXT: fle.s a0, fa5, fa4
694 ; CHECKIZFHMIN-NEXT: xori a0, a0, 1
695 ; CHECKIZFHMIN-NEXT: ret
697 ; CHECKIZHINXMIN-LABEL: fcmp_ult:
698 ; CHECKIZHINXMIN: # %bb.0:
699 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
700 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
701 ; CHECKIZHINXMIN-NEXT: fle.s a0, a1, a0
702 ; CHECKIZHINXMIN-NEXT: xori a0, a0, 1
703 ; CHECKIZHINXMIN-NEXT: ret
704 %1 = fcmp ult half %a, %b
705 %2 = zext i1 %1 to i32
709 define i32 @fcmp_ule(half %a, half %b) nounwind {
710 ; CHECKIZFH-LABEL: fcmp_ule:
711 ; CHECKIZFH: # %bb.0:
712 ; CHECKIZFH-NEXT: flt.h a0, fa1, fa0
713 ; CHECKIZFH-NEXT: xori a0, a0, 1
714 ; CHECKIZFH-NEXT: ret
716 ; CHECKIZHINX-LABEL: fcmp_ule:
717 ; CHECKIZHINX: # %bb.0:
718 ; CHECKIZHINX-NEXT: flt.h a0, a1, a0
719 ; CHECKIZHINX-NEXT: xori a0, a0, 1
720 ; CHECKIZHINX-NEXT: ret
722 ; RV32I-LABEL: fcmp_ule:
724 ; RV32I-NEXT: fmv.h.x fa5, a0
725 ; RV32I-NEXT: fmv.h.x fa4, a1
726 ; RV32I-NEXT: flt.h a0, fa4, fa5
727 ; RV32I-NEXT: xori a0, a0, 1
730 ; RV64I-LABEL: fcmp_ule:
732 ; RV64I-NEXT: fmv.h.x fa5, a0
733 ; RV64I-NEXT: fmv.h.x fa4, a1
734 ; RV64I-NEXT: flt.h a0, fa4, fa5
735 ; RV64I-NEXT: xori a0, a0, 1
738 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_ule:
739 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
740 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa0
741 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa1
742 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: flt.s a0, fa4, fa5
743 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: xori a0, a0, 1
744 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
746 ; CHECKIZFHMIN-LABEL: fcmp_ule:
747 ; CHECKIZFHMIN: # %bb.0:
748 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a1
749 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a0
750 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
751 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
752 ; CHECKIZFHMIN-NEXT: flt.s a0, fa5, fa4
753 ; CHECKIZFHMIN-NEXT: xori a0, a0, 1
754 ; CHECKIZFHMIN-NEXT: ret
756 ; CHECKIZHINXMIN-LABEL: fcmp_ule:
757 ; CHECKIZHINXMIN: # %bb.0:
758 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
759 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
760 ; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0
761 ; CHECKIZHINXMIN-NEXT: xori a0, a0, 1
762 ; CHECKIZHINXMIN-NEXT: ret
763 %1 = fcmp ule half %a, %b
764 %2 = zext i1 %1 to i32
768 define i32 @fcmp_une(half %a, half %b) nounwind {
769 ; CHECKIZFH-LABEL: fcmp_une:
770 ; CHECKIZFH: # %bb.0:
771 ; CHECKIZFH-NEXT: feq.h a0, fa0, fa1
772 ; CHECKIZFH-NEXT: xori a0, a0, 1
773 ; CHECKIZFH-NEXT: ret
775 ; CHECKIZHINX-LABEL: fcmp_une:
776 ; CHECKIZHINX: # %bb.0:
777 ; CHECKIZHINX-NEXT: feq.h a0, a0, a1
778 ; CHECKIZHINX-NEXT: xori a0, a0, 1
779 ; CHECKIZHINX-NEXT: ret
781 ; RV32I-LABEL: fcmp_une:
783 ; RV32I-NEXT: fmv.h.x fa5, a1
784 ; RV32I-NEXT: fmv.h.x fa4, a0
785 ; RV32I-NEXT: feq.h a0, fa4, fa5
786 ; RV32I-NEXT: xori a0, a0, 1
789 ; RV64I-LABEL: fcmp_une:
791 ; RV64I-NEXT: fmv.h.x fa5, a1
792 ; RV64I-NEXT: fmv.h.x fa4, a0
793 ; RV64I-NEXT: feq.h a0, fa4, fa5
794 ; RV64I-NEXT: xori a0, a0, 1
797 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_une:
798 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
799 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
800 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa4, fa0
801 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: feq.s a0, fa4, fa5
802 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: xori a0, a0, 1
803 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
805 ; CHECKIZFHMIN-LABEL: fcmp_une:
806 ; CHECKIZFHMIN: # %bb.0:
807 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
808 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
809 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
810 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
811 ; CHECKIZFHMIN-NEXT: feq.s a0, fa5, fa4
812 ; CHECKIZFHMIN-NEXT: xori a0, a0, 1
813 ; CHECKIZFHMIN-NEXT: ret
815 ; CHECKIZHINXMIN-LABEL: fcmp_une:
816 ; CHECKIZHINXMIN: # %bb.0:
817 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
818 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
819 ; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a1
820 ; CHECKIZHINXMIN-NEXT: xori a0, a0, 1
821 ; CHECKIZHINXMIN-NEXT: ret
822 %1 = fcmp une half %a, %b
823 %2 = zext i1 %1 to i32
827 define i32 @fcmp_uno(half %a, half %b) nounwind {
828 ; CHECKIZFH-LABEL: fcmp_uno:
829 ; CHECKIZFH: # %bb.0:
830 ; CHECKIZFH-NEXT: feq.h a0, fa1, fa1
831 ; CHECKIZFH-NEXT: feq.h a1, fa0, fa0
832 ; CHECKIZFH-NEXT: and a0, a1, a0
833 ; CHECKIZFH-NEXT: xori a0, a0, 1
834 ; CHECKIZFH-NEXT: ret
836 ; CHECKIZHINX-LABEL: fcmp_uno:
837 ; CHECKIZHINX: # %bb.0:
838 ; CHECKIZHINX-NEXT: feq.h a1, a1, a1
839 ; CHECKIZHINX-NEXT: feq.h a0, a0, a0
840 ; CHECKIZHINX-NEXT: and a0, a0, a1
841 ; CHECKIZHINX-NEXT: xori a0, a0, 1
842 ; CHECKIZHINX-NEXT: ret
844 ; RV32I-LABEL: fcmp_uno:
846 ; RV32I-NEXT: fmv.h.x fa5, a0
847 ; RV32I-NEXT: fmv.h.x fa4, a1
848 ; RV32I-NEXT: feq.h a0, fa4, fa4
849 ; RV32I-NEXT: feq.h a1, fa5, fa5
850 ; RV32I-NEXT: and a0, a1, a0
851 ; RV32I-NEXT: xori a0, a0, 1
854 ; RV64I-LABEL: fcmp_uno:
856 ; RV64I-NEXT: fmv.h.x fa5, a0
857 ; RV64I-NEXT: fmv.h.x fa4, a1
858 ; RV64I-NEXT: feq.h a0, fa4, fa4
859 ; RV64I-NEXT: feq.h a1, fa5, fa5
860 ; RV64I-NEXT: and a0, a1, a0
861 ; RV64I-NEXT: xori a0, a0, 1
864 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_uno:
865 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
866 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa1
867 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: feq.s a0, fa5, fa5
868 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: fcvt.s.h fa5, fa0
869 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: feq.s a1, fa5, fa5
870 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: and a0, a1, a0
871 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: xori a0, a0, 1
872 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
874 ; CHECKIZFHMIN-LABEL: fcmp_uno:
875 ; CHECKIZFHMIN: # %bb.0:
876 ; CHECKIZFHMIN-NEXT: fmv.h.x fa5, a0
877 ; CHECKIZFHMIN-NEXT: fmv.h.x fa4, a1
878 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa4
879 ; CHECKIZFHMIN-NEXT: feq.s a0, fa4, fa4
880 ; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa5
881 ; CHECKIZFHMIN-NEXT: feq.s a1, fa5, fa5
882 ; CHECKIZFHMIN-NEXT: and a0, a1, a0
883 ; CHECKIZFHMIN-NEXT: xori a0, a0, 1
884 ; CHECKIZFHMIN-NEXT: ret
886 ; CHECKIZHINXMIN-LABEL: fcmp_uno:
887 ; CHECKIZHINXMIN: # %bb.0:
888 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1
889 ; CHECKIZHINXMIN-NEXT: feq.s a1, a1, a1
890 ; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0
891 ; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a0
892 ; CHECKIZHINXMIN-NEXT: and a0, a0, a1
893 ; CHECKIZHINXMIN-NEXT: xori a0, a0, 1
894 ; CHECKIZHINXMIN-NEXT: ret
895 %1 = fcmp uno half %a, %b
896 %2 = zext i1 %1 to i32
900 define i32 @fcmp_true(half %a, half %b) nounwind {
901 ; CHECKIZFH-LABEL: fcmp_true:
902 ; CHECKIZFH: # %bb.0:
903 ; CHECKIZFH-NEXT: li a0, 1
904 ; CHECKIZFH-NEXT: ret
906 ; CHECKIZHINX-LABEL: fcmp_true:
907 ; CHECKIZHINX: # %bb.0:
908 ; CHECKIZHINX-NEXT: li a0, 1
909 ; CHECKIZHINX-NEXT: ret
911 ; RV32I-LABEL: fcmp_true:
913 ; RV32I-NEXT: li a0, 1
916 ; RV64I-LABEL: fcmp_true:
918 ; RV64I-NEXT: li a0, 1
921 ; CHECKIZFHMIN-ILP32F-LP64F-LABEL: fcmp_true:
922 ; CHECKIZFHMIN-ILP32F-LP64F: # %bb.0:
923 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: li a0, 1
924 ; CHECKIZFHMIN-ILP32F-LP64F-NEXT: ret
926 ; CHECKIZFHMIN-LABEL: fcmp_true:
927 ; CHECKIZFHMIN: # %bb.0:
928 ; CHECKIZFHMIN-NEXT: li a0, 1
929 ; CHECKIZFHMIN-NEXT: ret
931 ; CHECKIZHINXMIN-LABEL: fcmp_true:
932 ; CHECKIZHINXMIN: # %bb.0:
933 ; CHECKIZHINXMIN-NEXT: li a0, 1
934 ; CHECKIZHINXMIN-NEXT: ret
935 %1 = fcmp true half %a, %b
936 %2 = zext i1 %1 to i32