xref: /llvm-project/llvm/test/CodeGen/RISCV/double-br-fcmp.ll (revision 576d81baa5cf1801bae0fd05892be34acde33c6a)
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
10
11declare void @abort()
12declare void @exit(i32)
13
14define 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
25;
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
36;
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
47;
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
60if.then:
61  ret void
62if.else:
63  tail call void @abort()
64  unreachable
65}
66
67define 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
78;
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
89;
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
100;
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
113if.else:
114  ret void
115if.then:
116  tail call void @abort()
117  unreachable
118}
119
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.
123define 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
134;
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
145;
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
156;
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
169if.then:
170  tail call void @abort()
171  unreachable
172if.else:
173  ret void
174}
175
176define 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
187;
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
198;
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
209;
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
222if.else:
223  ret void
224if.then:
225  tail call void @abort()
226  unreachable
227}
228
229define 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
240;
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
251;
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
262;
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
275if.else:
276  ret void
277if.then:
278  tail call void @abort()
279  unreachable
280}
281
282define 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
293;
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
304;
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
315;
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
328if.else:
329  ret void
330if.then:
331  tail call void @abort()
332  unreachable
333}
334
335define 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
346;
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
357;
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
368;
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
381if.else:
382  ret void
383if.then:
384  tail call void @abort()
385  unreachable
386}
387
388define 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
401;
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
414;
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
427;
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
442if.else:
443  ret void
444if.then:
445  tail call void @abort()
446  unreachable
447}
448
449define 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
462;
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
475;
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
488;
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
503if.else:
504  ret void
505if.then:
506  tail call void @abort()
507  unreachable
508}
509
510define 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
523;
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
536;
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
549;
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
564if.else:
565  ret void
566if.then:
567  tail call void @abort()
568  unreachable
569}
570
571define 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
582;
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
593;
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
604;
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
617if.else:
618  ret void
619if.then:
620  tail call void @abort()
621  unreachable
622}
623
624define 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
635;
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
646;
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
657;
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
670if.else:
671  ret void
672if.then:
673  tail call void @abort()
674  unreachable
675}
676
677define 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
688;
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
699;
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
710;
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
723if.else:
724  ret void
725if.then:
726  tail call void @abort()
727  unreachable
728}
729
730define 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
741;
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
752;
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
763;
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
776if.else:
777  ret void
778if.then:
779  tail call void @abort()
780  unreachable
781}
782
783define 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
794;
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
805;
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
816;
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
829if.else:
830  ret void
831if.then:
832  tail call void @abort()
833  unreachable
834}
835
836define 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
849;
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
862;
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
875;
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
890if.else:
891  ret void
892if.then:
893  tail call void @abort()
894  unreachable
895}
896
897define 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
908;
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
919;
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
930;
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
943if.else:
944  ret void
945if.then:
946  tail call void @abort()
947  unreachable
948}
949