xref: /llvm-project/llvm/test/CodeGen/RISCV/bfloat-br-fcmp.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc -mtriple=riscv32 -mattr=+zfbfmin -verify-machineinstrs \
3; RUN:   -target-abi ilp32f < %s | FileCheck -check-prefix=RV32IZFBFMIN %s
4; RUN: llc -mtriple=riscv64 -mattr=+zfbfmin -verify-machineinstrs \
5; RUN:   -target-abi lp64f < %s | FileCheck -check-prefix=RV64IZFBFMIN %s
6
7declare void @abort()
8declare void @exit(i32)
9declare bfloat @dummy(bfloat)
10
11define void @br_fcmp_false(bfloat %a, bfloat %b) nounwind {
12; RV32IZFBFMIN-LABEL: br_fcmp_false:
13; RV32IZFBFMIN:       # %bb.0:
14; RV32IZFBFMIN-NEXT:    li a0, 1
15; RV32IZFBFMIN-NEXT:    bnez a0, .LBB0_2
16; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.then
17; RV32IZFBFMIN-NEXT:    ret
18; RV32IZFBFMIN-NEXT:  .LBB0_2: # %if.else
19; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
20; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
21; RV32IZFBFMIN-NEXT:    call abort
22;
23; RV64IZFBFMIN-LABEL: br_fcmp_false:
24; RV64IZFBFMIN:       # %bb.0:
25; RV64IZFBFMIN-NEXT:    li a0, 1
26; RV64IZFBFMIN-NEXT:    bnez a0, .LBB0_2
27; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.then
28; RV64IZFBFMIN-NEXT:    ret
29; RV64IZFBFMIN-NEXT:  .LBB0_2: # %if.else
30; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
31; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
32; RV64IZFBFMIN-NEXT:    call abort
33  %1 = fcmp false bfloat %a, %b
34  br i1 %1, label %if.then, label %if.else
35if.then:
36  ret void
37if.else:
38  tail call void @abort()
39  unreachable
40}
41
42define void @br_fcmp_oeq(bfloat %a, bfloat %b) nounwind {
43; RV32IZFBFMIN-LABEL: br_fcmp_oeq:
44; RV32IZFBFMIN:       # %bb.0:
45; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
46; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
47; RV32IZFBFMIN-NEXT:    feq.s a0, fa4, fa5
48; RV32IZFBFMIN-NEXT:    bnez a0, .LBB1_2
49; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
50; RV32IZFBFMIN-NEXT:    ret
51; RV32IZFBFMIN-NEXT:  .LBB1_2: # %if.then
52; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
53; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
54; RV32IZFBFMIN-NEXT:    call abort
55;
56; RV64IZFBFMIN-LABEL: br_fcmp_oeq:
57; RV64IZFBFMIN:       # %bb.0:
58; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
59; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
60; RV64IZFBFMIN-NEXT:    feq.s a0, fa4, fa5
61; RV64IZFBFMIN-NEXT:    bnez a0, .LBB1_2
62; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
63; RV64IZFBFMIN-NEXT:    ret
64; RV64IZFBFMIN-NEXT:  .LBB1_2: # %if.then
65; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
66; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
67; RV64IZFBFMIN-NEXT:    call abort
68  %1 = fcmp oeq bfloat %a, %b
69  br i1 %1, label %if.then, label %if.else
70if.else:
71  ret void
72if.then:
73  tail call void @abort()
74  unreachable
75}
76
77define void @br_fcmp_oeq_alt(bfloat %a, bfloat %b) nounwind {
78; RV32IZFBFMIN-LABEL: br_fcmp_oeq_alt:
79; RV32IZFBFMIN:       # %bb.0:
80; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
81; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
82; RV32IZFBFMIN-NEXT:    feq.s a0, fa4, fa5
83; RV32IZFBFMIN-NEXT:    bnez a0, .LBB2_2
84; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
85; RV32IZFBFMIN-NEXT:    ret
86; RV32IZFBFMIN-NEXT:  .LBB2_2: # %if.then
87; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
88; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
89; RV32IZFBFMIN-NEXT:    call abort
90;
91; RV64IZFBFMIN-LABEL: br_fcmp_oeq_alt:
92; RV64IZFBFMIN:       # %bb.0:
93; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
94; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
95; RV64IZFBFMIN-NEXT:    feq.s a0, fa4, fa5
96; RV64IZFBFMIN-NEXT:    bnez a0, .LBB2_2
97; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
98; RV64IZFBFMIN-NEXT:    ret
99; RV64IZFBFMIN-NEXT:  .LBB2_2: # %if.then
100; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
101; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
102; RV64IZFBFMIN-NEXT:    call abort
103  %1 = fcmp oeq bfloat %a, %b
104  br i1 %1, label %if.then, label %if.else
105if.then:
106  tail call void @abort()
107  unreachable
108if.else:
109  ret void
110}
111
112define void @br_fcmp_ogt(bfloat %a, bfloat %b) nounwind {
113; RV32IZFBFMIN-LABEL: br_fcmp_ogt:
114; RV32IZFBFMIN:       # %bb.0:
115; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
116; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
117; RV32IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
118; RV32IZFBFMIN-NEXT:    bnez a0, .LBB3_2
119; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
120; RV32IZFBFMIN-NEXT:    ret
121; RV32IZFBFMIN-NEXT:  .LBB3_2: # %if.then
122; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
123; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
124; RV32IZFBFMIN-NEXT:    call abort
125;
126; RV64IZFBFMIN-LABEL: br_fcmp_ogt:
127; RV64IZFBFMIN:       # %bb.0:
128; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
129; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
130; RV64IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
131; RV64IZFBFMIN-NEXT:    bnez a0, .LBB3_2
132; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
133; RV64IZFBFMIN-NEXT:    ret
134; RV64IZFBFMIN-NEXT:  .LBB3_2: # %if.then
135; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
136; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
137; RV64IZFBFMIN-NEXT:    call abort
138  %1 = fcmp ogt bfloat %a, %b
139  br i1 %1, label %if.then, label %if.else
140if.else:
141  ret void
142if.then:
143  tail call void @abort()
144  unreachable
145}
146
147define void @br_fcmp_oge(bfloat %a, bfloat %b) nounwind {
148; RV32IZFBFMIN-LABEL: br_fcmp_oge:
149; RV32IZFBFMIN:       # %bb.0:
150; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
151; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
152; RV32IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
153; RV32IZFBFMIN-NEXT:    bnez a0, .LBB4_2
154; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
155; RV32IZFBFMIN-NEXT:    ret
156; RV32IZFBFMIN-NEXT:  .LBB4_2: # %if.then
157; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
158; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
159; RV32IZFBFMIN-NEXT:    call abort
160;
161; RV64IZFBFMIN-LABEL: br_fcmp_oge:
162; RV64IZFBFMIN:       # %bb.0:
163; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
164; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
165; RV64IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
166; RV64IZFBFMIN-NEXT:    bnez a0, .LBB4_2
167; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
168; RV64IZFBFMIN-NEXT:    ret
169; RV64IZFBFMIN-NEXT:  .LBB4_2: # %if.then
170; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
171; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
172; RV64IZFBFMIN-NEXT:    call abort
173  %1 = fcmp oge bfloat %a, %b
174  br i1 %1, label %if.then, label %if.else
175if.else:
176  ret void
177if.then:
178  tail call void @abort()
179  unreachable
180}
181
182define void @br_fcmp_olt(bfloat %a, bfloat %b) nounwind {
183; RV32IZFBFMIN-LABEL: br_fcmp_olt:
184; RV32IZFBFMIN:       # %bb.0:
185; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
186; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
187; RV32IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
188; RV32IZFBFMIN-NEXT:    bnez a0, .LBB5_2
189; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
190; RV32IZFBFMIN-NEXT:    ret
191; RV32IZFBFMIN-NEXT:  .LBB5_2: # %if.then
192; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
193; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
194; RV32IZFBFMIN-NEXT:    call abort
195;
196; RV64IZFBFMIN-LABEL: br_fcmp_olt:
197; RV64IZFBFMIN:       # %bb.0:
198; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
199; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
200; RV64IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
201; RV64IZFBFMIN-NEXT:    bnez a0, .LBB5_2
202; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
203; RV64IZFBFMIN-NEXT:    ret
204; RV64IZFBFMIN-NEXT:  .LBB5_2: # %if.then
205; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
206; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
207; RV64IZFBFMIN-NEXT:    call abort
208  %1 = fcmp olt bfloat %a, %b
209  br i1 %1, label %if.then, label %if.else
210if.else:
211  ret void
212if.then:
213  tail call void @abort()
214  unreachable
215}
216
217define void @br_fcmp_ole(bfloat %a, bfloat %b) nounwind {
218; RV32IZFBFMIN-LABEL: br_fcmp_ole:
219; RV32IZFBFMIN:       # %bb.0:
220; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
221; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
222; RV32IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
223; RV32IZFBFMIN-NEXT:    bnez a0, .LBB6_2
224; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
225; RV32IZFBFMIN-NEXT:    ret
226; RV32IZFBFMIN-NEXT:  .LBB6_2: # %if.then
227; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
228; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
229; RV32IZFBFMIN-NEXT:    call abort
230;
231; RV64IZFBFMIN-LABEL: br_fcmp_ole:
232; RV64IZFBFMIN:       # %bb.0:
233; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
234; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
235; RV64IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
236; RV64IZFBFMIN-NEXT:    bnez a0, .LBB6_2
237; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
238; RV64IZFBFMIN-NEXT:    ret
239; RV64IZFBFMIN-NEXT:  .LBB6_2: # %if.then
240; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
241; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
242; RV64IZFBFMIN-NEXT:    call abort
243  %1 = fcmp ole bfloat %a, %b
244  br i1 %1, label %if.then, label %if.else
245if.else:
246  ret void
247if.then:
248  tail call void @abort()
249  unreachable
250}
251
252define void @br_fcmp_one(bfloat %a, bfloat %b) nounwind {
253; RV32IZFBFMIN-LABEL: br_fcmp_one:
254; RV32IZFBFMIN:       # %bb.0:
255; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
256; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
257; RV32IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
258; RV32IZFBFMIN-NEXT:    flt.s a1, fa5, fa4
259; RV32IZFBFMIN-NEXT:    or a0, a1, a0
260; RV32IZFBFMIN-NEXT:    bnez a0, .LBB7_2
261; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
262; RV32IZFBFMIN-NEXT:    ret
263; RV32IZFBFMIN-NEXT:  .LBB7_2: # %if.then
264; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
265; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
266; RV32IZFBFMIN-NEXT:    call abort
267;
268; RV64IZFBFMIN-LABEL: br_fcmp_one:
269; RV64IZFBFMIN:       # %bb.0:
270; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
271; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
272; RV64IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
273; RV64IZFBFMIN-NEXT:    flt.s a1, fa5, fa4
274; RV64IZFBFMIN-NEXT:    or a0, a1, a0
275; RV64IZFBFMIN-NEXT:    bnez a0, .LBB7_2
276; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
277; RV64IZFBFMIN-NEXT:    ret
278; RV64IZFBFMIN-NEXT:  .LBB7_2: # %if.then
279; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
280; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
281; RV64IZFBFMIN-NEXT:    call abort
282  %1 = fcmp one bfloat %a, %b
283  br i1 %1, label %if.then, label %if.else
284if.else:
285  ret void
286if.then:
287  tail call void @abort()
288  unreachable
289}
290
291define void @br_fcmp_ord(bfloat %a, bfloat %b) nounwind {
292; RV32IZFBFMIN-LABEL: br_fcmp_ord:
293; RV32IZFBFMIN:       # %bb.0:
294; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
295; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
296; RV32IZFBFMIN-NEXT:    feq.s a0, fa5, fa5
297; RV32IZFBFMIN-NEXT:    feq.s a1, fa4, fa4
298; RV32IZFBFMIN-NEXT:    and a0, a1, a0
299; RV32IZFBFMIN-NEXT:    bnez a0, .LBB8_2
300; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
301; RV32IZFBFMIN-NEXT:    ret
302; RV32IZFBFMIN-NEXT:  .LBB8_2: # %if.then
303; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
304; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
305; RV32IZFBFMIN-NEXT:    call abort
306;
307; RV64IZFBFMIN-LABEL: br_fcmp_ord:
308; RV64IZFBFMIN:       # %bb.0:
309; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
310; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
311; RV64IZFBFMIN-NEXT:    feq.s a0, fa5, fa5
312; RV64IZFBFMIN-NEXT:    feq.s a1, fa4, fa4
313; RV64IZFBFMIN-NEXT:    and a0, a1, a0
314; RV64IZFBFMIN-NEXT:    bnez a0, .LBB8_2
315; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
316; RV64IZFBFMIN-NEXT:    ret
317; RV64IZFBFMIN-NEXT:  .LBB8_2: # %if.then
318; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
319; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
320; RV64IZFBFMIN-NEXT:    call abort
321  %1 = fcmp ord bfloat %a, %b
322  br i1 %1, label %if.then, label %if.else
323if.else:
324  ret void
325if.then:
326  tail call void @abort()
327  unreachable
328}
329
330define void @br_fcmp_ueq(bfloat %a, bfloat %b) nounwind {
331; RV32IZFBFMIN-LABEL: br_fcmp_ueq:
332; RV32IZFBFMIN:       # %bb.0:
333; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
334; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
335; RV32IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
336; RV32IZFBFMIN-NEXT:    flt.s a1, fa5, fa4
337; RV32IZFBFMIN-NEXT:    or a0, a1, a0
338; RV32IZFBFMIN-NEXT:    beqz a0, .LBB9_2
339; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
340; RV32IZFBFMIN-NEXT:    ret
341; RV32IZFBFMIN-NEXT:  .LBB9_2: # %if.then
342; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
343; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
344; RV32IZFBFMIN-NEXT:    call abort
345;
346; RV64IZFBFMIN-LABEL: br_fcmp_ueq:
347; RV64IZFBFMIN:       # %bb.0:
348; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
349; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
350; RV64IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
351; RV64IZFBFMIN-NEXT:    flt.s a1, fa5, fa4
352; RV64IZFBFMIN-NEXT:    or a0, a1, a0
353; RV64IZFBFMIN-NEXT:    beqz a0, .LBB9_2
354; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
355; RV64IZFBFMIN-NEXT:    ret
356; RV64IZFBFMIN-NEXT:  .LBB9_2: # %if.then
357; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
358; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
359; RV64IZFBFMIN-NEXT:    call abort
360  %1 = fcmp ueq bfloat %a, %b
361  br i1 %1, label %if.then, label %if.else
362if.else:
363  ret void
364if.then:
365  tail call void @abort()
366  unreachable
367}
368
369define void @br_fcmp_ugt(bfloat %a, bfloat %b) nounwind {
370; RV32IZFBFMIN-LABEL: br_fcmp_ugt:
371; RV32IZFBFMIN:       # %bb.0:
372; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
373; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
374; RV32IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
375; RV32IZFBFMIN-NEXT:    beqz a0, .LBB10_2
376; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
377; RV32IZFBFMIN-NEXT:    ret
378; RV32IZFBFMIN-NEXT:  .LBB10_2: # %if.then
379; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
380; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
381; RV32IZFBFMIN-NEXT:    call abort
382;
383; RV64IZFBFMIN-LABEL: br_fcmp_ugt:
384; RV64IZFBFMIN:       # %bb.0:
385; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
386; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
387; RV64IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
388; RV64IZFBFMIN-NEXT:    beqz a0, .LBB10_2
389; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
390; RV64IZFBFMIN-NEXT:    ret
391; RV64IZFBFMIN-NEXT:  .LBB10_2: # %if.then
392; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
393; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
394; RV64IZFBFMIN-NEXT:    call abort
395  %1 = fcmp ugt bfloat %a, %b
396  br i1 %1, label %if.then, label %if.else
397if.else:
398  ret void
399if.then:
400  tail call void @abort()
401  unreachable
402}
403
404define void @br_fcmp_uge(bfloat %a, bfloat %b) nounwind {
405; RV32IZFBFMIN-LABEL: br_fcmp_uge:
406; RV32IZFBFMIN:       # %bb.0:
407; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
408; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
409; RV32IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
410; RV32IZFBFMIN-NEXT:    beqz a0, .LBB11_2
411; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
412; RV32IZFBFMIN-NEXT:    ret
413; RV32IZFBFMIN-NEXT:  .LBB11_2: # %if.then
414; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
415; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
416; RV32IZFBFMIN-NEXT:    call abort
417;
418; RV64IZFBFMIN-LABEL: br_fcmp_uge:
419; RV64IZFBFMIN:       # %bb.0:
420; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
421; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
422; RV64IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
423; RV64IZFBFMIN-NEXT:    beqz a0, .LBB11_2
424; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
425; RV64IZFBFMIN-NEXT:    ret
426; RV64IZFBFMIN-NEXT:  .LBB11_2: # %if.then
427; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
428; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
429; RV64IZFBFMIN-NEXT:    call abort
430  %1 = fcmp uge bfloat %a, %b
431  br i1 %1, label %if.then, label %if.else
432if.else:
433  ret void
434if.then:
435  tail call void @abort()
436  unreachable
437}
438
439define void @br_fcmp_ult(bfloat %a, bfloat %b) nounwind {
440; RV32IZFBFMIN-LABEL: br_fcmp_ult:
441; RV32IZFBFMIN:       # %bb.0:
442; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
443; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
444; RV32IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
445; RV32IZFBFMIN-NEXT:    beqz a0, .LBB12_2
446; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
447; RV32IZFBFMIN-NEXT:    ret
448; RV32IZFBFMIN-NEXT:  .LBB12_2: # %if.then
449; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
450; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
451; RV32IZFBFMIN-NEXT:    call abort
452;
453; RV64IZFBFMIN-LABEL: br_fcmp_ult:
454; RV64IZFBFMIN:       # %bb.0:
455; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
456; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
457; RV64IZFBFMIN-NEXT:    fle.s a0, fa4, fa5
458; RV64IZFBFMIN-NEXT:    beqz a0, .LBB12_2
459; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
460; RV64IZFBFMIN-NEXT:    ret
461; RV64IZFBFMIN-NEXT:  .LBB12_2: # %if.then
462; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
463; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
464; RV64IZFBFMIN-NEXT:    call abort
465  %1 = fcmp ult bfloat %a, %b
466  br i1 %1, label %if.then, label %if.else
467if.else:
468  ret void
469if.then:
470  tail call void @abort()
471  unreachable
472}
473
474define void @br_fcmp_ule(bfloat %a, bfloat %b) nounwind {
475; RV32IZFBFMIN-LABEL: br_fcmp_ule:
476; RV32IZFBFMIN:       # %bb.0:
477; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
478; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
479; RV32IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
480; RV32IZFBFMIN-NEXT:    beqz a0, .LBB13_2
481; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
482; RV32IZFBFMIN-NEXT:    ret
483; RV32IZFBFMIN-NEXT:  .LBB13_2: # %if.then
484; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
485; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
486; RV32IZFBFMIN-NEXT:    call abort
487;
488; RV64IZFBFMIN-LABEL: br_fcmp_ule:
489; RV64IZFBFMIN:       # %bb.0:
490; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa0
491; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa1
492; RV64IZFBFMIN-NEXT:    flt.s a0, fa4, fa5
493; RV64IZFBFMIN-NEXT:    beqz a0, .LBB13_2
494; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
495; RV64IZFBFMIN-NEXT:    ret
496; RV64IZFBFMIN-NEXT:  .LBB13_2: # %if.then
497; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
498; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
499; RV64IZFBFMIN-NEXT:    call abort
500  %1 = fcmp ule bfloat %a, %b
501  br i1 %1, label %if.then, label %if.else
502if.else:
503  ret void
504if.then:
505  tail call void @abort()
506  unreachable
507}
508
509define void @br_fcmp_une(bfloat %a, bfloat %b) nounwind {
510; RV32IZFBFMIN-LABEL: br_fcmp_une:
511; RV32IZFBFMIN:       # %bb.0:
512; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
513; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
514; RV32IZFBFMIN-NEXT:    feq.s a0, fa4, fa5
515; RV32IZFBFMIN-NEXT:    beqz a0, .LBB14_2
516; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
517; RV32IZFBFMIN-NEXT:    ret
518; RV32IZFBFMIN-NEXT:  .LBB14_2: # %if.then
519; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
520; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
521; RV32IZFBFMIN-NEXT:    call abort
522;
523; RV64IZFBFMIN-LABEL: br_fcmp_une:
524; RV64IZFBFMIN:       # %bb.0:
525; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
526; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
527; RV64IZFBFMIN-NEXT:    feq.s a0, fa4, fa5
528; RV64IZFBFMIN-NEXT:    beqz a0, .LBB14_2
529; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
530; RV64IZFBFMIN-NEXT:    ret
531; RV64IZFBFMIN-NEXT:  .LBB14_2: # %if.then
532; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
533; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
534; RV64IZFBFMIN-NEXT:    call abort
535  %1 = fcmp une bfloat %a, %b
536  br i1 %1, label %if.then, label %if.else
537if.else:
538  ret void
539if.then:
540  tail call void @abort()
541  unreachable
542}
543
544define void @br_fcmp_uno(bfloat %a, bfloat %b) nounwind {
545; RV32IZFBFMIN-LABEL: br_fcmp_uno:
546; RV32IZFBFMIN:       # %bb.0:
547; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
548; RV32IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
549; RV32IZFBFMIN-NEXT:    feq.s a0, fa5, fa5
550; RV32IZFBFMIN-NEXT:    feq.s a1, fa4, fa4
551; RV32IZFBFMIN-NEXT:    and a0, a1, a0
552; RV32IZFBFMIN-NEXT:    beqz a0, .LBB15_2
553; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
554; RV32IZFBFMIN-NEXT:    ret
555; RV32IZFBFMIN-NEXT:  .LBB15_2: # %if.then
556; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
557; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
558; RV32IZFBFMIN-NEXT:    call abort
559;
560; RV64IZFBFMIN-LABEL: br_fcmp_uno:
561; RV64IZFBFMIN:       # %bb.0:
562; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa5, fa1
563; RV64IZFBFMIN-NEXT:    fcvt.s.bf16 fa4, fa0
564; RV64IZFBFMIN-NEXT:    feq.s a0, fa5, fa5
565; RV64IZFBFMIN-NEXT:    feq.s a1, fa4, fa4
566; RV64IZFBFMIN-NEXT:    and a0, a1, a0
567; RV64IZFBFMIN-NEXT:    beqz a0, .LBB15_2
568; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
569; RV64IZFBFMIN-NEXT:    ret
570; RV64IZFBFMIN-NEXT:  .LBB15_2: # %if.then
571; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
572; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
573; RV64IZFBFMIN-NEXT:    call abort
574  %1 = fcmp uno bfloat %a, %b
575  br i1 %1, label %if.then, label %if.else
576if.else:
577  ret void
578if.then:
579  tail call void @abort()
580  unreachable
581}
582
583define void @br_fcmp_true(bfloat %a, bfloat %b) nounwind {
584; RV32IZFBFMIN-LABEL: br_fcmp_true:
585; RV32IZFBFMIN:       # %bb.0:
586; RV32IZFBFMIN-NEXT:    li a0, 1
587; RV32IZFBFMIN-NEXT:    bnez a0, .LBB16_2
588; RV32IZFBFMIN-NEXT:  # %bb.1: # %if.else
589; RV32IZFBFMIN-NEXT:    ret
590; RV32IZFBFMIN-NEXT:  .LBB16_2: # %if.then
591; RV32IZFBFMIN-NEXT:    addi sp, sp, -16
592; RV32IZFBFMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
593; RV32IZFBFMIN-NEXT:    call abort
594;
595; RV64IZFBFMIN-LABEL: br_fcmp_true:
596; RV64IZFBFMIN:       # %bb.0:
597; RV64IZFBFMIN-NEXT:    li a0, 1
598; RV64IZFBFMIN-NEXT:    bnez a0, .LBB16_2
599; RV64IZFBFMIN-NEXT:  # %bb.1: # %if.else
600; RV64IZFBFMIN-NEXT:    ret
601; RV64IZFBFMIN-NEXT:  .LBB16_2: # %if.then
602; RV64IZFBFMIN-NEXT:    addi sp, sp, -16
603; RV64IZFBFMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
604; RV64IZFBFMIN-NEXT:    call abort
605  %1 = fcmp true bfloat %a, %b
606  br i1 %1, label %if.then, label %if.else
607if.else:
608  ret void
609if.then:
610  tail call void @abort()
611  unreachable
612}
613