Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / double-br-fcmp.ll
blob035228e73c707148cab6a9e669b35be68ca5060d
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
11 declare void @abort()
12 declare void @exit(i32)
14 define void @br_fcmp_false(double %a, double %b) nounwind {
15 ; RV32IFD-LABEL: br_fcmp_false:
16 ; RV32IFD:       # %bb.0:
17 ; RV32IFD-NEXT:    li a0, 1
18 ; RV32IFD-NEXT:    bnez a0, .LBB0_2
19 ; RV32IFD-NEXT:  # %bb.1: # %if.then
20 ; RV32IFD-NEXT:    ret
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:
27 ; RV64IFD:       # %bb.0:
28 ; RV64IFD-NEXT:    li a0, 1
29 ; RV64IFD-NEXT:    bnez a0, .LBB0_2
30 ; RV64IFD-NEXT:  # %bb.1: # %if.then
31 ; RV64IFD-NEXT:    ret
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
60 if.then:
61   ret void
62 if.else:
63   tail call void @abort()
64   unreachable
67 define void @br_fcmp_oeq(double %a, double %b) nounwind {
68 ; RV32IFD-LABEL: br_fcmp_oeq:
69 ; RV32IFD:       # %bb.0:
70 ; RV32IFD-NEXT:    feq.d a0, fa0, fa1
71 ; RV32IFD-NEXT:    bnez a0, .LBB1_2
72 ; RV32IFD-NEXT:  # %bb.1: # %if.else
73 ; RV32IFD-NEXT:    ret
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:
80 ; RV64IFD:       # %bb.0:
81 ; RV64IFD-NEXT:    feq.d a0, fa0, fa1
82 ; RV64IFD-NEXT:    bnez a0, .LBB1_2
83 ; RV64IFD-NEXT:  # %bb.1: # %if.else
84 ; RV64IFD-NEXT:    ret
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
113 if.else:
114   ret void
115 if.then:
116   tail call void @abort()
117   unreachable
120 ; TODO: generated code quality for this is very poor due to
121 ; DAGCombiner::visitXOR converting the legal setoeq to setune, which requires
122 ; expansion.
123 define void @br_fcmp_oeq_alt(double %a, double %b) nounwind {
124 ; RV32IFD-LABEL: br_fcmp_oeq_alt:
125 ; RV32IFD:       # %bb.0:
126 ; RV32IFD-NEXT:    feq.d a0, fa0, fa1
127 ; RV32IFD-NEXT:    bnez a0, .LBB2_2
128 ; RV32IFD-NEXT:  # %bb.1: # %if.else
129 ; RV32IFD-NEXT:    ret
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:
136 ; RV64IFD:       # %bb.0:
137 ; RV64IFD-NEXT:    feq.d a0, fa0, fa1
138 ; RV64IFD-NEXT:    bnez a0, .LBB2_2
139 ; RV64IFD-NEXT:  # %bb.1: # %if.else
140 ; RV64IFD-NEXT:    ret
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
169 if.then:
170   tail call void @abort()
171   unreachable
172 if.else:
173   ret void
176 define void @br_fcmp_ogt(double %a, double %b) nounwind {
177 ; RV32IFD-LABEL: br_fcmp_ogt:
178 ; RV32IFD:       # %bb.0:
179 ; RV32IFD-NEXT:    flt.d a0, fa1, fa0
180 ; RV32IFD-NEXT:    bnez a0, .LBB3_2
181 ; RV32IFD-NEXT:  # %bb.1: # %if.else
182 ; RV32IFD-NEXT:    ret
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:
189 ; RV64IFD:       # %bb.0:
190 ; RV64IFD-NEXT:    flt.d a0, fa1, fa0
191 ; RV64IFD-NEXT:    bnez a0, .LBB3_2
192 ; RV64IFD-NEXT:  # %bb.1: # %if.else
193 ; RV64IFD-NEXT:    ret
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
222 if.else:
223   ret void
224 if.then:
225   tail call void @abort()
226   unreachable
229 define void @br_fcmp_oge(double %a, double %b) nounwind {
230 ; RV32IFD-LABEL: br_fcmp_oge:
231 ; RV32IFD:       # %bb.0:
232 ; RV32IFD-NEXT:    fle.d a0, fa1, fa0
233 ; RV32IFD-NEXT:    bnez a0, .LBB4_2
234 ; RV32IFD-NEXT:  # %bb.1: # %if.else
235 ; RV32IFD-NEXT:    ret
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:
242 ; RV64IFD:       # %bb.0:
243 ; RV64IFD-NEXT:    fle.d a0, fa1, fa0
244 ; RV64IFD-NEXT:    bnez a0, .LBB4_2
245 ; RV64IFD-NEXT:  # %bb.1: # %if.else
246 ; RV64IFD-NEXT:    ret
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
275 if.else:
276   ret void
277 if.then:
278   tail call void @abort()
279   unreachable
282 define void @br_fcmp_olt(double %a, double %b) nounwind {
283 ; RV32IFD-LABEL: br_fcmp_olt:
284 ; RV32IFD:       # %bb.0:
285 ; RV32IFD-NEXT:    flt.d a0, fa0, fa1
286 ; RV32IFD-NEXT:    bnez a0, .LBB5_2
287 ; RV32IFD-NEXT:  # %bb.1: # %if.else
288 ; RV32IFD-NEXT:    ret
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:
295 ; RV64IFD:       # %bb.0:
296 ; RV64IFD-NEXT:    flt.d a0, fa0, fa1
297 ; RV64IFD-NEXT:    bnez a0, .LBB5_2
298 ; RV64IFD-NEXT:  # %bb.1: # %if.else
299 ; RV64IFD-NEXT:    ret
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
328 if.else:
329   ret void
330 if.then:
331   tail call void @abort()
332   unreachable
335 define void @br_fcmp_ole(double %a, double %b) nounwind {
336 ; RV32IFD-LABEL: br_fcmp_ole:
337 ; RV32IFD:       # %bb.0:
338 ; RV32IFD-NEXT:    fle.d a0, fa0, fa1
339 ; RV32IFD-NEXT:    bnez a0, .LBB6_2
340 ; RV32IFD-NEXT:  # %bb.1: # %if.else
341 ; RV32IFD-NEXT:    ret
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:
348 ; RV64IFD:       # %bb.0:
349 ; RV64IFD-NEXT:    fle.d a0, fa0, fa1
350 ; RV64IFD-NEXT:    bnez a0, .LBB6_2
351 ; RV64IFD-NEXT:  # %bb.1: # %if.else
352 ; RV64IFD-NEXT:    ret
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
381 if.else:
382   ret void
383 if.then:
384   tail call void @abort()
385   unreachable
388 define void @br_fcmp_one(double %a, double %b) nounwind {
389 ; RV32IFD-LABEL: br_fcmp_one:
390 ; RV32IFD:       # %bb.0:
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
396 ; RV32IFD-NEXT:    ret
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:
403 ; RV64IFD:       # %bb.0:
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
409 ; RV64IFD-NEXT:    ret
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
442 if.else:
443   ret void
444 if.then:
445   tail call void @abort()
446   unreachable
449 define void @br_fcmp_ord(double %a, double %b) nounwind {
450 ; RV32IFD-LABEL: br_fcmp_ord:
451 ; RV32IFD:       # %bb.0:
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
457 ; RV32IFD-NEXT:    ret
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:
464 ; RV64IFD:       # %bb.0:
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
470 ; RV64IFD-NEXT:    ret
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
503 if.else:
504   ret void
505 if.then:
506   tail call void @abort()
507   unreachable
510 define void @br_fcmp_ueq(double %a, double %b) nounwind {
511 ; RV32IFD-LABEL: br_fcmp_ueq:
512 ; RV32IFD:       # %bb.0:
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
518 ; RV32IFD-NEXT:    ret
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:
525 ; RV64IFD:       # %bb.0:
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
531 ; RV64IFD-NEXT:    ret
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
564 if.else:
565   ret void
566 if.then:
567   tail call void @abort()
568   unreachable
571 define void @br_fcmp_ugt(double %a, double %b) nounwind {
572 ; RV32IFD-LABEL: br_fcmp_ugt:
573 ; RV32IFD:       # %bb.0:
574 ; RV32IFD-NEXT:    fle.d a0, fa0, fa1
575 ; RV32IFD-NEXT:    beqz a0, .LBB10_2
576 ; RV32IFD-NEXT:  # %bb.1: # %if.else
577 ; RV32IFD-NEXT:    ret
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:
584 ; RV64IFD:       # %bb.0:
585 ; RV64IFD-NEXT:    fle.d a0, fa0, fa1
586 ; RV64IFD-NEXT:    beqz a0, .LBB10_2
587 ; RV64IFD-NEXT:  # %bb.1: # %if.else
588 ; RV64IFD-NEXT:    ret
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
617 if.else:
618   ret void
619 if.then:
620   tail call void @abort()
621   unreachable
624 define void @br_fcmp_uge(double %a, double %b) nounwind {
625 ; RV32IFD-LABEL: br_fcmp_uge:
626 ; RV32IFD:       # %bb.0:
627 ; RV32IFD-NEXT:    flt.d a0, fa0, fa1
628 ; RV32IFD-NEXT:    beqz a0, .LBB11_2
629 ; RV32IFD-NEXT:  # %bb.1: # %if.else
630 ; RV32IFD-NEXT:    ret
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:
637 ; RV64IFD:       # %bb.0:
638 ; RV64IFD-NEXT:    flt.d a0, fa0, fa1
639 ; RV64IFD-NEXT:    beqz a0, .LBB11_2
640 ; RV64IFD-NEXT:  # %bb.1: # %if.else
641 ; RV64IFD-NEXT:    ret
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
670 if.else:
671   ret void
672 if.then:
673   tail call void @abort()
674   unreachable
677 define void @br_fcmp_ult(double %a, double %b) nounwind {
678 ; RV32IFD-LABEL: br_fcmp_ult:
679 ; RV32IFD:       # %bb.0:
680 ; RV32IFD-NEXT:    fle.d a0, fa1, fa0
681 ; RV32IFD-NEXT:    beqz a0, .LBB12_2
682 ; RV32IFD-NEXT:  # %bb.1: # %if.else
683 ; RV32IFD-NEXT:    ret
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:
690 ; RV64IFD:       # %bb.0:
691 ; RV64IFD-NEXT:    fle.d a0, fa1, fa0
692 ; RV64IFD-NEXT:    beqz a0, .LBB12_2
693 ; RV64IFD-NEXT:  # %bb.1: # %if.else
694 ; RV64IFD-NEXT:    ret
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
723 if.else:
724   ret void
725 if.then:
726   tail call void @abort()
727   unreachable
730 define void @br_fcmp_ule(double %a, double %b) nounwind {
731 ; RV32IFD-LABEL: br_fcmp_ule:
732 ; RV32IFD:       # %bb.0:
733 ; RV32IFD-NEXT:    flt.d a0, fa1, fa0
734 ; RV32IFD-NEXT:    beqz a0, .LBB13_2
735 ; RV32IFD-NEXT:  # %bb.1: # %if.else
736 ; RV32IFD-NEXT:    ret
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:
743 ; RV64IFD:       # %bb.0:
744 ; RV64IFD-NEXT:    flt.d a0, fa1, fa0
745 ; RV64IFD-NEXT:    beqz a0, .LBB13_2
746 ; RV64IFD-NEXT:  # %bb.1: # %if.else
747 ; RV64IFD-NEXT:    ret
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
776 if.else:
777   ret void
778 if.then:
779   tail call void @abort()
780   unreachable
783 define void @br_fcmp_une(double %a, double %b) nounwind {
784 ; RV32IFD-LABEL: br_fcmp_une:
785 ; RV32IFD:       # %bb.0:
786 ; RV32IFD-NEXT:    feq.d a0, fa0, fa1
787 ; RV32IFD-NEXT:    beqz a0, .LBB14_2
788 ; RV32IFD-NEXT:  # %bb.1: # %if.else
789 ; RV32IFD-NEXT:    ret
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:
796 ; RV64IFD:       # %bb.0:
797 ; RV64IFD-NEXT:    feq.d a0, fa0, fa1
798 ; RV64IFD-NEXT:    beqz a0, .LBB14_2
799 ; RV64IFD-NEXT:  # %bb.1: # %if.else
800 ; RV64IFD-NEXT:    ret
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
829 if.else:
830   ret void
831 if.then:
832   tail call void @abort()
833   unreachable
836 define void @br_fcmp_uno(double %a, double %b) nounwind {
837 ; RV32IFD-LABEL: br_fcmp_uno:
838 ; RV32IFD:       # %bb.0:
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
844 ; RV32IFD-NEXT:    ret
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:
851 ; RV64IFD:       # %bb.0:
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
857 ; RV64IFD-NEXT:    ret
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
890 if.else:
891   ret void
892 if.then:
893   tail call void @abort()
894   unreachable
897 define void @br_fcmp_true(double %a, double %b) nounwind {
898 ; RV32IFD-LABEL: br_fcmp_true:
899 ; RV32IFD:       # %bb.0:
900 ; RV32IFD-NEXT:    li a0, 1
901 ; RV32IFD-NEXT:    bnez a0, .LBB16_2
902 ; RV32IFD-NEXT:  # %bb.1: # %if.else
903 ; RV32IFD-NEXT:    ret
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:
910 ; RV64IFD:       # %bb.0:
911 ; RV64IFD-NEXT:    li a0, 1
912 ; RV64IFD-NEXT:    bnez a0, .LBB16_2
913 ; RV64IFD-NEXT:  # %bb.1: # %if.else
914 ; RV64IFD-NEXT:    ret
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
943 if.else:
944   ret void
945 if.then:
946   tail call void @abort()
947   unreachable