Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / half-fcmp.ll
blob81ef56635eebcf43307a4b22959dbd87429acf58
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:
29 ; CHECKIZFH:       # %bb.0:
30 ; CHECKIZFH-NEXT:    li a0, 0
31 ; CHECKIZFH-NEXT:    ret
33 ; CHECKIZHINX-LABEL: fcmp_false:
34 ; CHECKIZHINX:       # %bb.0:
35 ; CHECKIZHINX-NEXT:    li a0, 0
36 ; CHECKIZHINX-NEXT:    ret
38 ; RV32I-LABEL: fcmp_false:
39 ; RV32I:       # %bb.0:
40 ; RV32I-NEXT:    li a0, 0
41 ; RV32I-NEXT:    ret
43 ; RV64I-LABEL: fcmp_false:
44 ; RV64I:       # %bb.0:
45 ; RV64I-NEXT:    li a0, 0
46 ; RV64I-NEXT:    ret
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
64   ret i32 %2
67 define i32 @fcmp_oeq(half %a, half %b) nounwind {
68 ; CHECKIZFH-LABEL: fcmp_oeq:
69 ; CHECKIZFH:       # %bb.0:
70 ; CHECKIZFH-NEXT:    feq.h a0, fa0, fa1
71 ; CHECKIZFH-NEXT:    ret
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:
79 ; RV32I:       # %bb.0:
80 ; RV32I-NEXT:    fmv.h.x fa5, a1
81 ; RV32I-NEXT:    fmv.h.x fa4, a0
82 ; RV32I-NEXT:    feq.h a0, fa4, fa5
83 ; RV32I-NEXT:    ret
85 ; RV64I-LABEL: fcmp_oeq:
86 ; RV64I:       # %bb.0:
87 ; RV64I-NEXT:    fmv.h.x fa5, a1
88 ; RV64I-NEXT:    fmv.h.x fa4, a0
89 ; RV64I-NEXT:    feq.h a0, fa4, fa5
90 ; RV64I-NEXT:    ret
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
116   ret i32 %2
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:
131 ; RV32I:       # %bb.0:
132 ; RV32I-NEXT:    fmv.h.x fa5, a0
133 ; RV32I-NEXT:    fmv.h.x fa4, a1
134 ; RV32I-NEXT:    flt.h a0, fa4, fa5
135 ; RV32I-NEXT:    ret
137 ; RV64I-LABEL: fcmp_ogt:
138 ; RV64I:       # %bb.0:
139 ; RV64I-NEXT:    fmv.h.x fa5, a0
140 ; RV64I-NEXT:    fmv.h.x fa4, a1
141 ; RV64I-NEXT:    flt.h a0, fa4, fa5
142 ; RV64I-NEXT:    ret
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
168   ret i32 %2
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:
183 ; RV32I:       # %bb.0:
184 ; RV32I-NEXT:    fmv.h.x fa5, a0
185 ; RV32I-NEXT:    fmv.h.x fa4, a1
186 ; RV32I-NEXT:    fle.h a0, fa4, fa5
187 ; RV32I-NEXT:    ret
189 ; RV64I-LABEL: fcmp_oge:
190 ; RV64I:       # %bb.0:
191 ; RV64I-NEXT:    fmv.h.x fa5, a0
192 ; RV64I-NEXT:    fmv.h.x fa4, a1
193 ; RV64I-NEXT:    fle.h a0, fa4, fa5
194 ; RV64I-NEXT:    ret
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
220   ret i32 %2
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:
235 ; RV32I:       # %bb.0:
236 ; RV32I-NEXT:    fmv.h.x fa5, a1
237 ; RV32I-NEXT:    fmv.h.x fa4, a0
238 ; RV32I-NEXT:    flt.h a0, fa4, fa5
239 ; RV32I-NEXT:    ret
241 ; RV64I-LABEL: fcmp_olt:
242 ; RV64I:       # %bb.0:
243 ; RV64I-NEXT:    fmv.h.x fa5, a1
244 ; RV64I-NEXT:    fmv.h.x fa4, a0
245 ; RV64I-NEXT:    flt.h a0, fa4, fa5
246 ; RV64I-NEXT:    ret
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
272   ret i32 %2
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:
287 ; RV32I:       # %bb.0:
288 ; RV32I-NEXT:    fmv.h.x fa5, a1
289 ; RV32I-NEXT:    fmv.h.x fa4, a0
290 ; RV32I-NEXT:    fle.h a0, fa4, fa5
291 ; RV32I-NEXT:    ret
293 ; RV64I-LABEL: fcmp_ole:
294 ; RV64I:       # %bb.0:
295 ; RV64I-NEXT:    fmv.h.x fa5, a1
296 ; RV64I-NEXT:    fmv.h.x fa4, a0
297 ; RV64I-NEXT:    fle.h a0, fa4, fa5
298 ; RV64I-NEXT:    ret
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
324   ret i32 %2
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:
343 ; RV32I:       # %bb.0:
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
349 ; RV32I-NEXT:    ret
351 ; RV64I-LABEL: fcmp_one:
352 ; RV64I:       # %bb.0:
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
358 ; RV64I-NEXT:    ret
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
390   ret i32 %2
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:
409 ; RV32I:       # %bb.0:
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
415 ; RV32I-NEXT:    ret
417 ; RV64I-LABEL: fcmp_ord:
418 ; RV64I:       # %bb.0:
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
424 ; RV64I-NEXT:    ret
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
456   ret i32 %2
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:
477 ; RV32I:       # %bb.0:
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
484 ; RV32I-NEXT:    ret
486 ; RV64I-LABEL: fcmp_ueq:
487 ; RV64I:       # %bb.0:
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
494 ; RV64I-NEXT:    ret
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
529   ret i32 %2
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:
546 ; RV32I:       # %bb.0:
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
551 ; RV32I-NEXT:    ret
553 ; RV64I-LABEL: fcmp_ugt:
554 ; RV64I:       # %bb.0:
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
559 ; RV64I-NEXT:    ret
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
588   ret i32 %2
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:
605 ; RV32I:       # %bb.0:
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
610 ; RV32I-NEXT:    ret
612 ; RV64I-LABEL: fcmp_uge:
613 ; RV64I:       # %bb.0:
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
618 ; RV64I-NEXT:    ret
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
647   ret i32 %2
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:
664 ; RV32I:       # %bb.0:
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
669 ; RV32I-NEXT:    ret
671 ; RV64I-LABEL: fcmp_ult:
672 ; RV64I:       # %bb.0:
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
677 ; RV64I-NEXT:    ret
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
706   ret i32 %2
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:
723 ; RV32I:       # %bb.0:
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
728 ; RV32I-NEXT:    ret
730 ; RV64I-LABEL: fcmp_ule:
731 ; RV64I:       # %bb.0:
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
736 ; RV64I-NEXT:    ret
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
765   ret i32 %2
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:
782 ; RV32I:       # %bb.0:
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
787 ; RV32I-NEXT:    ret
789 ; RV64I-LABEL: fcmp_une:
790 ; RV64I:       # %bb.0:
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
795 ; RV64I-NEXT:    ret
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
824   ret i32 %2
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:
845 ; RV32I:       # %bb.0:
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
852 ; RV32I-NEXT:    ret
854 ; RV64I-LABEL: fcmp_uno:
855 ; RV64I:       # %bb.0:
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
862 ; RV64I-NEXT:    ret
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
897   ret i32 %2
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:
912 ; RV32I:       # %bb.0:
913 ; RV32I-NEXT:    li a0, 1
914 ; RV32I-NEXT:    ret
916 ; RV64I-LABEL: fcmp_true:
917 ; RV64I:       # %bb.0:
918 ; RV64I-NEXT:    li a0, 1
919 ; RV64I-NEXT:    ret
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
937   ret i32 %2