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=RV32IZFH %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \
5 ; RUN: -target-abi lp64f < %s | FileCheck -check-prefix=RV64IZFH %s
6 ; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \
7 ; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=RV32IZHINX %s
8 ; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \
9 ; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=RV64IZHINX %s
10 ; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs \
11 ; RUN: -target-abi ilp32f < %s | FileCheck -check-prefix=RV32IZFHMIN %s
12 ; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs \
13 ; RUN: -target-abi lp64f < %s | FileCheck -check-prefix=RV64IZFHMIN %s
14 ; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs \
15 ; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=RV32IZHINXMIN %s
16 ; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs \
17 ; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=RV64IZHINXMIN %s
20 declare void @exit(i32)
21 declare half @dummy(half)
23 define void @br_fcmp_false(half %a, half %b) nounwind {
24 ; RV32IZFH-LABEL: br_fcmp_false:
26 ; RV32IZFH-NEXT: li a0, 1
27 ; RV32IZFH-NEXT: bnez a0, .LBB0_2
28 ; RV32IZFH-NEXT: # %bb.1: # %if.then
30 ; RV32IZFH-NEXT: .LBB0_2: # %if.else
31 ; RV32IZFH-NEXT: addi sp, sp, -16
32 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
33 ; RV32IZFH-NEXT: call abort
35 ; RV64IZFH-LABEL: br_fcmp_false:
37 ; RV64IZFH-NEXT: li a0, 1
38 ; RV64IZFH-NEXT: bnez a0, .LBB0_2
39 ; RV64IZFH-NEXT: # %bb.1: # %if.then
41 ; RV64IZFH-NEXT: .LBB0_2: # %if.else
42 ; RV64IZFH-NEXT: addi sp, sp, -16
43 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
44 ; RV64IZFH-NEXT: call abort
46 ; RV32IZHINX-LABEL: br_fcmp_false:
47 ; RV32IZHINX: # %bb.0:
48 ; RV32IZHINX-NEXT: li a0, 1
49 ; RV32IZHINX-NEXT: bnez a0, .LBB0_2
50 ; RV32IZHINX-NEXT: # %bb.1: # %if.then
51 ; RV32IZHINX-NEXT: ret
52 ; RV32IZHINX-NEXT: .LBB0_2: # %if.else
53 ; RV32IZHINX-NEXT: addi sp, sp, -16
54 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
55 ; RV32IZHINX-NEXT: call abort
57 ; RV64IZHINX-LABEL: br_fcmp_false:
58 ; RV64IZHINX: # %bb.0:
59 ; RV64IZHINX-NEXT: li a0, 1
60 ; RV64IZHINX-NEXT: bnez a0, .LBB0_2
61 ; RV64IZHINX-NEXT: # %bb.1: # %if.then
62 ; RV64IZHINX-NEXT: ret
63 ; RV64IZHINX-NEXT: .LBB0_2: # %if.else
64 ; RV64IZHINX-NEXT: addi sp, sp, -16
65 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
66 ; RV64IZHINX-NEXT: call abort
68 ; RV32IZFHMIN-LABEL: br_fcmp_false:
69 ; RV32IZFHMIN: # %bb.0:
70 ; RV32IZFHMIN-NEXT: li a0, 1
71 ; RV32IZFHMIN-NEXT: bnez a0, .LBB0_2
72 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.then
73 ; RV32IZFHMIN-NEXT: ret
74 ; RV32IZFHMIN-NEXT: .LBB0_2: # %if.else
75 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
76 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
77 ; RV32IZFHMIN-NEXT: call abort
79 ; RV64IZFHMIN-LABEL: br_fcmp_false:
80 ; RV64IZFHMIN: # %bb.0:
81 ; RV64IZFHMIN-NEXT: li a0, 1
82 ; RV64IZFHMIN-NEXT: bnez a0, .LBB0_2
83 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.then
84 ; RV64IZFHMIN-NEXT: ret
85 ; RV64IZFHMIN-NEXT: .LBB0_2: # %if.else
86 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
87 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
88 ; RV64IZFHMIN-NEXT: call abort
90 ; RV32IZHINXMIN-LABEL: br_fcmp_false:
91 ; RV32IZHINXMIN: # %bb.0:
92 ; RV32IZHINXMIN-NEXT: li a0, 1
93 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB0_2
94 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.then
95 ; RV32IZHINXMIN-NEXT: ret
96 ; RV32IZHINXMIN-NEXT: .LBB0_2: # %if.else
97 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
98 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
99 ; RV32IZHINXMIN-NEXT: call abort
101 ; RV64IZHINXMIN-LABEL: br_fcmp_false:
102 ; RV64IZHINXMIN: # %bb.0:
103 ; RV64IZHINXMIN-NEXT: li a0, 1
104 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB0_2
105 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.then
106 ; RV64IZHINXMIN-NEXT: ret
107 ; RV64IZHINXMIN-NEXT: .LBB0_2: # %if.else
108 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
109 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
110 ; RV64IZHINXMIN-NEXT: call abort
111 %1 = fcmp false half %a, %b
112 br i1 %1, label %if.then, label %if.else
116 tail call void @abort()
120 define void @br_fcmp_oeq(half %a, half %b) nounwind {
121 ; RV32IZFH-LABEL: br_fcmp_oeq:
123 ; RV32IZFH-NEXT: feq.h a0, fa0, fa1
124 ; RV32IZFH-NEXT: bnez a0, .LBB1_2
125 ; RV32IZFH-NEXT: # %bb.1: # %if.else
127 ; RV32IZFH-NEXT: .LBB1_2: # %if.then
128 ; RV32IZFH-NEXT: addi sp, sp, -16
129 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
130 ; RV32IZFH-NEXT: call abort
132 ; RV64IZFH-LABEL: br_fcmp_oeq:
134 ; RV64IZFH-NEXT: feq.h a0, fa0, fa1
135 ; RV64IZFH-NEXT: bnez a0, .LBB1_2
136 ; RV64IZFH-NEXT: # %bb.1: # %if.else
138 ; RV64IZFH-NEXT: .LBB1_2: # %if.then
139 ; RV64IZFH-NEXT: addi sp, sp, -16
140 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
141 ; RV64IZFH-NEXT: call abort
143 ; RV32IZHINX-LABEL: br_fcmp_oeq:
144 ; RV32IZHINX: # %bb.0:
145 ; RV32IZHINX-NEXT: feq.h a0, a0, a1
146 ; RV32IZHINX-NEXT: bnez a0, .LBB1_2
147 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
148 ; RV32IZHINX-NEXT: ret
149 ; RV32IZHINX-NEXT: .LBB1_2: # %if.then
150 ; RV32IZHINX-NEXT: addi sp, sp, -16
151 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
152 ; RV32IZHINX-NEXT: call abort
154 ; RV64IZHINX-LABEL: br_fcmp_oeq:
155 ; RV64IZHINX: # %bb.0:
156 ; RV64IZHINX-NEXT: feq.h a0, a0, a1
157 ; RV64IZHINX-NEXT: bnez a0, .LBB1_2
158 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
159 ; RV64IZHINX-NEXT: ret
160 ; RV64IZHINX-NEXT: .LBB1_2: # %if.then
161 ; RV64IZHINX-NEXT: addi sp, sp, -16
162 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
163 ; RV64IZHINX-NEXT: call abort
165 ; RV32IZFHMIN-LABEL: br_fcmp_oeq:
166 ; RV32IZFHMIN: # %bb.0:
167 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
168 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
169 ; RV32IZFHMIN-NEXT: feq.s a0, fa4, fa5
170 ; RV32IZFHMIN-NEXT: bnez a0, .LBB1_2
171 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
172 ; RV32IZFHMIN-NEXT: ret
173 ; RV32IZFHMIN-NEXT: .LBB1_2: # %if.then
174 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
175 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
176 ; RV32IZFHMIN-NEXT: call abort
178 ; RV64IZFHMIN-LABEL: br_fcmp_oeq:
179 ; RV64IZFHMIN: # %bb.0:
180 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
181 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
182 ; RV64IZFHMIN-NEXT: feq.s a0, fa4, fa5
183 ; RV64IZFHMIN-NEXT: bnez a0, .LBB1_2
184 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
185 ; RV64IZFHMIN-NEXT: ret
186 ; RV64IZFHMIN-NEXT: .LBB1_2: # %if.then
187 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
188 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
189 ; RV64IZFHMIN-NEXT: call abort
191 ; RV32IZHINXMIN-LABEL: br_fcmp_oeq:
192 ; RV32IZHINXMIN: # %bb.0:
193 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
194 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
195 ; RV32IZHINXMIN-NEXT: feq.s a0, a0, a1
196 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB1_2
197 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
198 ; RV32IZHINXMIN-NEXT: ret
199 ; RV32IZHINXMIN-NEXT: .LBB1_2: # %if.then
200 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
201 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
202 ; RV32IZHINXMIN-NEXT: call abort
204 ; RV64IZHINXMIN-LABEL: br_fcmp_oeq:
205 ; RV64IZHINXMIN: # %bb.0:
206 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
207 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
208 ; RV64IZHINXMIN-NEXT: feq.s a0, a0, a1
209 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB1_2
210 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
211 ; RV64IZHINXMIN-NEXT: ret
212 ; RV64IZHINXMIN-NEXT: .LBB1_2: # %if.then
213 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
214 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
215 ; RV64IZHINXMIN-NEXT: call abort
216 %1 = fcmp oeq half %a, %b
217 br i1 %1, label %if.then, label %if.else
221 tail call void @abort()
225 ; TODO: generated code quality for this is very poor due to
226 ; DAGCombiner::visitXOR converting the legal setoeq to setune, which requires
228 define void @br_fcmp_oeq_alt(half %a, half %b) nounwind {
229 ; RV32IZFH-LABEL: br_fcmp_oeq_alt:
231 ; RV32IZFH-NEXT: feq.h a0, fa0, fa1
232 ; RV32IZFH-NEXT: bnez a0, .LBB2_2
233 ; RV32IZFH-NEXT: # %bb.1: # %if.else
235 ; RV32IZFH-NEXT: .LBB2_2: # %if.then
236 ; RV32IZFH-NEXT: addi sp, sp, -16
237 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
238 ; RV32IZFH-NEXT: call abort
240 ; RV64IZFH-LABEL: br_fcmp_oeq_alt:
242 ; RV64IZFH-NEXT: feq.h a0, fa0, fa1
243 ; RV64IZFH-NEXT: bnez a0, .LBB2_2
244 ; RV64IZFH-NEXT: # %bb.1: # %if.else
246 ; RV64IZFH-NEXT: .LBB2_2: # %if.then
247 ; RV64IZFH-NEXT: addi sp, sp, -16
248 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
249 ; RV64IZFH-NEXT: call abort
251 ; RV32IZHINX-LABEL: br_fcmp_oeq_alt:
252 ; RV32IZHINX: # %bb.0:
253 ; RV32IZHINX-NEXT: feq.h a0, a0, a1
254 ; RV32IZHINX-NEXT: bnez a0, .LBB2_2
255 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
256 ; RV32IZHINX-NEXT: ret
257 ; RV32IZHINX-NEXT: .LBB2_2: # %if.then
258 ; RV32IZHINX-NEXT: addi sp, sp, -16
259 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
260 ; RV32IZHINX-NEXT: call abort
262 ; RV64IZHINX-LABEL: br_fcmp_oeq_alt:
263 ; RV64IZHINX: # %bb.0:
264 ; RV64IZHINX-NEXT: feq.h a0, a0, a1
265 ; RV64IZHINX-NEXT: bnez a0, .LBB2_2
266 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
267 ; RV64IZHINX-NEXT: ret
268 ; RV64IZHINX-NEXT: .LBB2_2: # %if.then
269 ; RV64IZHINX-NEXT: addi sp, sp, -16
270 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
271 ; RV64IZHINX-NEXT: call abort
273 ; RV32IZFHMIN-LABEL: br_fcmp_oeq_alt:
274 ; RV32IZFHMIN: # %bb.0:
275 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
276 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
277 ; RV32IZFHMIN-NEXT: feq.s a0, fa4, fa5
278 ; RV32IZFHMIN-NEXT: bnez a0, .LBB2_2
279 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
280 ; RV32IZFHMIN-NEXT: ret
281 ; RV32IZFHMIN-NEXT: .LBB2_2: # %if.then
282 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
283 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
284 ; RV32IZFHMIN-NEXT: call abort
286 ; RV64IZFHMIN-LABEL: br_fcmp_oeq_alt:
287 ; RV64IZFHMIN: # %bb.0:
288 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
289 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
290 ; RV64IZFHMIN-NEXT: feq.s a0, fa4, fa5
291 ; RV64IZFHMIN-NEXT: bnez a0, .LBB2_2
292 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
293 ; RV64IZFHMIN-NEXT: ret
294 ; RV64IZFHMIN-NEXT: .LBB2_2: # %if.then
295 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
296 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
297 ; RV64IZFHMIN-NEXT: call abort
299 ; RV32IZHINXMIN-LABEL: br_fcmp_oeq_alt:
300 ; RV32IZHINXMIN: # %bb.0:
301 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
302 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
303 ; RV32IZHINXMIN-NEXT: feq.s a0, a0, a1
304 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB2_2
305 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
306 ; RV32IZHINXMIN-NEXT: ret
307 ; RV32IZHINXMIN-NEXT: .LBB2_2: # %if.then
308 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
309 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
310 ; RV32IZHINXMIN-NEXT: call abort
312 ; RV64IZHINXMIN-LABEL: br_fcmp_oeq_alt:
313 ; RV64IZHINXMIN: # %bb.0:
314 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
315 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
316 ; RV64IZHINXMIN-NEXT: feq.s a0, a0, a1
317 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB2_2
318 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
319 ; RV64IZHINXMIN-NEXT: ret
320 ; RV64IZHINXMIN-NEXT: .LBB2_2: # %if.then
321 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
322 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
323 ; RV64IZHINXMIN-NEXT: call abort
324 %1 = fcmp oeq half %a, %b
325 br i1 %1, label %if.then, label %if.else
327 tail call void @abort()
333 define void @br_fcmp_ogt(half %a, half %b) nounwind {
334 ; RV32IZFH-LABEL: br_fcmp_ogt:
336 ; RV32IZFH-NEXT: flt.h a0, fa1, fa0
337 ; RV32IZFH-NEXT: bnez a0, .LBB3_2
338 ; RV32IZFH-NEXT: # %bb.1: # %if.else
340 ; RV32IZFH-NEXT: .LBB3_2: # %if.then
341 ; RV32IZFH-NEXT: addi sp, sp, -16
342 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
343 ; RV32IZFH-NEXT: call abort
345 ; RV64IZFH-LABEL: br_fcmp_ogt:
347 ; RV64IZFH-NEXT: flt.h a0, fa1, fa0
348 ; RV64IZFH-NEXT: bnez a0, .LBB3_2
349 ; RV64IZFH-NEXT: # %bb.1: # %if.else
351 ; RV64IZFH-NEXT: .LBB3_2: # %if.then
352 ; RV64IZFH-NEXT: addi sp, sp, -16
353 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
354 ; RV64IZFH-NEXT: call abort
356 ; RV32IZHINX-LABEL: br_fcmp_ogt:
357 ; RV32IZHINX: # %bb.0:
358 ; RV32IZHINX-NEXT: flt.h a0, a1, a0
359 ; RV32IZHINX-NEXT: bnez a0, .LBB3_2
360 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
361 ; RV32IZHINX-NEXT: ret
362 ; RV32IZHINX-NEXT: .LBB3_2: # %if.then
363 ; RV32IZHINX-NEXT: addi sp, sp, -16
364 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
365 ; RV32IZHINX-NEXT: call abort
367 ; RV64IZHINX-LABEL: br_fcmp_ogt:
368 ; RV64IZHINX: # %bb.0:
369 ; RV64IZHINX-NEXT: flt.h a0, a1, a0
370 ; RV64IZHINX-NEXT: bnez a0, .LBB3_2
371 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
372 ; RV64IZHINX-NEXT: ret
373 ; RV64IZHINX-NEXT: .LBB3_2: # %if.then
374 ; RV64IZHINX-NEXT: addi sp, sp, -16
375 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
376 ; RV64IZHINX-NEXT: call abort
378 ; RV32IZFHMIN-LABEL: br_fcmp_ogt:
379 ; RV32IZFHMIN: # %bb.0:
380 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0
381 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1
382 ; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5
383 ; RV32IZFHMIN-NEXT: bnez a0, .LBB3_2
384 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
385 ; RV32IZFHMIN-NEXT: ret
386 ; RV32IZFHMIN-NEXT: .LBB3_2: # %if.then
387 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
388 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
389 ; RV32IZFHMIN-NEXT: call abort
391 ; RV64IZFHMIN-LABEL: br_fcmp_ogt:
392 ; RV64IZFHMIN: # %bb.0:
393 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0
394 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1
395 ; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5
396 ; RV64IZFHMIN-NEXT: bnez a0, .LBB3_2
397 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
398 ; RV64IZFHMIN-NEXT: ret
399 ; RV64IZFHMIN-NEXT: .LBB3_2: # %if.then
400 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
401 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
402 ; RV64IZFHMIN-NEXT: call abort
404 ; RV32IZHINXMIN-LABEL: br_fcmp_ogt:
405 ; RV32IZHINXMIN: # %bb.0:
406 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
407 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
408 ; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0
409 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB3_2
410 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
411 ; RV32IZHINXMIN-NEXT: ret
412 ; RV32IZHINXMIN-NEXT: .LBB3_2: # %if.then
413 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
414 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
415 ; RV32IZHINXMIN-NEXT: call abort
417 ; RV64IZHINXMIN-LABEL: br_fcmp_ogt:
418 ; RV64IZHINXMIN: # %bb.0:
419 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
420 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
421 ; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0
422 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB3_2
423 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
424 ; RV64IZHINXMIN-NEXT: ret
425 ; RV64IZHINXMIN-NEXT: .LBB3_2: # %if.then
426 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
427 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
428 ; RV64IZHINXMIN-NEXT: call abort
429 %1 = fcmp ogt half %a, %b
430 br i1 %1, label %if.then, label %if.else
434 tail call void @abort()
438 define void @br_fcmp_oge(half %a, half %b) nounwind {
439 ; RV32IZFH-LABEL: br_fcmp_oge:
441 ; RV32IZFH-NEXT: fle.h a0, fa1, fa0
442 ; RV32IZFH-NEXT: bnez a0, .LBB4_2
443 ; RV32IZFH-NEXT: # %bb.1: # %if.else
445 ; RV32IZFH-NEXT: .LBB4_2: # %if.then
446 ; RV32IZFH-NEXT: addi sp, sp, -16
447 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
448 ; RV32IZFH-NEXT: call abort
450 ; RV64IZFH-LABEL: br_fcmp_oge:
452 ; RV64IZFH-NEXT: fle.h a0, fa1, fa0
453 ; RV64IZFH-NEXT: bnez a0, .LBB4_2
454 ; RV64IZFH-NEXT: # %bb.1: # %if.else
456 ; RV64IZFH-NEXT: .LBB4_2: # %if.then
457 ; RV64IZFH-NEXT: addi sp, sp, -16
458 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
459 ; RV64IZFH-NEXT: call abort
461 ; RV32IZHINX-LABEL: br_fcmp_oge:
462 ; RV32IZHINX: # %bb.0:
463 ; RV32IZHINX-NEXT: fle.h a0, a1, a0
464 ; RV32IZHINX-NEXT: bnez a0, .LBB4_2
465 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
466 ; RV32IZHINX-NEXT: ret
467 ; RV32IZHINX-NEXT: .LBB4_2: # %if.then
468 ; RV32IZHINX-NEXT: addi sp, sp, -16
469 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
470 ; RV32IZHINX-NEXT: call abort
472 ; RV64IZHINX-LABEL: br_fcmp_oge:
473 ; RV64IZHINX: # %bb.0:
474 ; RV64IZHINX-NEXT: fle.h a0, a1, a0
475 ; RV64IZHINX-NEXT: bnez a0, .LBB4_2
476 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
477 ; RV64IZHINX-NEXT: ret
478 ; RV64IZHINX-NEXT: .LBB4_2: # %if.then
479 ; RV64IZHINX-NEXT: addi sp, sp, -16
480 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
481 ; RV64IZHINX-NEXT: call abort
483 ; RV32IZFHMIN-LABEL: br_fcmp_oge:
484 ; RV32IZFHMIN: # %bb.0:
485 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0
486 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1
487 ; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5
488 ; RV32IZFHMIN-NEXT: bnez a0, .LBB4_2
489 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
490 ; RV32IZFHMIN-NEXT: ret
491 ; RV32IZFHMIN-NEXT: .LBB4_2: # %if.then
492 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
493 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
494 ; RV32IZFHMIN-NEXT: call abort
496 ; RV64IZFHMIN-LABEL: br_fcmp_oge:
497 ; RV64IZFHMIN: # %bb.0:
498 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0
499 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1
500 ; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5
501 ; RV64IZFHMIN-NEXT: bnez a0, .LBB4_2
502 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
503 ; RV64IZFHMIN-NEXT: ret
504 ; RV64IZFHMIN-NEXT: .LBB4_2: # %if.then
505 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
506 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
507 ; RV64IZFHMIN-NEXT: call abort
509 ; RV32IZHINXMIN-LABEL: br_fcmp_oge:
510 ; RV32IZHINXMIN: # %bb.0:
511 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
512 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
513 ; RV32IZHINXMIN-NEXT: fle.s a0, a1, a0
514 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB4_2
515 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
516 ; RV32IZHINXMIN-NEXT: ret
517 ; RV32IZHINXMIN-NEXT: .LBB4_2: # %if.then
518 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
519 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
520 ; RV32IZHINXMIN-NEXT: call abort
522 ; RV64IZHINXMIN-LABEL: br_fcmp_oge:
523 ; RV64IZHINXMIN: # %bb.0:
524 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
525 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
526 ; RV64IZHINXMIN-NEXT: fle.s a0, a1, a0
527 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB4_2
528 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
529 ; RV64IZHINXMIN-NEXT: ret
530 ; RV64IZHINXMIN-NEXT: .LBB4_2: # %if.then
531 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
532 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
533 ; RV64IZHINXMIN-NEXT: call abort
534 %1 = fcmp oge half %a, %b
535 br i1 %1, label %if.then, label %if.else
539 tail call void @abort()
543 define void @br_fcmp_olt(half %a, half %b) nounwind {
544 ; RV32IZFH-LABEL: br_fcmp_olt:
546 ; RV32IZFH-NEXT: flt.h a0, fa0, fa1
547 ; RV32IZFH-NEXT: bnez a0, .LBB5_2
548 ; RV32IZFH-NEXT: # %bb.1: # %if.else
550 ; RV32IZFH-NEXT: .LBB5_2: # %if.then
551 ; RV32IZFH-NEXT: addi sp, sp, -16
552 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
553 ; RV32IZFH-NEXT: call abort
555 ; RV64IZFH-LABEL: br_fcmp_olt:
557 ; RV64IZFH-NEXT: flt.h a0, fa0, fa1
558 ; RV64IZFH-NEXT: bnez a0, .LBB5_2
559 ; RV64IZFH-NEXT: # %bb.1: # %if.else
561 ; RV64IZFH-NEXT: .LBB5_2: # %if.then
562 ; RV64IZFH-NEXT: addi sp, sp, -16
563 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
564 ; RV64IZFH-NEXT: call abort
566 ; RV32IZHINX-LABEL: br_fcmp_olt:
567 ; RV32IZHINX: # %bb.0:
568 ; RV32IZHINX-NEXT: flt.h a0, a0, a1
569 ; RV32IZHINX-NEXT: bnez a0, .LBB5_2
570 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
571 ; RV32IZHINX-NEXT: ret
572 ; RV32IZHINX-NEXT: .LBB5_2: # %if.then
573 ; RV32IZHINX-NEXT: addi sp, sp, -16
574 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
575 ; RV32IZHINX-NEXT: call abort
577 ; RV64IZHINX-LABEL: br_fcmp_olt:
578 ; RV64IZHINX: # %bb.0:
579 ; RV64IZHINX-NEXT: flt.h a0, a0, a1
580 ; RV64IZHINX-NEXT: bnez a0, .LBB5_2
581 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
582 ; RV64IZHINX-NEXT: ret
583 ; RV64IZHINX-NEXT: .LBB5_2: # %if.then
584 ; RV64IZHINX-NEXT: addi sp, sp, -16
585 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
586 ; RV64IZHINX-NEXT: call abort
588 ; RV32IZFHMIN-LABEL: br_fcmp_olt:
589 ; RV32IZFHMIN: # %bb.0:
590 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
591 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
592 ; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5
593 ; RV32IZFHMIN-NEXT: bnez a0, .LBB5_2
594 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
595 ; RV32IZFHMIN-NEXT: ret
596 ; RV32IZFHMIN-NEXT: .LBB5_2: # %if.then
597 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
598 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
599 ; RV32IZFHMIN-NEXT: call abort
601 ; RV64IZFHMIN-LABEL: br_fcmp_olt:
602 ; RV64IZFHMIN: # %bb.0:
603 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
604 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
605 ; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5
606 ; RV64IZFHMIN-NEXT: bnez a0, .LBB5_2
607 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
608 ; RV64IZFHMIN-NEXT: ret
609 ; RV64IZFHMIN-NEXT: .LBB5_2: # %if.then
610 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
611 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
612 ; RV64IZFHMIN-NEXT: call abort
614 ; RV32IZHINXMIN-LABEL: br_fcmp_olt:
615 ; RV32IZHINXMIN: # %bb.0:
616 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
617 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
618 ; RV32IZHINXMIN-NEXT: flt.s a0, a0, a1
619 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB5_2
620 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
621 ; RV32IZHINXMIN-NEXT: ret
622 ; RV32IZHINXMIN-NEXT: .LBB5_2: # %if.then
623 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
624 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
625 ; RV32IZHINXMIN-NEXT: call abort
627 ; RV64IZHINXMIN-LABEL: br_fcmp_olt:
628 ; RV64IZHINXMIN: # %bb.0:
629 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
630 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
631 ; RV64IZHINXMIN-NEXT: flt.s a0, a0, a1
632 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB5_2
633 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
634 ; RV64IZHINXMIN-NEXT: ret
635 ; RV64IZHINXMIN-NEXT: .LBB5_2: # %if.then
636 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
637 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
638 ; RV64IZHINXMIN-NEXT: call abort
639 %1 = fcmp olt half %a, %b
640 br i1 %1, label %if.then, label %if.else
644 tail call void @abort()
648 define void @br_fcmp_ole(half %a, half %b) nounwind {
649 ; RV32IZFH-LABEL: br_fcmp_ole:
651 ; RV32IZFH-NEXT: fle.h a0, fa0, fa1
652 ; RV32IZFH-NEXT: bnez a0, .LBB6_2
653 ; RV32IZFH-NEXT: # %bb.1: # %if.else
655 ; RV32IZFH-NEXT: .LBB6_2: # %if.then
656 ; RV32IZFH-NEXT: addi sp, sp, -16
657 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
658 ; RV32IZFH-NEXT: call abort
660 ; RV64IZFH-LABEL: br_fcmp_ole:
662 ; RV64IZFH-NEXT: fle.h a0, fa0, fa1
663 ; RV64IZFH-NEXT: bnez a0, .LBB6_2
664 ; RV64IZFH-NEXT: # %bb.1: # %if.else
666 ; RV64IZFH-NEXT: .LBB6_2: # %if.then
667 ; RV64IZFH-NEXT: addi sp, sp, -16
668 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
669 ; RV64IZFH-NEXT: call abort
671 ; RV32IZHINX-LABEL: br_fcmp_ole:
672 ; RV32IZHINX: # %bb.0:
673 ; RV32IZHINX-NEXT: fle.h a0, a0, a1
674 ; RV32IZHINX-NEXT: bnez a0, .LBB6_2
675 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
676 ; RV32IZHINX-NEXT: ret
677 ; RV32IZHINX-NEXT: .LBB6_2: # %if.then
678 ; RV32IZHINX-NEXT: addi sp, sp, -16
679 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
680 ; RV32IZHINX-NEXT: call abort
682 ; RV64IZHINX-LABEL: br_fcmp_ole:
683 ; RV64IZHINX: # %bb.0:
684 ; RV64IZHINX-NEXT: fle.h a0, a0, a1
685 ; RV64IZHINX-NEXT: bnez a0, .LBB6_2
686 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
687 ; RV64IZHINX-NEXT: ret
688 ; RV64IZHINX-NEXT: .LBB6_2: # %if.then
689 ; RV64IZHINX-NEXT: addi sp, sp, -16
690 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
691 ; RV64IZHINX-NEXT: call abort
693 ; RV32IZFHMIN-LABEL: br_fcmp_ole:
694 ; RV32IZFHMIN: # %bb.0:
695 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
696 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
697 ; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5
698 ; RV32IZFHMIN-NEXT: bnez a0, .LBB6_2
699 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
700 ; RV32IZFHMIN-NEXT: ret
701 ; RV32IZFHMIN-NEXT: .LBB6_2: # %if.then
702 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
703 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
704 ; RV32IZFHMIN-NEXT: call abort
706 ; RV64IZFHMIN-LABEL: br_fcmp_ole:
707 ; RV64IZFHMIN: # %bb.0:
708 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
709 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
710 ; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5
711 ; RV64IZFHMIN-NEXT: bnez a0, .LBB6_2
712 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
713 ; RV64IZFHMIN-NEXT: ret
714 ; RV64IZFHMIN-NEXT: .LBB6_2: # %if.then
715 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
716 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
717 ; RV64IZFHMIN-NEXT: call abort
719 ; RV32IZHINXMIN-LABEL: br_fcmp_ole:
720 ; RV32IZHINXMIN: # %bb.0:
721 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
722 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
723 ; RV32IZHINXMIN-NEXT: fle.s a0, a0, a1
724 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB6_2
725 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
726 ; RV32IZHINXMIN-NEXT: ret
727 ; RV32IZHINXMIN-NEXT: .LBB6_2: # %if.then
728 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
729 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
730 ; RV32IZHINXMIN-NEXT: call abort
732 ; RV64IZHINXMIN-LABEL: br_fcmp_ole:
733 ; RV64IZHINXMIN: # %bb.0:
734 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
735 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
736 ; RV64IZHINXMIN-NEXT: fle.s a0, a0, a1
737 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB6_2
738 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
739 ; RV64IZHINXMIN-NEXT: ret
740 ; RV64IZHINXMIN-NEXT: .LBB6_2: # %if.then
741 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
742 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
743 ; RV64IZHINXMIN-NEXT: call abort
744 %1 = fcmp ole half %a, %b
745 br i1 %1, label %if.then, label %if.else
749 tail call void @abort()
753 define void @br_fcmp_one(half %a, half %b) nounwind {
754 ; RV32IZFH-LABEL: br_fcmp_one:
756 ; RV32IZFH-NEXT: flt.h a0, fa0, fa1
757 ; RV32IZFH-NEXT: flt.h a1, fa1, fa0
758 ; RV32IZFH-NEXT: or a0, a1, a0
759 ; RV32IZFH-NEXT: bnez a0, .LBB7_2
760 ; RV32IZFH-NEXT: # %bb.1: # %if.else
762 ; RV32IZFH-NEXT: .LBB7_2: # %if.then
763 ; RV32IZFH-NEXT: addi sp, sp, -16
764 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
765 ; RV32IZFH-NEXT: call abort
767 ; RV64IZFH-LABEL: br_fcmp_one:
769 ; RV64IZFH-NEXT: flt.h a0, fa0, fa1
770 ; RV64IZFH-NEXT: flt.h a1, fa1, fa0
771 ; RV64IZFH-NEXT: or a0, a1, a0
772 ; RV64IZFH-NEXT: bnez a0, .LBB7_2
773 ; RV64IZFH-NEXT: # %bb.1: # %if.else
775 ; RV64IZFH-NEXT: .LBB7_2: # %if.then
776 ; RV64IZFH-NEXT: addi sp, sp, -16
777 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
778 ; RV64IZFH-NEXT: call abort
780 ; RV32IZHINX-LABEL: br_fcmp_one:
781 ; RV32IZHINX: # %bb.0:
782 ; RV32IZHINX-NEXT: flt.h a2, a0, a1
783 ; RV32IZHINX-NEXT: flt.h a0, a1, a0
784 ; RV32IZHINX-NEXT: or a0, a0, a2
785 ; RV32IZHINX-NEXT: bnez a0, .LBB7_2
786 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
787 ; RV32IZHINX-NEXT: ret
788 ; RV32IZHINX-NEXT: .LBB7_2: # %if.then
789 ; RV32IZHINX-NEXT: addi sp, sp, -16
790 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
791 ; RV32IZHINX-NEXT: call abort
793 ; RV64IZHINX-LABEL: br_fcmp_one:
794 ; RV64IZHINX: # %bb.0:
795 ; RV64IZHINX-NEXT: flt.h a2, a0, a1
796 ; RV64IZHINX-NEXT: flt.h a0, a1, a0
797 ; RV64IZHINX-NEXT: or a0, a0, a2
798 ; RV64IZHINX-NEXT: bnez a0, .LBB7_2
799 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
800 ; RV64IZHINX-NEXT: ret
801 ; RV64IZHINX-NEXT: .LBB7_2: # %if.then
802 ; RV64IZHINX-NEXT: addi sp, sp, -16
803 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
804 ; RV64IZHINX-NEXT: call abort
806 ; RV32IZFHMIN-LABEL: br_fcmp_one:
807 ; RV32IZFHMIN: # %bb.0:
808 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
809 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
810 ; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5
811 ; RV32IZFHMIN-NEXT: flt.s a1, fa5, fa4
812 ; RV32IZFHMIN-NEXT: or a0, a1, a0
813 ; RV32IZFHMIN-NEXT: bnez a0, .LBB7_2
814 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
815 ; RV32IZFHMIN-NEXT: ret
816 ; RV32IZFHMIN-NEXT: .LBB7_2: # %if.then
817 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
818 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
819 ; RV32IZFHMIN-NEXT: call abort
821 ; RV64IZFHMIN-LABEL: br_fcmp_one:
822 ; RV64IZFHMIN: # %bb.0:
823 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
824 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
825 ; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5
826 ; RV64IZFHMIN-NEXT: flt.s a1, fa5, fa4
827 ; RV64IZFHMIN-NEXT: or a0, a1, a0
828 ; RV64IZFHMIN-NEXT: bnez a0, .LBB7_2
829 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
830 ; RV64IZFHMIN-NEXT: ret
831 ; RV64IZFHMIN-NEXT: .LBB7_2: # %if.then
832 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
833 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
834 ; RV64IZFHMIN-NEXT: call abort
836 ; RV32IZHINXMIN-LABEL: br_fcmp_one:
837 ; RV32IZHINXMIN: # %bb.0:
838 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
839 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
840 ; RV32IZHINXMIN-NEXT: flt.s a2, a0, a1
841 ; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0
842 ; RV32IZHINXMIN-NEXT: or a0, a0, a2
843 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB7_2
844 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
845 ; RV32IZHINXMIN-NEXT: ret
846 ; RV32IZHINXMIN-NEXT: .LBB7_2: # %if.then
847 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
848 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
849 ; RV32IZHINXMIN-NEXT: call abort
851 ; RV64IZHINXMIN-LABEL: br_fcmp_one:
852 ; RV64IZHINXMIN: # %bb.0:
853 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
854 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
855 ; RV64IZHINXMIN-NEXT: flt.s a2, a0, a1
856 ; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0
857 ; RV64IZHINXMIN-NEXT: or a0, a0, a2
858 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB7_2
859 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
860 ; RV64IZHINXMIN-NEXT: ret
861 ; RV64IZHINXMIN-NEXT: .LBB7_2: # %if.then
862 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
863 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
864 ; RV64IZHINXMIN-NEXT: call abort
865 %1 = fcmp one half %a, %b
866 br i1 %1, label %if.then, label %if.else
870 tail call void @abort()
874 define void @br_fcmp_ord(half %a, half %b) nounwind {
875 ; RV32IZFH-LABEL: br_fcmp_ord:
877 ; RV32IZFH-NEXT: feq.h a0, fa1, fa1
878 ; RV32IZFH-NEXT: feq.h a1, fa0, fa0
879 ; RV32IZFH-NEXT: and a0, a1, a0
880 ; RV32IZFH-NEXT: bnez a0, .LBB8_2
881 ; RV32IZFH-NEXT: # %bb.1: # %if.else
883 ; RV32IZFH-NEXT: .LBB8_2: # %if.then
884 ; RV32IZFH-NEXT: addi sp, sp, -16
885 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
886 ; RV32IZFH-NEXT: call abort
888 ; RV64IZFH-LABEL: br_fcmp_ord:
890 ; RV64IZFH-NEXT: feq.h a0, fa1, fa1
891 ; RV64IZFH-NEXT: feq.h a1, fa0, fa0
892 ; RV64IZFH-NEXT: and a0, a1, a0
893 ; RV64IZFH-NEXT: bnez a0, .LBB8_2
894 ; RV64IZFH-NEXT: # %bb.1: # %if.else
896 ; RV64IZFH-NEXT: .LBB8_2: # %if.then
897 ; RV64IZFH-NEXT: addi sp, sp, -16
898 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
899 ; RV64IZFH-NEXT: call abort
901 ; RV32IZHINX-LABEL: br_fcmp_ord:
902 ; RV32IZHINX: # %bb.0:
903 ; RV32IZHINX-NEXT: feq.h a1, a1, a1
904 ; RV32IZHINX-NEXT: feq.h a0, a0, a0
905 ; RV32IZHINX-NEXT: and a0, a0, a1
906 ; RV32IZHINX-NEXT: bnez a0, .LBB8_2
907 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
908 ; RV32IZHINX-NEXT: ret
909 ; RV32IZHINX-NEXT: .LBB8_2: # %if.then
910 ; RV32IZHINX-NEXT: addi sp, sp, -16
911 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
912 ; RV32IZHINX-NEXT: call abort
914 ; RV64IZHINX-LABEL: br_fcmp_ord:
915 ; RV64IZHINX: # %bb.0:
916 ; RV64IZHINX-NEXT: feq.h a1, a1, a1
917 ; RV64IZHINX-NEXT: feq.h a0, a0, a0
918 ; RV64IZHINX-NEXT: and a0, a0, a1
919 ; RV64IZHINX-NEXT: bnez a0, .LBB8_2
920 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
921 ; RV64IZHINX-NEXT: ret
922 ; RV64IZHINX-NEXT: .LBB8_2: # %if.then
923 ; RV64IZHINX-NEXT: addi sp, sp, -16
924 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
925 ; RV64IZHINX-NEXT: call abort
927 ; RV32IZFHMIN-LABEL: br_fcmp_ord:
928 ; RV32IZFHMIN: # %bb.0:
929 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
930 ; RV32IZFHMIN-NEXT: feq.s a0, fa5, fa5
931 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0
932 ; RV32IZFHMIN-NEXT: feq.s a1, fa5, fa5
933 ; RV32IZFHMIN-NEXT: and a0, a1, a0
934 ; RV32IZFHMIN-NEXT: bnez a0, .LBB8_2
935 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
936 ; RV32IZFHMIN-NEXT: ret
937 ; RV32IZFHMIN-NEXT: .LBB8_2: # %if.then
938 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
939 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
940 ; RV32IZFHMIN-NEXT: call abort
942 ; RV64IZFHMIN-LABEL: br_fcmp_ord:
943 ; RV64IZFHMIN: # %bb.0:
944 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
945 ; RV64IZFHMIN-NEXT: feq.s a0, fa5, fa5
946 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0
947 ; RV64IZFHMIN-NEXT: feq.s a1, fa5, fa5
948 ; RV64IZFHMIN-NEXT: and a0, a1, a0
949 ; RV64IZFHMIN-NEXT: bnez a0, .LBB8_2
950 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
951 ; RV64IZFHMIN-NEXT: ret
952 ; RV64IZFHMIN-NEXT: .LBB8_2: # %if.then
953 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
954 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
955 ; RV64IZFHMIN-NEXT: call abort
957 ; RV32IZHINXMIN-LABEL: br_fcmp_ord:
958 ; RV32IZHINXMIN: # %bb.0:
959 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
960 ; RV32IZHINXMIN-NEXT: feq.s a1, a1, a1
961 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
962 ; RV32IZHINXMIN-NEXT: feq.s a0, a0, a0
963 ; RV32IZHINXMIN-NEXT: and a0, a0, a1
964 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB8_2
965 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
966 ; RV32IZHINXMIN-NEXT: ret
967 ; RV32IZHINXMIN-NEXT: .LBB8_2: # %if.then
968 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
969 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
970 ; RV32IZHINXMIN-NEXT: call abort
972 ; RV64IZHINXMIN-LABEL: br_fcmp_ord:
973 ; RV64IZHINXMIN: # %bb.0:
974 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
975 ; RV64IZHINXMIN-NEXT: feq.s a1, a1, a1
976 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
977 ; RV64IZHINXMIN-NEXT: feq.s a0, a0, a0
978 ; RV64IZHINXMIN-NEXT: and a0, a0, a1
979 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB8_2
980 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
981 ; RV64IZHINXMIN-NEXT: ret
982 ; RV64IZHINXMIN-NEXT: .LBB8_2: # %if.then
983 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
984 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
985 ; RV64IZHINXMIN-NEXT: call abort
986 %1 = fcmp ord half %a, %b
987 br i1 %1, label %if.then, label %if.else
991 tail call void @abort()
995 define void @br_fcmp_ueq(half %a, half %b) nounwind {
996 ; RV32IZFH-LABEL: br_fcmp_ueq:
998 ; RV32IZFH-NEXT: flt.h a0, fa0, fa1
999 ; RV32IZFH-NEXT: flt.h a1, fa1, fa0
1000 ; RV32IZFH-NEXT: or a0, a1, a0
1001 ; RV32IZFH-NEXT: beqz a0, .LBB9_2
1002 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1003 ; RV32IZFH-NEXT: ret
1004 ; RV32IZFH-NEXT: .LBB9_2: # %if.then
1005 ; RV32IZFH-NEXT: addi sp, sp, -16
1006 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1007 ; RV32IZFH-NEXT: call abort
1009 ; RV64IZFH-LABEL: br_fcmp_ueq:
1010 ; RV64IZFH: # %bb.0:
1011 ; RV64IZFH-NEXT: flt.h a0, fa0, fa1
1012 ; RV64IZFH-NEXT: flt.h a1, fa1, fa0
1013 ; RV64IZFH-NEXT: or a0, a1, a0
1014 ; RV64IZFH-NEXT: beqz a0, .LBB9_2
1015 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1016 ; RV64IZFH-NEXT: ret
1017 ; RV64IZFH-NEXT: .LBB9_2: # %if.then
1018 ; RV64IZFH-NEXT: addi sp, sp, -16
1019 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1020 ; RV64IZFH-NEXT: call abort
1022 ; RV32IZHINX-LABEL: br_fcmp_ueq:
1023 ; RV32IZHINX: # %bb.0:
1024 ; RV32IZHINX-NEXT: flt.h a2, a0, a1
1025 ; RV32IZHINX-NEXT: flt.h a0, a1, a0
1026 ; RV32IZHINX-NEXT: or a0, a0, a2
1027 ; RV32IZHINX-NEXT: beqz a0, .LBB9_2
1028 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1029 ; RV32IZHINX-NEXT: ret
1030 ; RV32IZHINX-NEXT: .LBB9_2: # %if.then
1031 ; RV32IZHINX-NEXT: addi sp, sp, -16
1032 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1033 ; RV32IZHINX-NEXT: call abort
1035 ; RV64IZHINX-LABEL: br_fcmp_ueq:
1036 ; RV64IZHINX: # %bb.0:
1037 ; RV64IZHINX-NEXT: flt.h a2, a0, a1
1038 ; RV64IZHINX-NEXT: flt.h a0, a1, a0
1039 ; RV64IZHINX-NEXT: or a0, a0, a2
1040 ; RV64IZHINX-NEXT: beqz a0, .LBB9_2
1041 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1042 ; RV64IZHINX-NEXT: ret
1043 ; RV64IZHINX-NEXT: .LBB9_2: # %if.then
1044 ; RV64IZHINX-NEXT: addi sp, sp, -16
1045 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1046 ; RV64IZHINX-NEXT: call abort
1048 ; RV32IZFHMIN-LABEL: br_fcmp_ueq:
1049 ; RV32IZFHMIN: # %bb.0:
1050 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1051 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1052 ; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5
1053 ; RV32IZFHMIN-NEXT: flt.s a1, fa5, fa4
1054 ; RV32IZFHMIN-NEXT: or a0, a1, a0
1055 ; RV32IZFHMIN-NEXT: beqz a0, .LBB9_2
1056 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1057 ; RV32IZFHMIN-NEXT: ret
1058 ; RV32IZFHMIN-NEXT: .LBB9_2: # %if.then
1059 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1060 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1061 ; RV32IZFHMIN-NEXT: call abort
1063 ; RV64IZFHMIN-LABEL: br_fcmp_ueq:
1064 ; RV64IZFHMIN: # %bb.0:
1065 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1066 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1067 ; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5
1068 ; RV64IZFHMIN-NEXT: flt.s a1, fa5, fa4
1069 ; RV64IZFHMIN-NEXT: or a0, a1, a0
1070 ; RV64IZFHMIN-NEXT: beqz a0, .LBB9_2
1071 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1072 ; RV64IZFHMIN-NEXT: ret
1073 ; RV64IZFHMIN-NEXT: .LBB9_2: # %if.then
1074 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1075 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1076 ; RV64IZFHMIN-NEXT: call abort
1078 ; RV32IZHINXMIN-LABEL: br_fcmp_ueq:
1079 ; RV32IZHINXMIN: # %bb.0:
1080 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
1081 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
1082 ; RV32IZHINXMIN-NEXT: flt.s a2, a0, a1
1083 ; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0
1084 ; RV32IZHINXMIN-NEXT: or a0, a0, a2
1085 ; RV32IZHINXMIN-NEXT: beqz a0, .LBB9_2
1086 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1087 ; RV32IZHINXMIN-NEXT: ret
1088 ; RV32IZHINXMIN-NEXT: .LBB9_2: # %if.then
1089 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1090 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1091 ; RV32IZHINXMIN-NEXT: call abort
1093 ; RV64IZHINXMIN-LABEL: br_fcmp_ueq:
1094 ; RV64IZHINXMIN: # %bb.0:
1095 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
1096 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
1097 ; RV64IZHINXMIN-NEXT: flt.s a2, a0, a1
1098 ; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0
1099 ; RV64IZHINXMIN-NEXT: or a0, a0, a2
1100 ; RV64IZHINXMIN-NEXT: beqz a0, .LBB9_2
1101 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1102 ; RV64IZHINXMIN-NEXT: ret
1103 ; RV64IZHINXMIN-NEXT: .LBB9_2: # %if.then
1104 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1105 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1106 ; RV64IZHINXMIN-NEXT: call abort
1107 %1 = fcmp ueq half %a, %b
1108 br i1 %1, label %if.then, label %if.else
1112 tail call void @abort()
1116 define void @br_fcmp_ugt(half %a, half %b) nounwind {
1117 ; RV32IZFH-LABEL: br_fcmp_ugt:
1118 ; RV32IZFH: # %bb.0:
1119 ; RV32IZFH-NEXT: fle.h a0, fa0, fa1
1120 ; RV32IZFH-NEXT: beqz a0, .LBB10_2
1121 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1122 ; RV32IZFH-NEXT: ret
1123 ; RV32IZFH-NEXT: .LBB10_2: # %if.then
1124 ; RV32IZFH-NEXT: addi sp, sp, -16
1125 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1126 ; RV32IZFH-NEXT: call abort
1128 ; RV64IZFH-LABEL: br_fcmp_ugt:
1129 ; RV64IZFH: # %bb.0:
1130 ; RV64IZFH-NEXT: fle.h a0, fa0, fa1
1131 ; RV64IZFH-NEXT: beqz a0, .LBB10_2
1132 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1133 ; RV64IZFH-NEXT: ret
1134 ; RV64IZFH-NEXT: .LBB10_2: # %if.then
1135 ; RV64IZFH-NEXT: addi sp, sp, -16
1136 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1137 ; RV64IZFH-NEXT: call abort
1139 ; RV32IZHINX-LABEL: br_fcmp_ugt:
1140 ; RV32IZHINX: # %bb.0:
1141 ; RV32IZHINX-NEXT: fle.h a0, a0, a1
1142 ; RV32IZHINX-NEXT: beqz a0, .LBB10_2
1143 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1144 ; RV32IZHINX-NEXT: ret
1145 ; RV32IZHINX-NEXT: .LBB10_2: # %if.then
1146 ; RV32IZHINX-NEXT: addi sp, sp, -16
1147 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1148 ; RV32IZHINX-NEXT: call abort
1150 ; RV64IZHINX-LABEL: br_fcmp_ugt:
1151 ; RV64IZHINX: # %bb.0:
1152 ; RV64IZHINX-NEXT: fle.h a0, a0, a1
1153 ; RV64IZHINX-NEXT: beqz a0, .LBB10_2
1154 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1155 ; RV64IZHINX-NEXT: ret
1156 ; RV64IZHINX-NEXT: .LBB10_2: # %if.then
1157 ; RV64IZHINX-NEXT: addi sp, sp, -16
1158 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1159 ; RV64IZHINX-NEXT: call abort
1161 ; RV32IZFHMIN-LABEL: br_fcmp_ugt:
1162 ; RV32IZFHMIN: # %bb.0:
1163 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1164 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1165 ; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5
1166 ; RV32IZFHMIN-NEXT: beqz a0, .LBB10_2
1167 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1168 ; RV32IZFHMIN-NEXT: ret
1169 ; RV32IZFHMIN-NEXT: .LBB10_2: # %if.then
1170 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1171 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1172 ; RV32IZFHMIN-NEXT: call abort
1174 ; RV64IZFHMIN-LABEL: br_fcmp_ugt:
1175 ; RV64IZFHMIN: # %bb.0:
1176 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1177 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1178 ; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5
1179 ; RV64IZFHMIN-NEXT: beqz a0, .LBB10_2
1180 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1181 ; RV64IZFHMIN-NEXT: ret
1182 ; RV64IZFHMIN-NEXT: .LBB10_2: # %if.then
1183 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1184 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1185 ; RV64IZFHMIN-NEXT: call abort
1187 ; RV32IZHINXMIN-LABEL: br_fcmp_ugt:
1188 ; RV32IZHINXMIN: # %bb.0:
1189 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
1190 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
1191 ; RV32IZHINXMIN-NEXT: fle.s a0, a0, a1
1192 ; RV32IZHINXMIN-NEXT: beqz a0, .LBB10_2
1193 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1194 ; RV32IZHINXMIN-NEXT: ret
1195 ; RV32IZHINXMIN-NEXT: .LBB10_2: # %if.then
1196 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1197 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1198 ; RV32IZHINXMIN-NEXT: call abort
1200 ; RV64IZHINXMIN-LABEL: br_fcmp_ugt:
1201 ; RV64IZHINXMIN: # %bb.0:
1202 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
1203 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
1204 ; RV64IZHINXMIN-NEXT: fle.s a0, a0, a1
1205 ; RV64IZHINXMIN-NEXT: beqz a0, .LBB10_2
1206 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1207 ; RV64IZHINXMIN-NEXT: ret
1208 ; RV64IZHINXMIN-NEXT: .LBB10_2: # %if.then
1209 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1210 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1211 ; RV64IZHINXMIN-NEXT: call abort
1212 %1 = fcmp ugt half %a, %b
1213 br i1 %1, label %if.then, label %if.else
1217 tail call void @abort()
1221 define void @br_fcmp_uge(half %a, half %b) nounwind {
1222 ; RV32IZFH-LABEL: br_fcmp_uge:
1223 ; RV32IZFH: # %bb.0:
1224 ; RV32IZFH-NEXT: flt.h a0, fa0, fa1
1225 ; RV32IZFH-NEXT: beqz a0, .LBB11_2
1226 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1227 ; RV32IZFH-NEXT: ret
1228 ; RV32IZFH-NEXT: .LBB11_2: # %if.then
1229 ; RV32IZFH-NEXT: addi sp, sp, -16
1230 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1231 ; RV32IZFH-NEXT: call abort
1233 ; RV64IZFH-LABEL: br_fcmp_uge:
1234 ; RV64IZFH: # %bb.0:
1235 ; RV64IZFH-NEXT: flt.h a0, fa0, fa1
1236 ; RV64IZFH-NEXT: beqz a0, .LBB11_2
1237 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1238 ; RV64IZFH-NEXT: ret
1239 ; RV64IZFH-NEXT: .LBB11_2: # %if.then
1240 ; RV64IZFH-NEXT: addi sp, sp, -16
1241 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1242 ; RV64IZFH-NEXT: call abort
1244 ; RV32IZHINX-LABEL: br_fcmp_uge:
1245 ; RV32IZHINX: # %bb.0:
1246 ; RV32IZHINX-NEXT: flt.h a0, a0, a1
1247 ; RV32IZHINX-NEXT: beqz a0, .LBB11_2
1248 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1249 ; RV32IZHINX-NEXT: ret
1250 ; RV32IZHINX-NEXT: .LBB11_2: # %if.then
1251 ; RV32IZHINX-NEXT: addi sp, sp, -16
1252 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1253 ; RV32IZHINX-NEXT: call abort
1255 ; RV64IZHINX-LABEL: br_fcmp_uge:
1256 ; RV64IZHINX: # %bb.0:
1257 ; RV64IZHINX-NEXT: flt.h a0, a0, a1
1258 ; RV64IZHINX-NEXT: beqz a0, .LBB11_2
1259 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1260 ; RV64IZHINX-NEXT: ret
1261 ; RV64IZHINX-NEXT: .LBB11_2: # %if.then
1262 ; RV64IZHINX-NEXT: addi sp, sp, -16
1263 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1264 ; RV64IZHINX-NEXT: call abort
1266 ; RV32IZFHMIN-LABEL: br_fcmp_uge:
1267 ; RV32IZFHMIN: # %bb.0:
1268 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1269 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1270 ; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5
1271 ; RV32IZFHMIN-NEXT: beqz a0, .LBB11_2
1272 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1273 ; RV32IZFHMIN-NEXT: ret
1274 ; RV32IZFHMIN-NEXT: .LBB11_2: # %if.then
1275 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1276 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1277 ; RV32IZFHMIN-NEXT: call abort
1279 ; RV64IZFHMIN-LABEL: br_fcmp_uge:
1280 ; RV64IZFHMIN: # %bb.0:
1281 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1282 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1283 ; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5
1284 ; RV64IZFHMIN-NEXT: beqz a0, .LBB11_2
1285 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1286 ; RV64IZFHMIN-NEXT: ret
1287 ; RV64IZFHMIN-NEXT: .LBB11_2: # %if.then
1288 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1289 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1290 ; RV64IZFHMIN-NEXT: call abort
1292 ; RV32IZHINXMIN-LABEL: br_fcmp_uge:
1293 ; RV32IZHINXMIN: # %bb.0:
1294 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
1295 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
1296 ; RV32IZHINXMIN-NEXT: flt.s a0, a0, a1
1297 ; RV32IZHINXMIN-NEXT: beqz a0, .LBB11_2
1298 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1299 ; RV32IZHINXMIN-NEXT: ret
1300 ; RV32IZHINXMIN-NEXT: .LBB11_2: # %if.then
1301 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1302 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1303 ; RV32IZHINXMIN-NEXT: call abort
1305 ; RV64IZHINXMIN-LABEL: br_fcmp_uge:
1306 ; RV64IZHINXMIN: # %bb.0:
1307 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
1308 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
1309 ; RV64IZHINXMIN-NEXT: flt.s a0, a0, a1
1310 ; RV64IZHINXMIN-NEXT: beqz a0, .LBB11_2
1311 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1312 ; RV64IZHINXMIN-NEXT: ret
1313 ; RV64IZHINXMIN-NEXT: .LBB11_2: # %if.then
1314 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1315 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1316 ; RV64IZHINXMIN-NEXT: call abort
1317 %1 = fcmp uge half %a, %b
1318 br i1 %1, label %if.then, label %if.else
1322 tail call void @abort()
1326 define void @br_fcmp_ult(half %a, half %b) nounwind {
1327 ; RV32IZFH-LABEL: br_fcmp_ult:
1328 ; RV32IZFH: # %bb.0:
1329 ; RV32IZFH-NEXT: fle.h a0, fa1, fa0
1330 ; RV32IZFH-NEXT: beqz a0, .LBB12_2
1331 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1332 ; RV32IZFH-NEXT: ret
1333 ; RV32IZFH-NEXT: .LBB12_2: # %if.then
1334 ; RV32IZFH-NEXT: addi sp, sp, -16
1335 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1336 ; RV32IZFH-NEXT: call abort
1338 ; RV64IZFH-LABEL: br_fcmp_ult:
1339 ; RV64IZFH: # %bb.0:
1340 ; RV64IZFH-NEXT: fle.h a0, fa1, fa0
1341 ; RV64IZFH-NEXT: beqz a0, .LBB12_2
1342 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1343 ; RV64IZFH-NEXT: ret
1344 ; RV64IZFH-NEXT: .LBB12_2: # %if.then
1345 ; RV64IZFH-NEXT: addi sp, sp, -16
1346 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1347 ; RV64IZFH-NEXT: call abort
1349 ; RV32IZHINX-LABEL: br_fcmp_ult:
1350 ; RV32IZHINX: # %bb.0:
1351 ; RV32IZHINX-NEXT: fle.h a0, a1, a0
1352 ; RV32IZHINX-NEXT: beqz a0, .LBB12_2
1353 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1354 ; RV32IZHINX-NEXT: ret
1355 ; RV32IZHINX-NEXT: .LBB12_2: # %if.then
1356 ; RV32IZHINX-NEXT: addi sp, sp, -16
1357 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1358 ; RV32IZHINX-NEXT: call abort
1360 ; RV64IZHINX-LABEL: br_fcmp_ult:
1361 ; RV64IZHINX: # %bb.0:
1362 ; RV64IZHINX-NEXT: fle.h a0, a1, a0
1363 ; RV64IZHINX-NEXT: beqz a0, .LBB12_2
1364 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1365 ; RV64IZHINX-NEXT: ret
1366 ; RV64IZHINX-NEXT: .LBB12_2: # %if.then
1367 ; RV64IZHINX-NEXT: addi sp, sp, -16
1368 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1369 ; RV64IZHINX-NEXT: call abort
1371 ; RV32IZFHMIN-LABEL: br_fcmp_ult:
1372 ; RV32IZFHMIN: # %bb.0:
1373 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0
1374 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1
1375 ; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5
1376 ; RV32IZFHMIN-NEXT: beqz a0, .LBB12_2
1377 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1378 ; RV32IZFHMIN-NEXT: ret
1379 ; RV32IZFHMIN-NEXT: .LBB12_2: # %if.then
1380 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1381 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1382 ; RV32IZFHMIN-NEXT: call abort
1384 ; RV64IZFHMIN-LABEL: br_fcmp_ult:
1385 ; RV64IZFHMIN: # %bb.0:
1386 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0
1387 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1
1388 ; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5
1389 ; RV64IZFHMIN-NEXT: beqz a0, .LBB12_2
1390 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1391 ; RV64IZFHMIN-NEXT: ret
1392 ; RV64IZFHMIN-NEXT: .LBB12_2: # %if.then
1393 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1394 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1395 ; RV64IZFHMIN-NEXT: call abort
1397 ; RV32IZHINXMIN-LABEL: br_fcmp_ult:
1398 ; RV32IZHINXMIN: # %bb.0:
1399 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
1400 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
1401 ; RV32IZHINXMIN-NEXT: fle.s a0, a1, a0
1402 ; RV32IZHINXMIN-NEXT: beqz a0, .LBB12_2
1403 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1404 ; RV32IZHINXMIN-NEXT: ret
1405 ; RV32IZHINXMIN-NEXT: .LBB12_2: # %if.then
1406 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1407 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1408 ; RV32IZHINXMIN-NEXT: call abort
1410 ; RV64IZHINXMIN-LABEL: br_fcmp_ult:
1411 ; RV64IZHINXMIN: # %bb.0:
1412 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
1413 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
1414 ; RV64IZHINXMIN-NEXT: fle.s a0, a1, a0
1415 ; RV64IZHINXMIN-NEXT: beqz a0, .LBB12_2
1416 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1417 ; RV64IZHINXMIN-NEXT: ret
1418 ; RV64IZHINXMIN-NEXT: .LBB12_2: # %if.then
1419 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1420 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1421 ; RV64IZHINXMIN-NEXT: call abort
1422 %1 = fcmp ult half %a, %b
1423 br i1 %1, label %if.then, label %if.else
1427 tail call void @abort()
1431 define void @br_fcmp_ule(half %a, half %b) nounwind {
1432 ; RV32IZFH-LABEL: br_fcmp_ule:
1433 ; RV32IZFH: # %bb.0:
1434 ; RV32IZFH-NEXT: flt.h a0, fa1, fa0
1435 ; RV32IZFH-NEXT: beqz a0, .LBB13_2
1436 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1437 ; RV32IZFH-NEXT: ret
1438 ; RV32IZFH-NEXT: .LBB13_2: # %if.then
1439 ; RV32IZFH-NEXT: addi sp, sp, -16
1440 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1441 ; RV32IZFH-NEXT: call abort
1443 ; RV64IZFH-LABEL: br_fcmp_ule:
1444 ; RV64IZFH: # %bb.0:
1445 ; RV64IZFH-NEXT: flt.h a0, fa1, fa0
1446 ; RV64IZFH-NEXT: beqz a0, .LBB13_2
1447 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1448 ; RV64IZFH-NEXT: ret
1449 ; RV64IZFH-NEXT: .LBB13_2: # %if.then
1450 ; RV64IZFH-NEXT: addi sp, sp, -16
1451 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1452 ; RV64IZFH-NEXT: call abort
1454 ; RV32IZHINX-LABEL: br_fcmp_ule:
1455 ; RV32IZHINX: # %bb.0:
1456 ; RV32IZHINX-NEXT: flt.h a0, a1, a0
1457 ; RV32IZHINX-NEXT: beqz a0, .LBB13_2
1458 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1459 ; RV32IZHINX-NEXT: ret
1460 ; RV32IZHINX-NEXT: .LBB13_2: # %if.then
1461 ; RV32IZHINX-NEXT: addi sp, sp, -16
1462 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1463 ; RV32IZHINX-NEXT: call abort
1465 ; RV64IZHINX-LABEL: br_fcmp_ule:
1466 ; RV64IZHINX: # %bb.0:
1467 ; RV64IZHINX-NEXT: flt.h a0, a1, a0
1468 ; RV64IZHINX-NEXT: beqz a0, .LBB13_2
1469 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1470 ; RV64IZHINX-NEXT: ret
1471 ; RV64IZHINX-NEXT: .LBB13_2: # %if.then
1472 ; RV64IZHINX-NEXT: addi sp, sp, -16
1473 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1474 ; RV64IZHINX-NEXT: call abort
1476 ; RV32IZFHMIN-LABEL: br_fcmp_ule:
1477 ; RV32IZFHMIN: # %bb.0:
1478 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0
1479 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1
1480 ; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5
1481 ; RV32IZFHMIN-NEXT: beqz a0, .LBB13_2
1482 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1483 ; RV32IZFHMIN-NEXT: ret
1484 ; RV32IZFHMIN-NEXT: .LBB13_2: # %if.then
1485 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1486 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1487 ; RV32IZFHMIN-NEXT: call abort
1489 ; RV64IZFHMIN-LABEL: br_fcmp_ule:
1490 ; RV64IZFHMIN: # %bb.0:
1491 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0
1492 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1
1493 ; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5
1494 ; RV64IZFHMIN-NEXT: beqz a0, .LBB13_2
1495 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1496 ; RV64IZFHMIN-NEXT: ret
1497 ; RV64IZFHMIN-NEXT: .LBB13_2: # %if.then
1498 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1499 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1500 ; RV64IZFHMIN-NEXT: call abort
1502 ; RV32IZHINXMIN-LABEL: br_fcmp_ule:
1503 ; RV32IZHINXMIN: # %bb.0:
1504 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
1505 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
1506 ; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0
1507 ; RV32IZHINXMIN-NEXT: beqz a0, .LBB13_2
1508 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1509 ; RV32IZHINXMIN-NEXT: ret
1510 ; RV32IZHINXMIN-NEXT: .LBB13_2: # %if.then
1511 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1512 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1513 ; RV32IZHINXMIN-NEXT: call abort
1515 ; RV64IZHINXMIN-LABEL: br_fcmp_ule:
1516 ; RV64IZHINXMIN: # %bb.0:
1517 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
1518 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
1519 ; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0
1520 ; RV64IZHINXMIN-NEXT: beqz a0, .LBB13_2
1521 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1522 ; RV64IZHINXMIN-NEXT: ret
1523 ; RV64IZHINXMIN-NEXT: .LBB13_2: # %if.then
1524 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1525 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1526 ; RV64IZHINXMIN-NEXT: call abort
1527 %1 = fcmp ule half %a, %b
1528 br i1 %1, label %if.then, label %if.else
1532 tail call void @abort()
1536 define void @br_fcmp_une(half %a, half %b) nounwind {
1537 ; RV32IZFH-LABEL: br_fcmp_une:
1538 ; RV32IZFH: # %bb.0:
1539 ; RV32IZFH-NEXT: feq.h a0, fa0, fa1
1540 ; RV32IZFH-NEXT: beqz a0, .LBB14_2
1541 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1542 ; RV32IZFH-NEXT: ret
1543 ; RV32IZFH-NEXT: .LBB14_2: # %if.then
1544 ; RV32IZFH-NEXT: addi sp, sp, -16
1545 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1546 ; RV32IZFH-NEXT: call abort
1548 ; RV64IZFH-LABEL: br_fcmp_une:
1549 ; RV64IZFH: # %bb.0:
1550 ; RV64IZFH-NEXT: feq.h a0, fa0, fa1
1551 ; RV64IZFH-NEXT: beqz a0, .LBB14_2
1552 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1553 ; RV64IZFH-NEXT: ret
1554 ; RV64IZFH-NEXT: .LBB14_2: # %if.then
1555 ; RV64IZFH-NEXT: addi sp, sp, -16
1556 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1557 ; RV64IZFH-NEXT: call abort
1559 ; RV32IZHINX-LABEL: br_fcmp_une:
1560 ; RV32IZHINX: # %bb.0:
1561 ; RV32IZHINX-NEXT: feq.h a0, a0, a1
1562 ; RV32IZHINX-NEXT: beqz a0, .LBB14_2
1563 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1564 ; RV32IZHINX-NEXT: ret
1565 ; RV32IZHINX-NEXT: .LBB14_2: # %if.then
1566 ; RV32IZHINX-NEXT: addi sp, sp, -16
1567 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1568 ; RV32IZHINX-NEXT: call abort
1570 ; RV64IZHINX-LABEL: br_fcmp_une:
1571 ; RV64IZHINX: # %bb.0:
1572 ; RV64IZHINX-NEXT: feq.h a0, a0, a1
1573 ; RV64IZHINX-NEXT: beqz a0, .LBB14_2
1574 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1575 ; RV64IZHINX-NEXT: ret
1576 ; RV64IZHINX-NEXT: .LBB14_2: # %if.then
1577 ; RV64IZHINX-NEXT: addi sp, sp, -16
1578 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1579 ; RV64IZHINX-NEXT: call abort
1581 ; RV32IZFHMIN-LABEL: br_fcmp_une:
1582 ; RV32IZFHMIN: # %bb.0:
1583 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1584 ; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1585 ; RV32IZFHMIN-NEXT: feq.s a0, fa4, fa5
1586 ; RV32IZFHMIN-NEXT: beqz a0, .LBB14_2
1587 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1588 ; RV32IZFHMIN-NEXT: ret
1589 ; RV32IZFHMIN-NEXT: .LBB14_2: # %if.then
1590 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1591 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1592 ; RV32IZFHMIN-NEXT: call abort
1594 ; RV64IZFHMIN-LABEL: br_fcmp_une:
1595 ; RV64IZFHMIN: # %bb.0:
1596 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1597 ; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0
1598 ; RV64IZFHMIN-NEXT: feq.s a0, fa4, fa5
1599 ; RV64IZFHMIN-NEXT: beqz a0, .LBB14_2
1600 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1601 ; RV64IZFHMIN-NEXT: ret
1602 ; RV64IZFHMIN-NEXT: .LBB14_2: # %if.then
1603 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1604 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1605 ; RV64IZFHMIN-NEXT: call abort
1607 ; RV32IZHINXMIN-LABEL: br_fcmp_une:
1608 ; RV32IZHINXMIN: # %bb.0:
1609 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
1610 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
1611 ; RV32IZHINXMIN-NEXT: feq.s a0, a0, a1
1612 ; RV32IZHINXMIN-NEXT: beqz a0, .LBB14_2
1613 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1614 ; RV32IZHINXMIN-NEXT: ret
1615 ; RV32IZHINXMIN-NEXT: .LBB14_2: # %if.then
1616 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1617 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1618 ; RV32IZHINXMIN-NEXT: call abort
1620 ; RV64IZHINXMIN-LABEL: br_fcmp_une:
1621 ; RV64IZHINXMIN: # %bb.0:
1622 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
1623 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
1624 ; RV64IZHINXMIN-NEXT: feq.s a0, a0, a1
1625 ; RV64IZHINXMIN-NEXT: beqz a0, .LBB14_2
1626 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1627 ; RV64IZHINXMIN-NEXT: ret
1628 ; RV64IZHINXMIN-NEXT: .LBB14_2: # %if.then
1629 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1630 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1631 ; RV64IZHINXMIN-NEXT: call abort
1632 %1 = fcmp une half %a, %b
1633 br i1 %1, label %if.then, label %if.else
1637 tail call void @abort()
1641 define void @br_fcmp_uno(half %a, half %b) nounwind {
1642 ; RV32IZFH-LABEL: br_fcmp_uno:
1643 ; RV32IZFH: # %bb.0:
1644 ; RV32IZFH-NEXT: feq.h a0, fa1, fa1
1645 ; RV32IZFH-NEXT: feq.h a1, fa0, fa0
1646 ; RV32IZFH-NEXT: and a0, a1, a0
1647 ; RV32IZFH-NEXT: beqz a0, .LBB15_2
1648 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1649 ; RV32IZFH-NEXT: ret
1650 ; RV32IZFH-NEXT: .LBB15_2: # %if.then
1651 ; RV32IZFH-NEXT: addi sp, sp, -16
1652 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1653 ; RV32IZFH-NEXT: call abort
1655 ; RV64IZFH-LABEL: br_fcmp_uno:
1656 ; RV64IZFH: # %bb.0:
1657 ; RV64IZFH-NEXT: feq.h a0, fa1, fa1
1658 ; RV64IZFH-NEXT: feq.h a1, fa0, fa0
1659 ; RV64IZFH-NEXT: and a0, a1, a0
1660 ; RV64IZFH-NEXT: beqz a0, .LBB15_2
1661 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1662 ; RV64IZFH-NEXT: ret
1663 ; RV64IZFH-NEXT: .LBB15_2: # %if.then
1664 ; RV64IZFH-NEXT: addi sp, sp, -16
1665 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1666 ; RV64IZFH-NEXT: call abort
1668 ; RV32IZHINX-LABEL: br_fcmp_uno:
1669 ; RV32IZHINX: # %bb.0:
1670 ; RV32IZHINX-NEXT: feq.h a1, a1, a1
1671 ; RV32IZHINX-NEXT: feq.h a0, a0, a0
1672 ; RV32IZHINX-NEXT: and a0, a0, a1
1673 ; RV32IZHINX-NEXT: beqz a0, .LBB15_2
1674 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1675 ; RV32IZHINX-NEXT: ret
1676 ; RV32IZHINX-NEXT: .LBB15_2: # %if.then
1677 ; RV32IZHINX-NEXT: addi sp, sp, -16
1678 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1679 ; RV32IZHINX-NEXT: call abort
1681 ; RV64IZHINX-LABEL: br_fcmp_uno:
1682 ; RV64IZHINX: # %bb.0:
1683 ; RV64IZHINX-NEXT: feq.h a1, a1, a1
1684 ; RV64IZHINX-NEXT: feq.h a0, a0, a0
1685 ; RV64IZHINX-NEXT: and a0, a0, a1
1686 ; RV64IZHINX-NEXT: beqz a0, .LBB15_2
1687 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1688 ; RV64IZHINX-NEXT: ret
1689 ; RV64IZHINX-NEXT: .LBB15_2: # %if.then
1690 ; RV64IZHINX-NEXT: addi sp, sp, -16
1691 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1692 ; RV64IZHINX-NEXT: call abort
1694 ; RV32IZFHMIN-LABEL: br_fcmp_uno:
1695 ; RV32IZFHMIN: # %bb.0:
1696 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1697 ; RV32IZFHMIN-NEXT: feq.s a0, fa5, fa5
1698 ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0
1699 ; RV32IZFHMIN-NEXT: feq.s a1, fa5, fa5
1700 ; RV32IZFHMIN-NEXT: and a0, a1, a0
1701 ; RV32IZFHMIN-NEXT: beqz a0, .LBB15_2
1702 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1703 ; RV32IZFHMIN-NEXT: ret
1704 ; RV32IZFHMIN-NEXT: .LBB15_2: # %if.then
1705 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1706 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1707 ; RV32IZFHMIN-NEXT: call abort
1709 ; RV64IZFHMIN-LABEL: br_fcmp_uno:
1710 ; RV64IZFHMIN: # %bb.0:
1711 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1
1712 ; RV64IZFHMIN-NEXT: feq.s a0, fa5, fa5
1713 ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0
1714 ; RV64IZFHMIN-NEXT: feq.s a1, fa5, fa5
1715 ; RV64IZFHMIN-NEXT: and a0, a1, a0
1716 ; RV64IZFHMIN-NEXT: beqz a0, .LBB15_2
1717 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1718 ; RV64IZFHMIN-NEXT: ret
1719 ; RV64IZFHMIN-NEXT: .LBB15_2: # %if.then
1720 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1721 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1722 ; RV64IZFHMIN-NEXT: call abort
1724 ; RV32IZHINXMIN-LABEL: br_fcmp_uno:
1725 ; RV32IZHINXMIN: # %bb.0:
1726 ; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1
1727 ; RV32IZHINXMIN-NEXT: feq.s a1, a1, a1
1728 ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
1729 ; RV32IZHINXMIN-NEXT: feq.s a0, a0, a0
1730 ; RV32IZHINXMIN-NEXT: and a0, a0, a1
1731 ; RV32IZHINXMIN-NEXT: beqz a0, .LBB15_2
1732 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1733 ; RV32IZHINXMIN-NEXT: ret
1734 ; RV32IZHINXMIN-NEXT: .LBB15_2: # %if.then
1735 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1736 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1737 ; RV32IZHINXMIN-NEXT: call abort
1739 ; RV64IZHINXMIN-LABEL: br_fcmp_uno:
1740 ; RV64IZHINXMIN: # %bb.0:
1741 ; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1
1742 ; RV64IZHINXMIN-NEXT: feq.s a1, a1, a1
1743 ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
1744 ; RV64IZHINXMIN-NEXT: feq.s a0, a0, a0
1745 ; RV64IZHINXMIN-NEXT: and a0, a0, a1
1746 ; RV64IZHINXMIN-NEXT: beqz a0, .LBB15_2
1747 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1748 ; RV64IZHINXMIN-NEXT: ret
1749 ; RV64IZHINXMIN-NEXT: .LBB15_2: # %if.then
1750 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1751 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1752 ; RV64IZHINXMIN-NEXT: call abort
1753 %1 = fcmp uno half %a, %b
1754 br i1 %1, label %if.then, label %if.else
1758 tail call void @abort()
1762 define void @br_fcmp_true(half %a, half %b) nounwind {
1763 ; RV32IZFH-LABEL: br_fcmp_true:
1764 ; RV32IZFH: # %bb.0:
1765 ; RV32IZFH-NEXT: li a0, 1
1766 ; RV32IZFH-NEXT: bnez a0, .LBB16_2
1767 ; RV32IZFH-NEXT: # %bb.1: # %if.else
1768 ; RV32IZFH-NEXT: ret
1769 ; RV32IZFH-NEXT: .LBB16_2: # %if.then
1770 ; RV32IZFH-NEXT: addi sp, sp, -16
1771 ; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1772 ; RV32IZFH-NEXT: call abort
1774 ; RV64IZFH-LABEL: br_fcmp_true:
1775 ; RV64IZFH: # %bb.0:
1776 ; RV64IZFH-NEXT: li a0, 1
1777 ; RV64IZFH-NEXT: bnez a0, .LBB16_2
1778 ; RV64IZFH-NEXT: # %bb.1: # %if.else
1779 ; RV64IZFH-NEXT: ret
1780 ; RV64IZFH-NEXT: .LBB16_2: # %if.then
1781 ; RV64IZFH-NEXT: addi sp, sp, -16
1782 ; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1783 ; RV64IZFH-NEXT: call abort
1785 ; RV32IZHINX-LABEL: br_fcmp_true:
1786 ; RV32IZHINX: # %bb.0:
1787 ; RV32IZHINX-NEXT: li a0, 1
1788 ; RV32IZHINX-NEXT: bnez a0, .LBB16_2
1789 ; RV32IZHINX-NEXT: # %bb.1: # %if.else
1790 ; RV32IZHINX-NEXT: ret
1791 ; RV32IZHINX-NEXT: .LBB16_2: # %if.then
1792 ; RV32IZHINX-NEXT: addi sp, sp, -16
1793 ; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1794 ; RV32IZHINX-NEXT: call abort
1796 ; RV64IZHINX-LABEL: br_fcmp_true:
1797 ; RV64IZHINX: # %bb.0:
1798 ; RV64IZHINX-NEXT: li a0, 1
1799 ; RV64IZHINX-NEXT: bnez a0, .LBB16_2
1800 ; RV64IZHINX-NEXT: # %bb.1: # %if.else
1801 ; RV64IZHINX-NEXT: ret
1802 ; RV64IZHINX-NEXT: .LBB16_2: # %if.then
1803 ; RV64IZHINX-NEXT: addi sp, sp, -16
1804 ; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1805 ; RV64IZHINX-NEXT: call abort
1807 ; RV32IZFHMIN-LABEL: br_fcmp_true:
1808 ; RV32IZFHMIN: # %bb.0:
1809 ; RV32IZFHMIN-NEXT: li a0, 1
1810 ; RV32IZFHMIN-NEXT: bnez a0, .LBB16_2
1811 ; RV32IZFHMIN-NEXT: # %bb.1: # %if.else
1812 ; RV32IZFHMIN-NEXT: ret
1813 ; RV32IZFHMIN-NEXT: .LBB16_2: # %if.then
1814 ; RV32IZFHMIN-NEXT: addi sp, sp, -16
1815 ; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1816 ; RV32IZFHMIN-NEXT: call abort
1818 ; RV64IZFHMIN-LABEL: br_fcmp_true:
1819 ; RV64IZFHMIN: # %bb.0:
1820 ; RV64IZFHMIN-NEXT: li a0, 1
1821 ; RV64IZFHMIN-NEXT: bnez a0, .LBB16_2
1822 ; RV64IZFHMIN-NEXT: # %bb.1: # %if.else
1823 ; RV64IZFHMIN-NEXT: ret
1824 ; RV64IZFHMIN-NEXT: .LBB16_2: # %if.then
1825 ; RV64IZFHMIN-NEXT: addi sp, sp, -16
1826 ; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1827 ; RV64IZFHMIN-NEXT: call abort
1829 ; RV32IZHINXMIN-LABEL: br_fcmp_true:
1830 ; RV32IZHINXMIN: # %bb.0:
1831 ; RV32IZHINXMIN-NEXT: li a0, 1
1832 ; RV32IZHINXMIN-NEXT: bnez a0, .LBB16_2
1833 ; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else
1834 ; RV32IZHINXMIN-NEXT: ret
1835 ; RV32IZHINXMIN-NEXT: .LBB16_2: # %if.then
1836 ; RV32IZHINXMIN-NEXT: addi sp, sp, -16
1837 ; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1838 ; RV32IZHINXMIN-NEXT: call abort
1840 ; RV64IZHINXMIN-LABEL: br_fcmp_true:
1841 ; RV64IZHINXMIN: # %bb.0:
1842 ; RV64IZHINXMIN-NEXT: li a0, 1
1843 ; RV64IZHINXMIN-NEXT: bnez a0, .LBB16_2
1844 ; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else
1845 ; RV64IZHINXMIN-NEXT: ret
1846 ; RV64IZHINXMIN-NEXT: .LBB16_2: # %if.then
1847 ; RV64IZHINXMIN-NEXT: addi sp, sp, -16
1848 ; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1849 ; RV64IZHINXMIN-NEXT: call abort
1850 %1 = fcmp true half %a, %b
1851 br i1 %1, label %if.then, label %if.else
1855 tail call void @abort()