1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
3 ; RUN: -target-abi=ilp32d | FileCheck -check-prefix=RV32IFD %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
5 ; RUN: -target-abi=lp64d | FileCheck -check-prefix=RV64IFD %s
6 ; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \
7 ; RUN: -target-abi=ilp32 | FileCheck -check-prefix=RV32IZFINXZDINX %s
8 ; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
9 ; RUN: -target-abi=lp64 | FileCheck -check-prefix=RV64IZFINXZDINX %s
12 declare void @exit(i32)
14 define void @br_fcmp_false(double %a, double %b) nounwind {
15 ; RV32IFD-LABEL: br_fcmp_false:
17 ; RV32IFD-NEXT: li a0, 1
18 ; RV32IFD-NEXT: bnez a0, .LBB0_2
19 ; RV32IFD-NEXT: # %bb.1: # %if.then
21 ; RV32IFD-NEXT: .LBB0_2: # %if.else
22 ; RV32IFD-NEXT: addi sp, sp, -16
23 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
24 ; RV32IFD-NEXT: call abort
26 ; RV64IFD-LABEL: br_fcmp_false:
28 ; RV64IFD-NEXT: li a0, 1
29 ; RV64IFD-NEXT: bnez a0, .LBB0_2
30 ; RV64IFD-NEXT: # %bb.1: # %if.then
32 ; RV64IFD-NEXT: .LBB0_2: # %if.else
33 ; RV64IFD-NEXT: addi sp, sp, -16
34 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
35 ; RV64IFD-NEXT: call abort
37 ; RV32IZFINXZDINX-LABEL: br_fcmp_false:
38 ; RV32IZFINXZDINX: # %bb.0:
39 ; RV32IZFINXZDINX-NEXT: li a0, 1
40 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB0_2
41 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.then
42 ; RV32IZFINXZDINX-NEXT: ret
43 ; RV32IZFINXZDINX-NEXT: .LBB0_2: # %if.else
44 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
45 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
46 ; RV32IZFINXZDINX-NEXT: call abort
48 ; RV64IZFINXZDINX-LABEL: br_fcmp_false:
49 ; RV64IZFINXZDINX: # %bb.0:
50 ; RV64IZFINXZDINX-NEXT: li a0, 1
51 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB0_2
52 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.then
53 ; RV64IZFINXZDINX-NEXT: ret
54 ; RV64IZFINXZDINX-NEXT: .LBB0_2: # %if.else
55 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
56 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
57 ; RV64IZFINXZDINX-NEXT: call abort
58 %1 = fcmp false double %a, %b
59 br i1 %1, label %if.then, label %if.else
63 tail call void @abort()
67 define void @br_fcmp_oeq(double %a, double %b) nounwind {
68 ; RV32IFD-LABEL: br_fcmp_oeq:
70 ; RV32IFD-NEXT: feq.d a0, fa0, fa1
71 ; RV32IFD-NEXT: bnez a0, .LBB1_2
72 ; RV32IFD-NEXT: # %bb.1: # %if.else
74 ; RV32IFD-NEXT: .LBB1_2: # %if.then
75 ; RV32IFD-NEXT: addi sp, sp, -16
76 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
77 ; RV32IFD-NEXT: call abort
79 ; RV64IFD-LABEL: br_fcmp_oeq:
81 ; RV64IFD-NEXT: feq.d a0, fa0, fa1
82 ; RV64IFD-NEXT: bnez a0, .LBB1_2
83 ; RV64IFD-NEXT: # %bb.1: # %if.else
85 ; RV64IFD-NEXT: .LBB1_2: # %if.then
86 ; RV64IFD-NEXT: addi sp, sp, -16
87 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
88 ; RV64IFD-NEXT: call abort
90 ; RV32IZFINXZDINX-LABEL: br_fcmp_oeq:
91 ; RV32IZFINXZDINX: # %bb.0:
92 ; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a2
93 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB1_2
94 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
95 ; RV32IZFINXZDINX-NEXT: ret
96 ; RV32IZFINXZDINX-NEXT: .LBB1_2: # %if.then
97 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
98 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
99 ; RV32IZFINXZDINX-NEXT: call abort
101 ; RV64IZFINXZDINX-LABEL: br_fcmp_oeq:
102 ; RV64IZFINXZDINX: # %bb.0:
103 ; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a1
104 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB1_2
105 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
106 ; RV64IZFINXZDINX-NEXT: ret
107 ; RV64IZFINXZDINX-NEXT: .LBB1_2: # %if.then
108 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
109 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
110 ; RV64IZFINXZDINX-NEXT: call abort
111 %1 = fcmp oeq double %a, %b
112 br i1 %1, label %if.then, label %if.else
116 tail call void @abort()
120 ; TODO: generated code quality for this is very poor due to
121 ; DAGCombiner::visitXOR converting the legal setoeq to setune, which requires
123 define void @br_fcmp_oeq_alt(double %a, double %b) nounwind {
124 ; RV32IFD-LABEL: br_fcmp_oeq_alt:
126 ; RV32IFD-NEXT: feq.d a0, fa0, fa1
127 ; RV32IFD-NEXT: bnez a0, .LBB2_2
128 ; RV32IFD-NEXT: # %bb.1: # %if.else
130 ; RV32IFD-NEXT: .LBB2_2: # %if.then
131 ; RV32IFD-NEXT: addi sp, sp, -16
132 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
133 ; RV32IFD-NEXT: call abort
135 ; RV64IFD-LABEL: br_fcmp_oeq_alt:
137 ; RV64IFD-NEXT: feq.d a0, fa0, fa1
138 ; RV64IFD-NEXT: bnez a0, .LBB2_2
139 ; RV64IFD-NEXT: # %bb.1: # %if.else
141 ; RV64IFD-NEXT: .LBB2_2: # %if.then
142 ; RV64IFD-NEXT: addi sp, sp, -16
143 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
144 ; RV64IFD-NEXT: call abort
146 ; RV32IZFINXZDINX-LABEL: br_fcmp_oeq_alt:
147 ; RV32IZFINXZDINX: # %bb.0:
148 ; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a2
149 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB2_2
150 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
151 ; RV32IZFINXZDINX-NEXT: ret
152 ; RV32IZFINXZDINX-NEXT: .LBB2_2: # %if.then
153 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
154 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
155 ; RV32IZFINXZDINX-NEXT: call abort
157 ; RV64IZFINXZDINX-LABEL: br_fcmp_oeq_alt:
158 ; RV64IZFINXZDINX: # %bb.0:
159 ; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a1
160 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB2_2
161 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
162 ; RV64IZFINXZDINX-NEXT: ret
163 ; RV64IZFINXZDINX-NEXT: .LBB2_2: # %if.then
164 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
165 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
166 ; RV64IZFINXZDINX-NEXT: call abort
167 %1 = fcmp oeq double %a, %b
168 br i1 %1, label %if.then, label %if.else
170 tail call void @abort()
176 define void @br_fcmp_ogt(double %a, double %b) nounwind {
177 ; RV32IFD-LABEL: br_fcmp_ogt:
179 ; RV32IFD-NEXT: flt.d a0, fa1, fa0
180 ; RV32IFD-NEXT: bnez a0, .LBB3_2
181 ; RV32IFD-NEXT: # %bb.1: # %if.else
183 ; RV32IFD-NEXT: .LBB3_2: # %if.then
184 ; RV32IFD-NEXT: addi sp, sp, -16
185 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
186 ; RV32IFD-NEXT: call abort
188 ; RV64IFD-LABEL: br_fcmp_ogt:
190 ; RV64IFD-NEXT: flt.d a0, fa1, fa0
191 ; RV64IFD-NEXT: bnez a0, .LBB3_2
192 ; RV64IFD-NEXT: # %bb.1: # %if.else
194 ; RV64IFD-NEXT: .LBB3_2: # %if.then
195 ; RV64IFD-NEXT: addi sp, sp, -16
196 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
197 ; RV64IFD-NEXT: call abort
199 ; RV32IZFINXZDINX-LABEL: br_fcmp_ogt:
200 ; RV32IZFINXZDINX: # %bb.0:
201 ; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0
202 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB3_2
203 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
204 ; RV32IZFINXZDINX-NEXT: ret
205 ; RV32IZFINXZDINX-NEXT: .LBB3_2: # %if.then
206 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
207 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
208 ; RV32IZFINXZDINX-NEXT: call abort
210 ; RV64IZFINXZDINX-LABEL: br_fcmp_ogt:
211 ; RV64IZFINXZDINX: # %bb.0:
212 ; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0
213 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB3_2
214 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
215 ; RV64IZFINXZDINX-NEXT: ret
216 ; RV64IZFINXZDINX-NEXT: .LBB3_2: # %if.then
217 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
218 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
219 ; RV64IZFINXZDINX-NEXT: call abort
220 %1 = fcmp ogt double %a, %b
221 br i1 %1, label %if.then, label %if.else
225 tail call void @abort()
229 define void @br_fcmp_oge(double %a, double %b) nounwind {
230 ; RV32IFD-LABEL: br_fcmp_oge:
232 ; RV32IFD-NEXT: fle.d a0, fa1, fa0
233 ; RV32IFD-NEXT: bnez a0, .LBB4_2
234 ; RV32IFD-NEXT: # %bb.1: # %if.else
236 ; RV32IFD-NEXT: .LBB4_2: # %if.then
237 ; RV32IFD-NEXT: addi sp, sp, -16
238 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
239 ; RV32IFD-NEXT: call abort
241 ; RV64IFD-LABEL: br_fcmp_oge:
243 ; RV64IFD-NEXT: fle.d a0, fa1, fa0
244 ; RV64IFD-NEXT: bnez a0, .LBB4_2
245 ; RV64IFD-NEXT: # %bb.1: # %if.else
247 ; RV64IFD-NEXT: .LBB4_2: # %if.then
248 ; RV64IFD-NEXT: addi sp, sp, -16
249 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
250 ; RV64IFD-NEXT: call abort
252 ; RV32IZFINXZDINX-LABEL: br_fcmp_oge:
253 ; RV32IZFINXZDINX: # %bb.0:
254 ; RV32IZFINXZDINX-NEXT: fle.d a0, a2, a0
255 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB4_2
256 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
257 ; RV32IZFINXZDINX-NEXT: ret
258 ; RV32IZFINXZDINX-NEXT: .LBB4_2: # %if.then
259 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
260 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
261 ; RV32IZFINXZDINX-NEXT: call abort
263 ; RV64IZFINXZDINX-LABEL: br_fcmp_oge:
264 ; RV64IZFINXZDINX: # %bb.0:
265 ; RV64IZFINXZDINX-NEXT: fle.d a0, a1, a0
266 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB4_2
267 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
268 ; RV64IZFINXZDINX-NEXT: ret
269 ; RV64IZFINXZDINX-NEXT: .LBB4_2: # %if.then
270 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
271 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
272 ; RV64IZFINXZDINX-NEXT: call abort
273 %1 = fcmp oge double %a, %b
274 br i1 %1, label %if.then, label %if.else
278 tail call void @abort()
282 define void @br_fcmp_olt(double %a, double %b) nounwind {
283 ; RV32IFD-LABEL: br_fcmp_olt:
285 ; RV32IFD-NEXT: flt.d a0, fa0, fa1
286 ; RV32IFD-NEXT: bnez a0, .LBB5_2
287 ; RV32IFD-NEXT: # %bb.1: # %if.else
289 ; RV32IFD-NEXT: .LBB5_2: # %if.then
290 ; RV32IFD-NEXT: addi sp, sp, -16
291 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
292 ; RV32IFD-NEXT: call abort
294 ; RV64IFD-LABEL: br_fcmp_olt:
296 ; RV64IFD-NEXT: flt.d a0, fa0, fa1
297 ; RV64IFD-NEXT: bnez a0, .LBB5_2
298 ; RV64IFD-NEXT: # %bb.1: # %if.else
300 ; RV64IFD-NEXT: .LBB5_2: # %if.then
301 ; RV64IFD-NEXT: addi sp, sp, -16
302 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
303 ; RV64IFD-NEXT: call abort
305 ; RV32IZFINXZDINX-LABEL: br_fcmp_olt:
306 ; RV32IZFINXZDINX: # %bb.0:
307 ; RV32IZFINXZDINX-NEXT: flt.d a0, a0, a2
308 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB5_2
309 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
310 ; RV32IZFINXZDINX-NEXT: ret
311 ; RV32IZFINXZDINX-NEXT: .LBB5_2: # %if.then
312 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
313 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
314 ; RV32IZFINXZDINX-NEXT: call abort
316 ; RV64IZFINXZDINX-LABEL: br_fcmp_olt:
317 ; RV64IZFINXZDINX: # %bb.0:
318 ; RV64IZFINXZDINX-NEXT: flt.d a0, a0, a1
319 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB5_2
320 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
321 ; RV64IZFINXZDINX-NEXT: ret
322 ; RV64IZFINXZDINX-NEXT: .LBB5_2: # %if.then
323 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
324 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
325 ; RV64IZFINXZDINX-NEXT: call abort
326 %1 = fcmp olt double %a, %b
327 br i1 %1, label %if.then, label %if.else
331 tail call void @abort()
335 define void @br_fcmp_ole(double %a, double %b) nounwind {
336 ; RV32IFD-LABEL: br_fcmp_ole:
338 ; RV32IFD-NEXT: fle.d a0, fa0, fa1
339 ; RV32IFD-NEXT: bnez a0, .LBB6_2
340 ; RV32IFD-NEXT: # %bb.1: # %if.else
342 ; RV32IFD-NEXT: .LBB6_2: # %if.then
343 ; RV32IFD-NEXT: addi sp, sp, -16
344 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
345 ; RV32IFD-NEXT: call abort
347 ; RV64IFD-LABEL: br_fcmp_ole:
349 ; RV64IFD-NEXT: fle.d a0, fa0, fa1
350 ; RV64IFD-NEXT: bnez a0, .LBB6_2
351 ; RV64IFD-NEXT: # %bb.1: # %if.else
353 ; RV64IFD-NEXT: .LBB6_2: # %if.then
354 ; RV64IFD-NEXT: addi sp, sp, -16
355 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
356 ; RV64IFD-NEXT: call abort
358 ; RV32IZFINXZDINX-LABEL: br_fcmp_ole:
359 ; RV32IZFINXZDINX: # %bb.0:
360 ; RV32IZFINXZDINX-NEXT: fle.d a0, a0, a2
361 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB6_2
362 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
363 ; RV32IZFINXZDINX-NEXT: ret
364 ; RV32IZFINXZDINX-NEXT: .LBB6_2: # %if.then
365 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
366 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
367 ; RV32IZFINXZDINX-NEXT: call abort
369 ; RV64IZFINXZDINX-LABEL: br_fcmp_ole:
370 ; RV64IZFINXZDINX: # %bb.0:
371 ; RV64IZFINXZDINX-NEXT: fle.d a0, a0, a1
372 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB6_2
373 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
374 ; RV64IZFINXZDINX-NEXT: ret
375 ; RV64IZFINXZDINX-NEXT: .LBB6_2: # %if.then
376 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
377 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
378 ; RV64IZFINXZDINX-NEXT: call abort
379 %1 = fcmp ole double %a, %b
380 br i1 %1, label %if.then, label %if.else
384 tail call void @abort()
388 define void @br_fcmp_one(double %a, double %b) nounwind {
389 ; RV32IFD-LABEL: br_fcmp_one:
391 ; RV32IFD-NEXT: flt.d a0, fa0, fa1
392 ; RV32IFD-NEXT: flt.d a1, fa1, fa0
393 ; RV32IFD-NEXT: or a0, a1, a0
394 ; RV32IFD-NEXT: bnez a0, .LBB7_2
395 ; RV32IFD-NEXT: # %bb.1: # %if.else
397 ; RV32IFD-NEXT: .LBB7_2: # %if.then
398 ; RV32IFD-NEXT: addi sp, sp, -16
399 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
400 ; RV32IFD-NEXT: call abort
402 ; RV64IFD-LABEL: br_fcmp_one:
404 ; RV64IFD-NEXT: flt.d a0, fa0, fa1
405 ; RV64IFD-NEXT: flt.d a1, fa1, fa0
406 ; RV64IFD-NEXT: or a0, a1, a0
407 ; RV64IFD-NEXT: bnez a0, .LBB7_2
408 ; RV64IFD-NEXT: # %bb.1: # %if.else
410 ; RV64IFD-NEXT: .LBB7_2: # %if.then
411 ; RV64IFD-NEXT: addi sp, sp, -16
412 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
413 ; RV64IFD-NEXT: call abort
415 ; RV32IZFINXZDINX-LABEL: br_fcmp_one:
416 ; RV32IZFINXZDINX: # %bb.0:
417 ; RV32IZFINXZDINX-NEXT: flt.d a4, a0, a2
418 ; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0
419 ; RV32IZFINXZDINX-NEXT: or a0, a0, a4
420 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB7_2
421 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
422 ; RV32IZFINXZDINX-NEXT: ret
423 ; RV32IZFINXZDINX-NEXT: .LBB7_2: # %if.then
424 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
425 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
426 ; RV32IZFINXZDINX-NEXT: call abort
428 ; RV64IZFINXZDINX-LABEL: br_fcmp_one:
429 ; RV64IZFINXZDINX: # %bb.0:
430 ; RV64IZFINXZDINX-NEXT: flt.d a2, a0, a1
431 ; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0
432 ; RV64IZFINXZDINX-NEXT: or a0, a0, a2
433 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB7_2
434 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
435 ; RV64IZFINXZDINX-NEXT: ret
436 ; RV64IZFINXZDINX-NEXT: .LBB7_2: # %if.then
437 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
438 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
439 ; RV64IZFINXZDINX-NEXT: call abort
440 %1 = fcmp one double %a, %b
441 br i1 %1, label %if.then, label %if.else
445 tail call void @abort()
449 define void @br_fcmp_ord(double %a, double %b) nounwind {
450 ; RV32IFD-LABEL: br_fcmp_ord:
452 ; RV32IFD-NEXT: feq.d a0, fa1, fa1
453 ; RV32IFD-NEXT: feq.d a1, fa0, fa0
454 ; RV32IFD-NEXT: and a0, a1, a0
455 ; RV32IFD-NEXT: bnez a0, .LBB8_2
456 ; RV32IFD-NEXT: # %bb.1: # %if.else
458 ; RV32IFD-NEXT: .LBB8_2: # %if.then
459 ; RV32IFD-NEXT: addi sp, sp, -16
460 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
461 ; RV32IFD-NEXT: call abort
463 ; RV64IFD-LABEL: br_fcmp_ord:
465 ; RV64IFD-NEXT: feq.d a0, fa1, fa1
466 ; RV64IFD-NEXT: feq.d a1, fa0, fa0
467 ; RV64IFD-NEXT: and a0, a1, a0
468 ; RV64IFD-NEXT: bnez a0, .LBB8_2
469 ; RV64IFD-NEXT: # %bb.1: # %if.else
471 ; RV64IFD-NEXT: .LBB8_2: # %if.then
472 ; RV64IFD-NEXT: addi sp, sp, -16
473 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
474 ; RV64IFD-NEXT: call abort
476 ; RV32IZFINXZDINX-LABEL: br_fcmp_ord:
477 ; RV32IZFINXZDINX: # %bb.0:
478 ; RV32IZFINXZDINX-NEXT: feq.d a2, a2, a2
479 ; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a0
480 ; RV32IZFINXZDINX-NEXT: and a0, a0, a2
481 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB8_2
482 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
483 ; RV32IZFINXZDINX-NEXT: ret
484 ; RV32IZFINXZDINX-NEXT: .LBB8_2: # %if.then
485 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
486 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
487 ; RV32IZFINXZDINX-NEXT: call abort
489 ; RV64IZFINXZDINX-LABEL: br_fcmp_ord:
490 ; RV64IZFINXZDINX: # %bb.0:
491 ; RV64IZFINXZDINX-NEXT: feq.d a1, a1, a1
492 ; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a0
493 ; RV64IZFINXZDINX-NEXT: and a0, a0, a1
494 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB8_2
495 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
496 ; RV64IZFINXZDINX-NEXT: ret
497 ; RV64IZFINXZDINX-NEXT: .LBB8_2: # %if.then
498 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
499 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
500 ; RV64IZFINXZDINX-NEXT: call abort
501 %1 = fcmp ord double %a, %b
502 br i1 %1, label %if.then, label %if.else
506 tail call void @abort()
510 define void @br_fcmp_ueq(double %a, double %b) nounwind {
511 ; RV32IFD-LABEL: br_fcmp_ueq:
513 ; RV32IFD-NEXT: flt.d a0, fa0, fa1
514 ; RV32IFD-NEXT: flt.d a1, fa1, fa0
515 ; RV32IFD-NEXT: or a0, a1, a0
516 ; RV32IFD-NEXT: beqz a0, .LBB9_2
517 ; RV32IFD-NEXT: # %bb.1: # %if.else
519 ; RV32IFD-NEXT: .LBB9_2: # %if.then
520 ; RV32IFD-NEXT: addi sp, sp, -16
521 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
522 ; RV32IFD-NEXT: call abort
524 ; RV64IFD-LABEL: br_fcmp_ueq:
526 ; RV64IFD-NEXT: flt.d a0, fa0, fa1
527 ; RV64IFD-NEXT: flt.d a1, fa1, fa0
528 ; RV64IFD-NEXT: or a0, a1, a0
529 ; RV64IFD-NEXT: beqz a0, .LBB9_2
530 ; RV64IFD-NEXT: # %bb.1: # %if.else
532 ; RV64IFD-NEXT: .LBB9_2: # %if.then
533 ; RV64IFD-NEXT: addi sp, sp, -16
534 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
535 ; RV64IFD-NEXT: call abort
537 ; RV32IZFINXZDINX-LABEL: br_fcmp_ueq:
538 ; RV32IZFINXZDINX: # %bb.0:
539 ; RV32IZFINXZDINX-NEXT: flt.d a4, a0, a2
540 ; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0
541 ; RV32IZFINXZDINX-NEXT: or a0, a0, a4
542 ; RV32IZFINXZDINX-NEXT: beqz a0, .LBB9_2
543 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
544 ; RV32IZFINXZDINX-NEXT: ret
545 ; RV32IZFINXZDINX-NEXT: .LBB9_2: # %if.then
546 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
547 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
548 ; RV32IZFINXZDINX-NEXT: call abort
550 ; RV64IZFINXZDINX-LABEL: br_fcmp_ueq:
551 ; RV64IZFINXZDINX: # %bb.0:
552 ; RV64IZFINXZDINX-NEXT: flt.d a2, a0, a1
553 ; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0
554 ; RV64IZFINXZDINX-NEXT: or a0, a0, a2
555 ; RV64IZFINXZDINX-NEXT: beqz a0, .LBB9_2
556 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
557 ; RV64IZFINXZDINX-NEXT: ret
558 ; RV64IZFINXZDINX-NEXT: .LBB9_2: # %if.then
559 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
560 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
561 ; RV64IZFINXZDINX-NEXT: call abort
562 %1 = fcmp ueq double %a, %b
563 br i1 %1, label %if.then, label %if.else
567 tail call void @abort()
571 define void @br_fcmp_ugt(double %a, double %b) nounwind {
572 ; RV32IFD-LABEL: br_fcmp_ugt:
574 ; RV32IFD-NEXT: fle.d a0, fa0, fa1
575 ; RV32IFD-NEXT: beqz a0, .LBB10_2
576 ; RV32IFD-NEXT: # %bb.1: # %if.else
578 ; RV32IFD-NEXT: .LBB10_2: # %if.then
579 ; RV32IFD-NEXT: addi sp, sp, -16
580 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
581 ; RV32IFD-NEXT: call abort
583 ; RV64IFD-LABEL: br_fcmp_ugt:
585 ; RV64IFD-NEXT: fle.d a0, fa0, fa1
586 ; RV64IFD-NEXT: beqz a0, .LBB10_2
587 ; RV64IFD-NEXT: # %bb.1: # %if.else
589 ; RV64IFD-NEXT: .LBB10_2: # %if.then
590 ; RV64IFD-NEXT: addi sp, sp, -16
591 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
592 ; RV64IFD-NEXT: call abort
594 ; RV32IZFINXZDINX-LABEL: br_fcmp_ugt:
595 ; RV32IZFINXZDINX: # %bb.0:
596 ; RV32IZFINXZDINX-NEXT: fle.d a0, a0, a2
597 ; RV32IZFINXZDINX-NEXT: beqz a0, .LBB10_2
598 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
599 ; RV32IZFINXZDINX-NEXT: ret
600 ; RV32IZFINXZDINX-NEXT: .LBB10_2: # %if.then
601 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
602 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
603 ; RV32IZFINXZDINX-NEXT: call abort
605 ; RV64IZFINXZDINX-LABEL: br_fcmp_ugt:
606 ; RV64IZFINXZDINX: # %bb.0:
607 ; RV64IZFINXZDINX-NEXT: fle.d a0, a0, a1
608 ; RV64IZFINXZDINX-NEXT: beqz a0, .LBB10_2
609 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
610 ; RV64IZFINXZDINX-NEXT: ret
611 ; RV64IZFINXZDINX-NEXT: .LBB10_2: # %if.then
612 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
613 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
614 ; RV64IZFINXZDINX-NEXT: call abort
615 %1 = fcmp ugt double %a, %b
616 br i1 %1, label %if.then, label %if.else
620 tail call void @abort()
624 define void @br_fcmp_uge(double %a, double %b) nounwind {
625 ; RV32IFD-LABEL: br_fcmp_uge:
627 ; RV32IFD-NEXT: flt.d a0, fa0, fa1
628 ; RV32IFD-NEXT: beqz a0, .LBB11_2
629 ; RV32IFD-NEXT: # %bb.1: # %if.else
631 ; RV32IFD-NEXT: .LBB11_2: # %if.then
632 ; RV32IFD-NEXT: addi sp, sp, -16
633 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
634 ; RV32IFD-NEXT: call abort
636 ; RV64IFD-LABEL: br_fcmp_uge:
638 ; RV64IFD-NEXT: flt.d a0, fa0, fa1
639 ; RV64IFD-NEXT: beqz a0, .LBB11_2
640 ; RV64IFD-NEXT: # %bb.1: # %if.else
642 ; RV64IFD-NEXT: .LBB11_2: # %if.then
643 ; RV64IFD-NEXT: addi sp, sp, -16
644 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
645 ; RV64IFD-NEXT: call abort
647 ; RV32IZFINXZDINX-LABEL: br_fcmp_uge:
648 ; RV32IZFINXZDINX: # %bb.0:
649 ; RV32IZFINXZDINX-NEXT: flt.d a0, a0, a2
650 ; RV32IZFINXZDINX-NEXT: beqz a0, .LBB11_2
651 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
652 ; RV32IZFINXZDINX-NEXT: ret
653 ; RV32IZFINXZDINX-NEXT: .LBB11_2: # %if.then
654 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
655 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
656 ; RV32IZFINXZDINX-NEXT: call abort
658 ; RV64IZFINXZDINX-LABEL: br_fcmp_uge:
659 ; RV64IZFINXZDINX: # %bb.0:
660 ; RV64IZFINXZDINX-NEXT: flt.d a0, a0, a1
661 ; RV64IZFINXZDINX-NEXT: beqz a0, .LBB11_2
662 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
663 ; RV64IZFINXZDINX-NEXT: ret
664 ; RV64IZFINXZDINX-NEXT: .LBB11_2: # %if.then
665 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
666 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
667 ; RV64IZFINXZDINX-NEXT: call abort
668 %1 = fcmp uge double %a, %b
669 br i1 %1, label %if.then, label %if.else
673 tail call void @abort()
677 define void @br_fcmp_ult(double %a, double %b) nounwind {
678 ; RV32IFD-LABEL: br_fcmp_ult:
680 ; RV32IFD-NEXT: fle.d a0, fa1, fa0
681 ; RV32IFD-NEXT: beqz a0, .LBB12_2
682 ; RV32IFD-NEXT: # %bb.1: # %if.else
684 ; RV32IFD-NEXT: .LBB12_2: # %if.then
685 ; RV32IFD-NEXT: addi sp, sp, -16
686 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
687 ; RV32IFD-NEXT: call abort
689 ; RV64IFD-LABEL: br_fcmp_ult:
691 ; RV64IFD-NEXT: fle.d a0, fa1, fa0
692 ; RV64IFD-NEXT: beqz a0, .LBB12_2
693 ; RV64IFD-NEXT: # %bb.1: # %if.else
695 ; RV64IFD-NEXT: .LBB12_2: # %if.then
696 ; RV64IFD-NEXT: addi sp, sp, -16
697 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
698 ; RV64IFD-NEXT: call abort
700 ; RV32IZFINXZDINX-LABEL: br_fcmp_ult:
701 ; RV32IZFINXZDINX: # %bb.0:
702 ; RV32IZFINXZDINX-NEXT: fle.d a0, a2, a0
703 ; RV32IZFINXZDINX-NEXT: beqz a0, .LBB12_2
704 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
705 ; RV32IZFINXZDINX-NEXT: ret
706 ; RV32IZFINXZDINX-NEXT: .LBB12_2: # %if.then
707 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
708 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
709 ; RV32IZFINXZDINX-NEXT: call abort
711 ; RV64IZFINXZDINX-LABEL: br_fcmp_ult:
712 ; RV64IZFINXZDINX: # %bb.0:
713 ; RV64IZFINXZDINX-NEXT: fle.d a0, a1, a0
714 ; RV64IZFINXZDINX-NEXT: beqz a0, .LBB12_2
715 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
716 ; RV64IZFINXZDINX-NEXT: ret
717 ; RV64IZFINXZDINX-NEXT: .LBB12_2: # %if.then
718 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
719 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
720 ; RV64IZFINXZDINX-NEXT: call abort
721 %1 = fcmp ult double %a, %b
722 br i1 %1, label %if.then, label %if.else
726 tail call void @abort()
730 define void @br_fcmp_ule(double %a, double %b) nounwind {
731 ; RV32IFD-LABEL: br_fcmp_ule:
733 ; RV32IFD-NEXT: flt.d a0, fa1, fa0
734 ; RV32IFD-NEXT: beqz a0, .LBB13_2
735 ; RV32IFD-NEXT: # %bb.1: # %if.else
737 ; RV32IFD-NEXT: .LBB13_2: # %if.then
738 ; RV32IFD-NEXT: addi sp, sp, -16
739 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
740 ; RV32IFD-NEXT: call abort
742 ; RV64IFD-LABEL: br_fcmp_ule:
744 ; RV64IFD-NEXT: flt.d a0, fa1, fa0
745 ; RV64IFD-NEXT: beqz a0, .LBB13_2
746 ; RV64IFD-NEXT: # %bb.1: # %if.else
748 ; RV64IFD-NEXT: .LBB13_2: # %if.then
749 ; RV64IFD-NEXT: addi sp, sp, -16
750 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
751 ; RV64IFD-NEXT: call abort
753 ; RV32IZFINXZDINX-LABEL: br_fcmp_ule:
754 ; RV32IZFINXZDINX: # %bb.0:
755 ; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0
756 ; RV32IZFINXZDINX-NEXT: beqz a0, .LBB13_2
757 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
758 ; RV32IZFINXZDINX-NEXT: ret
759 ; RV32IZFINXZDINX-NEXT: .LBB13_2: # %if.then
760 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
761 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
762 ; RV32IZFINXZDINX-NEXT: call abort
764 ; RV64IZFINXZDINX-LABEL: br_fcmp_ule:
765 ; RV64IZFINXZDINX: # %bb.0:
766 ; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0
767 ; RV64IZFINXZDINX-NEXT: beqz a0, .LBB13_2
768 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
769 ; RV64IZFINXZDINX-NEXT: ret
770 ; RV64IZFINXZDINX-NEXT: .LBB13_2: # %if.then
771 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
772 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
773 ; RV64IZFINXZDINX-NEXT: call abort
774 %1 = fcmp ule double %a, %b
775 br i1 %1, label %if.then, label %if.else
779 tail call void @abort()
783 define void @br_fcmp_une(double %a, double %b) nounwind {
784 ; RV32IFD-LABEL: br_fcmp_une:
786 ; RV32IFD-NEXT: feq.d a0, fa0, fa1
787 ; RV32IFD-NEXT: beqz a0, .LBB14_2
788 ; RV32IFD-NEXT: # %bb.1: # %if.else
790 ; RV32IFD-NEXT: .LBB14_2: # %if.then
791 ; RV32IFD-NEXT: addi sp, sp, -16
792 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
793 ; RV32IFD-NEXT: call abort
795 ; RV64IFD-LABEL: br_fcmp_une:
797 ; RV64IFD-NEXT: feq.d a0, fa0, fa1
798 ; RV64IFD-NEXT: beqz a0, .LBB14_2
799 ; RV64IFD-NEXT: # %bb.1: # %if.else
801 ; RV64IFD-NEXT: .LBB14_2: # %if.then
802 ; RV64IFD-NEXT: addi sp, sp, -16
803 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
804 ; RV64IFD-NEXT: call abort
806 ; RV32IZFINXZDINX-LABEL: br_fcmp_une:
807 ; RV32IZFINXZDINX: # %bb.0:
808 ; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a2
809 ; RV32IZFINXZDINX-NEXT: beqz a0, .LBB14_2
810 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
811 ; RV32IZFINXZDINX-NEXT: ret
812 ; RV32IZFINXZDINX-NEXT: .LBB14_2: # %if.then
813 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
814 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
815 ; RV32IZFINXZDINX-NEXT: call abort
817 ; RV64IZFINXZDINX-LABEL: br_fcmp_une:
818 ; RV64IZFINXZDINX: # %bb.0:
819 ; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a1
820 ; RV64IZFINXZDINX-NEXT: beqz a0, .LBB14_2
821 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
822 ; RV64IZFINXZDINX-NEXT: ret
823 ; RV64IZFINXZDINX-NEXT: .LBB14_2: # %if.then
824 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
825 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
826 ; RV64IZFINXZDINX-NEXT: call abort
827 %1 = fcmp une double %a, %b
828 br i1 %1, label %if.then, label %if.else
832 tail call void @abort()
836 define void @br_fcmp_uno(double %a, double %b) nounwind {
837 ; RV32IFD-LABEL: br_fcmp_uno:
839 ; RV32IFD-NEXT: feq.d a0, fa1, fa1
840 ; RV32IFD-NEXT: feq.d a1, fa0, fa0
841 ; RV32IFD-NEXT: and a0, a1, a0
842 ; RV32IFD-NEXT: beqz a0, .LBB15_2
843 ; RV32IFD-NEXT: # %bb.1: # %if.else
845 ; RV32IFD-NEXT: .LBB15_2: # %if.then
846 ; RV32IFD-NEXT: addi sp, sp, -16
847 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
848 ; RV32IFD-NEXT: call abort
850 ; RV64IFD-LABEL: br_fcmp_uno:
852 ; RV64IFD-NEXT: feq.d a0, fa1, fa1
853 ; RV64IFD-NEXT: feq.d a1, fa0, fa0
854 ; RV64IFD-NEXT: and a0, a1, a0
855 ; RV64IFD-NEXT: beqz a0, .LBB15_2
856 ; RV64IFD-NEXT: # %bb.1: # %if.else
858 ; RV64IFD-NEXT: .LBB15_2: # %if.then
859 ; RV64IFD-NEXT: addi sp, sp, -16
860 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
861 ; RV64IFD-NEXT: call abort
863 ; RV32IZFINXZDINX-LABEL: br_fcmp_uno:
864 ; RV32IZFINXZDINX: # %bb.0:
865 ; RV32IZFINXZDINX-NEXT: feq.d a2, a2, a2
866 ; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a0
867 ; RV32IZFINXZDINX-NEXT: and a0, a0, a2
868 ; RV32IZFINXZDINX-NEXT: beqz a0, .LBB15_2
869 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
870 ; RV32IZFINXZDINX-NEXT: ret
871 ; RV32IZFINXZDINX-NEXT: .LBB15_2: # %if.then
872 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
873 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
874 ; RV32IZFINXZDINX-NEXT: call abort
876 ; RV64IZFINXZDINX-LABEL: br_fcmp_uno:
877 ; RV64IZFINXZDINX: # %bb.0:
878 ; RV64IZFINXZDINX-NEXT: feq.d a1, a1, a1
879 ; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a0
880 ; RV64IZFINXZDINX-NEXT: and a0, a0, a1
881 ; RV64IZFINXZDINX-NEXT: beqz a0, .LBB15_2
882 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
883 ; RV64IZFINXZDINX-NEXT: ret
884 ; RV64IZFINXZDINX-NEXT: .LBB15_2: # %if.then
885 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
886 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
887 ; RV64IZFINXZDINX-NEXT: call abort
888 %1 = fcmp uno double %a, %b
889 br i1 %1, label %if.then, label %if.else
893 tail call void @abort()
897 define void @br_fcmp_true(double %a, double %b) nounwind {
898 ; RV32IFD-LABEL: br_fcmp_true:
900 ; RV32IFD-NEXT: li a0, 1
901 ; RV32IFD-NEXT: bnez a0, .LBB16_2
902 ; RV32IFD-NEXT: # %bb.1: # %if.else
904 ; RV32IFD-NEXT: .LBB16_2: # %if.then
905 ; RV32IFD-NEXT: addi sp, sp, -16
906 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
907 ; RV32IFD-NEXT: call abort
909 ; RV64IFD-LABEL: br_fcmp_true:
911 ; RV64IFD-NEXT: li a0, 1
912 ; RV64IFD-NEXT: bnez a0, .LBB16_2
913 ; RV64IFD-NEXT: # %bb.1: # %if.else
915 ; RV64IFD-NEXT: .LBB16_2: # %if.then
916 ; RV64IFD-NEXT: addi sp, sp, -16
917 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
918 ; RV64IFD-NEXT: call abort
920 ; RV32IZFINXZDINX-LABEL: br_fcmp_true:
921 ; RV32IZFINXZDINX: # %bb.0:
922 ; RV32IZFINXZDINX-NEXT: li a0, 1
923 ; RV32IZFINXZDINX-NEXT: bnez a0, .LBB16_2
924 ; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else
925 ; RV32IZFINXZDINX-NEXT: ret
926 ; RV32IZFINXZDINX-NEXT: .LBB16_2: # %if.then
927 ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
928 ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
929 ; RV32IZFINXZDINX-NEXT: call abort
931 ; RV64IZFINXZDINX-LABEL: br_fcmp_true:
932 ; RV64IZFINXZDINX: # %bb.0:
933 ; RV64IZFINXZDINX-NEXT: li a0, 1
934 ; RV64IZFINXZDINX-NEXT: bnez a0, .LBB16_2
935 ; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else
936 ; RV64IZFINXZDINX-NEXT: ret
937 ; RV64IZFINXZDINX-NEXT: .LBB16_2: # %if.then
938 ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
939 ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
940 ; RV64IZFINXZDINX-NEXT: call abort
941 %1 = fcmp true double %a, %b
942 br i1 %1, label %if.then, label %if.else
946 tail call void @abort()