1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs < %s \
3 ; RUN: -target-abi=ilp32f | FileCheck -check-prefix=RV32IF %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs < %s \
5 ; RUN: -target-abi=lp64f | FileCheck -check-prefix=RV64IF %s
8 declare void @exit(i32)
9 declare float @dummy(float)
11 define void @br_fcmp_false(float %a, float %b) nounwind {
12 ; RV32IF-LABEL: br_fcmp_false:
14 ; RV32IF-NEXT: li a0, 1
15 ; RV32IF-NEXT: bnez a0, .LBB0_2
16 ; RV32IF-NEXT: # %bb.1: # %if.then
18 ; RV32IF-NEXT: .LBB0_2: # %if.else
19 ; RV32IF-NEXT: addi sp, sp, -16
20 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
21 ; RV32IF-NEXT: call abort@plt
23 ; RV64IF-LABEL: br_fcmp_false:
25 ; RV64IF-NEXT: li a0, 1
26 ; RV64IF-NEXT: bnez a0, .LBB0_2
27 ; RV64IF-NEXT: # %bb.1: # %if.then
29 ; RV64IF-NEXT: .LBB0_2: # %if.else
30 ; RV64IF-NEXT: addi sp, sp, -16
31 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
32 ; RV64IF-NEXT: call abort@plt
33 %1 = fcmp false float %a, %b
34 br i1 %1, label %if.then, label %if.else
38 tail call void @abort()
42 define void @br_fcmp_oeq(float %a, float %b) nounwind {
43 ; RV32IF-LABEL: br_fcmp_oeq:
45 ; RV32IF-NEXT: feq.s a0, fa0, fa1
46 ; RV32IF-NEXT: bnez a0, .LBB1_2
47 ; RV32IF-NEXT: # %bb.1: # %if.else
49 ; RV32IF-NEXT: .LBB1_2: # %if.then
50 ; RV32IF-NEXT: addi sp, sp, -16
51 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
52 ; RV32IF-NEXT: call abort@plt
54 ; RV64IF-LABEL: br_fcmp_oeq:
56 ; RV64IF-NEXT: feq.s a0, fa0, fa1
57 ; RV64IF-NEXT: bnez a0, .LBB1_2
58 ; RV64IF-NEXT: # %bb.1: # %if.else
60 ; RV64IF-NEXT: .LBB1_2: # %if.then
61 ; RV64IF-NEXT: addi sp, sp, -16
62 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
63 ; RV64IF-NEXT: call abort@plt
64 %1 = fcmp oeq float %a, %b
65 br i1 %1, label %if.then, label %if.else
69 tail call void @abort()
73 ; TODO: generated code quality for this is very poor due to
74 ; DAGCombiner::visitXOR converting the legal setoeq to setune, which requires
76 define void @br_fcmp_oeq_alt(float %a, float %b) nounwind {
77 ; RV32IF-LABEL: br_fcmp_oeq_alt:
79 ; RV32IF-NEXT: feq.s a0, fa0, fa1
80 ; RV32IF-NEXT: bnez a0, .LBB2_2
81 ; RV32IF-NEXT: # %bb.1: # %if.else
83 ; RV32IF-NEXT: .LBB2_2: # %if.then
84 ; RV32IF-NEXT: addi sp, sp, -16
85 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
86 ; RV32IF-NEXT: call abort@plt
88 ; RV64IF-LABEL: br_fcmp_oeq_alt:
90 ; RV64IF-NEXT: feq.s a0, fa0, fa1
91 ; RV64IF-NEXT: bnez a0, .LBB2_2
92 ; RV64IF-NEXT: # %bb.1: # %if.else
94 ; RV64IF-NEXT: .LBB2_2: # %if.then
95 ; RV64IF-NEXT: addi sp, sp, -16
96 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
97 ; RV64IF-NEXT: call abort@plt
98 %1 = fcmp oeq float %a, %b
99 br i1 %1, label %if.then, label %if.else
101 tail call void @abort()
107 define void @br_fcmp_ogt(float %a, float %b) nounwind {
108 ; RV32IF-LABEL: br_fcmp_ogt:
110 ; RV32IF-NEXT: flt.s a0, fa1, fa0
111 ; RV32IF-NEXT: bnez a0, .LBB3_2
112 ; RV32IF-NEXT: # %bb.1: # %if.else
114 ; RV32IF-NEXT: .LBB3_2: # %if.then
115 ; RV32IF-NEXT: addi sp, sp, -16
116 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
117 ; RV32IF-NEXT: call abort@plt
119 ; RV64IF-LABEL: br_fcmp_ogt:
121 ; RV64IF-NEXT: flt.s a0, fa1, fa0
122 ; RV64IF-NEXT: bnez a0, .LBB3_2
123 ; RV64IF-NEXT: # %bb.1: # %if.else
125 ; RV64IF-NEXT: .LBB3_2: # %if.then
126 ; RV64IF-NEXT: addi sp, sp, -16
127 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
128 ; RV64IF-NEXT: call abort@plt
129 %1 = fcmp ogt float %a, %b
130 br i1 %1, label %if.then, label %if.else
134 tail call void @abort()
138 define void @br_fcmp_oge(float %a, float %b) nounwind {
139 ; RV32IF-LABEL: br_fcmp_oge:
141 ; RV32IF-NEXT: fle.s a0, fa1, fa0
142 ; RV32IF-NEXT: bnez a0, .LBB4_2
143 ; RV32IF-NEXT: # %bb.1: # %if.else
145 ; RV32IF-NEXT: .LBB4_2: # %if.then
146 ; RV32IF-NEXT: addi sp, sp, -16
147 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
148 ; RV32IF-NEXT: call abort@plt
150 ; RV64IF-LABEL: br_fcmp_oge:
152 ; RV64IF-NEXT: fle.s a0, fa1, fa0
153 ; RV64IF-NEXT: bnez a0, .LBB4_2
154 ; RV64IF-NEXT: # %bb.1: # %if.else
156 ; RV64IF-NEXT: .LBB4_2: # %if.then
157 ; RV64IF-NEXT: addi sp, sp, -16
158 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
159 ; RV64IF-NEXT: call abort@plt
160 %1 = fcmp oge float %a, %b
161 br i1 %1, label %if.then, label %if.else
165 tail call void @abort()
169 define void @br_fcmp_olt(float %a, float %b) nounwind {
170 ; RV32IF-LABEL: br_fcmp_olt:
172 ; RV32IF-NEXT: flt.s a0, fa0, fa1
173 ; RV32IF-NEXT: bnez a0, .LBB5_2
174 ; RV32IF-NEXT: # %bb.1: # %if.else
176 ; RV32IF-NEXT: .LBB5_2: # %if.then
177 ; RV32IF-NEXT: addi sp, sp, -16
178 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
179 ; RV32IF-NEXT: call abort@plt
181 ; RV64IF-LABEL: br_fcmp_olt:
183 ; RV64IF-NEXT: flt.s a0, fa0, fa1
184 ; RV64IF-NEXT: bnez a0, .LBB5_2
185 ; RV64IF-NEXT: # %bb.1: # %if.else
187 ; RV64IF-NEXT: .LBB5_2: # %if.then
188 ; RV64IF-NEXT: addi sp, sp, -16
189 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
190 ; RV64IF-NEXT: call abort@plt
191 %1 = fcmp olt float %a, %b
192 br i1 %1, label %if.then, label %if.else
196 tail call void @abort()
200 define void @br_fcmp_ole(float %a, float %b) nounwind {
201 ; RV32IF-LABEL: br_fcmp_ole:
203 ; RV32IF-NEXT: fle.s a0, fa0, fa1
204 ; RV32IF-NEXT: bnez a0, .LBB6_2
205 ; RV32IF-NEXT: # %bb.1: # %if.else
207 ; RV32IF-NEXT: .LBB6_2: # %if.then
208 ; RV32IF-NEXT: addi sp, sp, -16
209 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
210 ; RV32IF-NEXT: call abort@plt
212 ; RV64IF-LABEL: br_fcmp_ole:
214 ; RV64IF-NEXT: fle.s a0, fa0, fa1
215 ; RV64IF-NEXT: bnez a0, .LBB6_2
216 ; RV64IF-NEXT: # %bb.1: # %if.else
218 ; RV64IF-NEXT: .LBB6_2: # %if.then
219 ; RV64IF-NEXT: addi sp, sp, -16
220 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
221 ; RV64IF-NEXT: call abort@plt
222 %1 = fcmp ole float %a, %b
223 br i1 %1, label %if.then, label %if.else
227 tail call void @abort()
231 define void @br_fcmp_one(float %a, float %b) nounwind {
232 ; RV32IF-LABEL: br_fcmp_one:
234 ; RV32IF-NEXT: flt.s a0, fa0, fa1
235 ; RV32IF-NEXT: flt.s a1, fa1, fa0
236 ; RV32IF-NEXT: or a0, a1, a0
237 ; RV32IF-NEXT: bnez a0, .LBB7_2
238 ; RV32IF-NEXT: # %bb.1: # %if.else
240 ; RV32IF-NEXT: .LBB7_2: # %if.then
241 ; RV32IF-NEXT: addi sp, sp, -16
242 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
243 ; RV32IF-NEXT: call abort@plt
245 ; RV64IF-LABEL: br_fcmp_one:
247 ; RV64IF-NEXT: flt.s a0, fa0, fa1
248 ; RV64IF-NEXT: flt.s a1, fa1, fa0
249 ; RV64IF-NEXT: or a0, a1, a0
250 ; RV64IF-NEXT: bnez a0, .LBB7_2
251 ; RV64IF-NEXT: # %bb.1: # %if.else
253 ; RV64IF-NEXT: .LBB7_2: # %if.then
254 ; RV64IF-NEXT: addi sp, sp, -16
255 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
256 ; RV64IF-NEXT: call abort@plt
257 %1 = fcmp one float %a, %b
258 br i1 %1, label %if.then, label %if.else
262 tail call void @abort()
266 define void @br_fcmp_ord(float %a, float %b) nounwind {
267 ; RV32IF-LABEL: br_fcmp_ord:
269 ; RV32IF-NEXT: feq.s a0, fa1, fa1
270 ; RV32IF-NEXT: feq.s a1, fa0, fa0
271 ; RV32IF-NEXT: and a0, a1, a0
272 ; RV32IF-NEXT: bnez a0, .LBB8_2
273 ; RV32IF-NEXT: # %bb.1: # %if.else
275 ; RV32IF-NEXT: .LBB8_2: # %if.then
276 ; RV32IF-NEXT: addi sp, sp, -16
277 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
278 ; RV32IF-NEXT: call abort@plt
280 ; RV64IF-LABEL: br_fcmp_ord:
282 ; RV64IF-NEXT: feq.s a0, fa1, fa1
283 ; RV64IF-NEXT: feq.s a1, fa0, fa0
284 ; RV64IF-NEXT: and a0, a1, a0
285 ; RV64IF-NEXT: bnez a0, .LBB8_2
286 ; RV64IF-NEXT: # %bb.1: # %if.else
288 ; RV64IF-NEXT: .LBB8_2: # %if.then
289 ; RV64IF-NEXT: addi sp, sp, -16
290 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
291 ; RV64IF-NEXT: call abort@plt
292 %1 = fcmp ord float %a, %b
293 br i1 %1, label %if.then, label %if.else
297 tail call void @abort()
301 define void @br_fcmp_ueq(float %a, float %b) nounwind {
302 ; RV32IF-LABEL: br_fcmp_ueq:
304 ; RV32IF-NEXT: flt.s a0, fa0, fa1
305 ; RV32IF-NEXT: flt.s a1, fa1, fa0
306 ; RV32IF-NEXT: or a0, a1, a0
307 ; RV32IF-NEXT: beqz a0, .LBB9_2
308 ; RV32IF-NEXT: # %bb.1: # %if.else
310 ; RV32IF-NEXT: .LBB9_2: # %if.then
311 ; RV32IF-NEXT: addi sp, sp, -16
312 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
313 ; RV32IF-NEXT: call abort@plt
315 ; RV64IF-LABEL: br_fcmp_ueq:
317 ; RV64IF-NEXT: flt.s a0, fa0, fa1
318 ; RV64IF-NEXT: flt.s a1, fa1, fa0
319 ; RV64IF-NEXT: or a0, a1, a0
320 ; RV64IF-NEXT: beqz a0, .LBB9_2
321 ; RV64IF-NEXT: # %bb.1: # %if.else
323 ; RV64IF-NEXT: .LBB9_2: # %if.then
324 ; RV64IF-NEXT: addi sp, sp, -16
325 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
326 ; RV64IF-NEXT: call abort@plt
327 %1 = fcmp ueq float %a, %b
328 br i1 %1, label %if.then, label %if.else
332 tail call void @abort()
336 define void @br_fcmp_ugt(float %a, float %b) nounwind {
337 ; RV32IF-LABEL: br_fcmp_ugt:
339 ; RV32IF-NEXT: fle.s a0, fa0, fa1
340 ; RV32IF-NEXT: beqz a0, .LBB10_2
341 ; RV32IF-NEXT: # %bb.1: # %if.else
343 ; RV32IF-NEXT: .LBB10_2: # %if.then
344 ; RV32IF-NEXT: addi sp, sp, -16
345 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
346 ; RV32IF-NEXT: call abort@plt
348 ; RV64IF-LABEL: br_fcmp_ugt:
350 ; RV64IF-NEXT: fle.s a0, fa0, fa1
351 ; RV64IF-NEXT: beqz a0, .LBB10_2
352 ; RV64IF-NEXT: # %bb.1: # %if.else
354 ; RV64IF-NEXT: .LBB10_2: # %if.then
355 ; RV64IF-NEXT: addi sp, sp, -16
356 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
357 ; RV64IF-NEXT: call abort@plt
358 %1 = fcmp ugt float %a, %b
359 br i1 %1, label %if.then, label %if.else
363 tail call void @abort()
367 define void @br_fcmp_uge(float %a, float %b) nounwind {
368 ; RV32IF-LABEL: br_fcmp_uge:
370 ; RV32IF-NEXT: flt.s a0, fa0, fa1
371 ; RV32IF-NEXT: beqz a0, .LBB11_2
372 ; RV32IF-NEXT: # %bb.1: # %if.else
374 ; RV32IF-NEXT: .LBB11_2: # %if.then
375 ; RV32IF-NEXT: addi sp, sp, -16
376 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
377 ; RV32IF-NEXT: call abort@plt
379 ; RV64IF-LABEL: br_fcmp_uge:
381 ; RV64IF-NEXT: flt.s a0, fa0, fa1
382 ; RV64IF-NEXT: beqz a0, .LBB11_2
383 ; RV64IF-NEXT: # %bb.1: # %if.else
385 ; RV64IF-NEXT: .LBB11_2: # %if.then
386 ; RV64IF-NEXT: addi sp, sp, -16
387 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
388 ; RV64IF-NEXT: call abort@plt
389 %1 = fcmp uge float %a, %b
390 br i1 %1, label %if.then, label %if.else
394 tail call void @abort()
398 define void @br_fcmp_ult(float %a, float %b) nounwind {
399 ; RV32IF-LABEL: br_fcmp_ult:
401 ; RV32IF-NEXT: fle.s a0, fa1, fa0
402 ; RV32IF-NEXT: beqz a0, .LBB12_2
403 ; RV32IF-NEXT: # %bb.1: # %if.else
405 ; RV32IF-NEXT: .LBB12_2: # %if.then
406 ; RV32IF-NEXT: addi sp, sp, -16
407 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
408 ; RV32IF-NEXT: call abort@plt
410 ; RV64IF-LABEL: br_fcmp_ult:
412 ; RV64IF-NEXT: fle.s a0, fa1, fa0
413 ; RV64IF-NEXT: beqz a0, .LBB12_2
414 ; RV64IF-NEXT: # %bb.1: # %if.else
416 ; RV64IF-NEXT: .LBB12_2: # %if.then
417 ; RV64IF-NEXT: addi sp, sp, -16
418 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
419 ; RV64IF-NEXT: call abort@plt
420 %1 = fcmp ult float %a, %b
421 br i1 %1, label %if.then, label %if.else
425 tail call void @abort()
429 define void @br_fcmp_ule(float %a, float %b) nounwind {
430 ; RV32IF-LABEL: br_fcmp_ule:
432 ; RV32IF-NEXT: flt.s a0, fa1, fa0
433 ; RV32IF-NEXT: beqz a0, .LBB13_2
434 ; RV32IF-NEXT: # %bb.1: # %if.else
436 ; RV32IF-NEXT: .LBB13_2: # %if.then
437 ; RV32IF-NEXT: addi sp, sp, -16
438 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
439 ; RV32IF-NEXT: call abort@plt
441 ; RV64IF-LABEL: br_fcmp_ule:
443 ; RV64IF-NEXT: flt.s a0, fa1, fa0
444 ; RV64IF-NEXT: beqz a0, .LBB13_2
445 ; RV64IF-NEXT: # %bb.1: # %if.else
447 ; RV64IF-NEXT: .LBB13_2: # %if.then
448 ; RV64IF-NEXT: addi sp, sp, -16
449 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
450 ; RV64IF-NEXT: call abort@plt
451 %1 = fcmp ule float %a, %b
452 br i1 %1, label %if.then, label %if.else
456 tail call void @abort()
460 define void @br_fcmp_une(float %a, float %b) nounwind {
461 ; RV32IF-LABEL: br_fcmp_une:
463 ; RV32IF-NEXT: feq.s a0, fa0, fa1
464 ; RV32IF-NEXT: beqz a0, .LBB14_2
465 ; RV32IF-NEXT: # %bb.1: # %if.else
467 ; RV32IF-NEXT: .LBB14_2: # %if.then
468 ; RV32IF-NEXT: addi sp, sp, -16
469 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
470 ; RV32IF-NEXT: call abort@plt
472 ; RV64IF-LABEL: br_fcmp_une:
474 ; RV64IF-NEXT: feq.s a0, fa0, fa1
475 ; RV64IF-NEXT: beqz a0, .LBB14_2
476 ; RV64IF-NEXT: # %bb.1: # %if.else
478 ; RV64IF-NEXT: .LBB14_2: # %if.then
479 ; RV64IF-NEXT: addi sp, sp, -16
480 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
481 ; RV64IF-NEXT: call abort@plt
482 %1 = fcmp une float %a, %b
483 br i1 %1, label %if.then, label %if.else
487 tail call void @abort()
491 define void @br_fcmp_uno(float %a, float %b) nounwind {
492 ; RV32IF-LABEL: br_fcmp_uno:
494 ; RV32IF-NEXT: feq.s a0, fa1, fa1
495 ; RV32IF-NEXT: feq.s a1, fa0, fa0
496 ; RV32IF-NEXT: and a0, a1, a0
497 ; RV32IF-NEXT: beqz a0, .LBB15_2
498 ; RV32IF-NEXT: # %bb.1: # %if.else
500 ; RV32IF-NEXT: .LBB15_2: # %if.then
501 ; RV32IF-NEXT: addi sp, sp, -16
502 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
503 ; RV32IF-NEXT: call abort@plt
505 ; RV64IF-LABEL: br_fcmp_uno:
507 ; RV64IF-NEXT: feq.s a0, fa1, fa1
508 ; RV64IF-NEXT: feq.s a1, fa0, fa0
509 ; RV64IF-NEXT: and a0, a1, a0
510 ; RV64IF-NEXT: beqz a0, .LBB15_2
511 ; RV64IF-NEXT: # %bb.1: # %if.else
513 ; RV64IF-NEXT: .LBB15_2: # %if.then
514 ; RV64IF-NEXT: addi sp, sp, -16
515 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
516 ; RV64IF-NEXT: call abort@plt
517 %1 = fcmp uno float %a, %b
518 br i1 %1, label %if.then, label %if.else
522 tail call void @abort()
526 define void @br_fcmp_true(float %a, float %b) nounwind {
527 ; RV32IF-LABEL: br_fcmp_true:
529 ; RV32IF-NEXT: li a0, 1
530 ; RV32IF-NEXT: bnez a0, .LBB16_2
531 ; RV32IF-NEXT: # %bb.1: # %if.else
533 ; RV32IF-NEXT: .LBB16_2: # %if.then
534 ; RV32IF-NEXT: addi sp, sp, -16
535 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
536 ; RV32IF-NEXT: call abort@plt
538 ; RV64IF-LABEL: br_fcmp_true:
540 ; RV64IF-NEXT: li a0, 1
541 ; RV64IF-NEXT: bnez a0, .LBB16_2
542 ; RV64IF-NEXT: # %bb.1: # %if.else
544 ; RV64IF-NEXT: .LBB16_2: # %if.then
545 ; RV64IF-NEXT: addi sp, sp, -16
546 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
547 ; RV64IF-NEXT: call abort@plt
548 %1 = fcmp true float %a, %b
549 br i1 %1, label %if.then, label %if.else
553 tail call void @abort()
557 ; This test exists primarily to trigger RISCVInstrInfo::storeRegToStackSlot
558 ; and RISCVInstrInfo::loadRegFromStackSlot
559 define i32 @br_fcmp_store_load_stack_slot(float %a, float %b) nounwind {
560 ; RV32IF-LABEL: br_fcmp_store_load_stack_slot:
561 ; RV32IF: # %bb.0: # %entry
562 ; RV32IF-NEXT: addi sp, sp, -16
563 ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
564 ; RV32IF-NEXT: fsw fs0, 8(sp) # 4-byte Folded Spill
565 ; RV32IF-NEXT: fmv.w.x fs0, zero
566 ; RV32IF-NEXT: fmv.s fa0, fs0
567 ; RV32IF-NEXT: call dummy@plt
568 ; RV32IF-NEXT: feq.s a0, fa0, fs0
569 ; RV32IF-NEXT: beqz a0, .LBB17_3
570 ; RV32IF-NEXT: # %bb.1: # %if.end
571 ; RV32IF-NEXT: fmv.s fa0, fs0
572 ; RV32IF-NEXT: call dummy@plt
573 ; RV32IF-NEXT: feq.s a0, fa0, fs0
574 ; RV32IF-NEXT: beqz a0, .LBB17_3
575 ; RV32IF-NEXT: # %bb.2: # %if.end4
576 ; RV32IF-NEXT: li a0, 0
577 ; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
578 ; RV32IF-NEXT: flw fs0, 8(sp) # 4-byte Folded Reload
579 ; RV32IF-NEXT: addi sp, sp, 16
581 ; RV32IF-NEXT: .LBB17_3: # %if.then
582 ; RV32IF-NEXT: call abort@plt
584 ; RV64IF-LABEL: br_fcmp_store_load_stack_slot:
585 ; RV64IF: # %bb.0: # %entry
586 ; RV64IF-NEXT: addi sp, sp, -16
587 ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
588 ; RV64IF-NEXT: fsw fs0, 4(sp) # 4-byte Folded Spill
589 ; RV64IF-NEXT: fmv.w.x fs0, zero
590 ; RV64IF-NEXT: fmv.s fa0, fs0
591 ; RV64IF-NEXT: call dummy@plt
592 ; RV64IF-NEXT: feq.s a0, fa0, fs0
593 ; RV64IF-NEXT: beqz a0, .LBB17_3
594 ; RV64IF-NEXT: # %bb.1: # %if.end
595 ; RV64IF-NEXT: fmv.s fa0, fs0
596 ; RV64IF-NEXT: call dummy@plt
597 ; RV64IF-NEXT: feq.s a0, fa0, fs0
598 ; RV64IF-NEXT: beqz a0, .LBB17_3
599 ; RV64IF-NEXT: # %bb.2: # %if.end4
600 ; RV64IF-NEXT: li a0, 0
601 ; RV64IF-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
602 ; RV64IF-NEXT: flw fs0, 4(sp) # 4-byte Folded Reload
603 ; RV64IF-NEXT: addi sp, sp, 16
605 ; RV64IF-NEXT: .LBB17_3: # %if.then
606 ; RV64IF-NEXT: call abort@plt
608 %call = call float @dummy(float 0.000000e+00)
609 %cmp = fcmp une float %call, 0.000000e+00
610 br i1 %cmp, label %if.then, label %if.end
617 %call1 = call float @dummy(float 0.000000e+00)
618 %cmp2 = fcmp une float %call1, 0.000000e+00
619 br i1 %cmp2, label %if.then3, label %if.end4