xref: /llvm-project/llvm/test/CodeGen/RISCV/half-br-fcmp.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \
3; RUN:   -target-abi ilp32f < %s | FileCheck -check-prefix=RV32IZFH %s
4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \
5; RUN:   -target-abi lp64f < %s | FileCheck -check-prefix=RV64IZFH %s
6; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \
7; RUN:   -target-abi ilp32 < %s | FileCheck -check-prefix=RV32IZHINX %s
8; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \
9; RUN:   -target-abi lp64 < %s | FileCheck -check-prefix=RV64IZHINX %s
10; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs \
11; RUN:   -target-abi ilp32f < %s | FileCheck -check-prefix=RV32IZFHMIN %s
12; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs \
13; RUN:   -target-abi lp64f < %s | FileCheck -check-prefix=RV64IZFHMIN %s
14; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs \
15; RUN:   -target-abi ilp32 < %s | FileCheck -check-prefix=RV32IZHINXMIN %s
16; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs \
17; RUN:   -target-abi lp64 < %s | FileCheck -check-prefix=RV64IZHINXMIN %s
18
19declare void @abort()
20declare void @exit(i32)
21declare half @dummy(half)
22
23define void @br_fcmp_false(half %a, half %b) nounwind {
24; RV32IZFH-LABEL: br_fcmp_false:
25; RV32IZFH:       # %bb.0:
26; RV32IZFH-NEXT:    li a0, 1
27; RV32IZFH-NEXT:    bnez a0, .LBB0_2
28; RV32IZFH-NEXT:  # %bb.1: # %if.then
29; RV32IZFH-NEXT:    ret
30; RV32IZFH-NEXT:  .LBB0_2: # %if.else
31; RV32IZFH-NEXT:    addi sp, sp, -16
32; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
33; RV32IZFH-NEXT:    call abort
34;
35; RV64IZFH-LABEL: br_fcmp_false:
36; RV64IZFH:       # %bb.0:
37; RV64IZFH-NEXT:    li a0, 1
38; RV64IZFH-NEXT:    bnez a0, .LBB0_2
39; RV64IZFH-NEXT:  # %bb.1: # %if.then
40; RV64IZFH-NEXT:    ret
41; RV64IZFH-NEXT:  .LBB0_2: # %if.else
42; RV64IZFH-NEXT:    addi sp, sp, -16
43; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
44; RV64IZFH-NEXT:    call abort
45;
46; RV32IZHINX-LABEL: br_fcmp_false:
47; RV32IZHINX:       # %bb.0:
48; RV32IZHINX-NEXT:    li a0, 1
49; RV32IZHINX-NEXT:    bnez a0, .LBB0_2
50; RV32IZHINX-NEXT:  # %bb.1: # %if.then
51; RV32IZHINX-NEXT:    ret
52; RV32IZHINX-NEXT:  .LBB0_2: # %if.else
53; RV32IZHINX-NEXT:    addi sp, sp, -16
54; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
55; RV32IZHINX-NEXT:    call abort
56;
57; RV64IZHINX-LABEL: br_fcmp_false:
58; RV64IZHINX:       # %bb.0:
59; RV64IZHINX-NEXT:    li a0, 1
60; RV64IZHINX-NEXT:    bnez a0, .LBB0_2
61; RV64IZHINX-NEXT:  # %bb.1: # %if.then
62; RV64IZHINX-NEXT:    ret
63; RV64IZHINX-NEXT:  .LBB0_2: # %if.else
64; RV64IZHINX-NEXT:    addi sp, sp, -16
65; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
66; RV64IZHINX-NEXT:    call abort
67;
68; RV32IZFHMIN-LABEL: br_fcmp_false:
69; RV32IZFHMIN:       # %bb.0:
70; RV32IZFHMIN-NEXT:    li a0, 1
71; RV32IZFHMIN-NEXT:    bnez a0, .LBB0_2
72; RV32IZFHMIN-NEXT:  # %bb.1: # %if.then
73; RV32IZFHMIN-NEXT:    ret
74; RV32IZFHMIN-NEXT:  .LBB0_2: # %if.else
75; RV32IZFHMIN-NEXT:    addi sp, sp, -16
76; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
77; RV32IZFHMIN-NEXT:    call abort
78;
79; RV64IZFHMIN-LABEL: br_fcmp_false:
80; RV64IZFHMIN:       # %bb.0:
81; RV64IZFHMIN-NEXT:    li a0, 1
82; RV64IZFHMIN-NEXT:    bnez a0, .LBB0_2
83; RV64IZFHMIN-NEXT:  # %bb.1: # %if.then
84; RV64IZFHMIN-NEXT:    ret
85; RV64IZFHMIN-NEXT:  .LBB0_2: # %if.else
86; RV64IZFHMIN-NEXT:    addi sp, sp, -16
87; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
88; RV64IZFHMIN-NEXT:    call abort
89;
90; RV32IZHINXMIN-LABEL: br_fcmp_false:
91; RV32IZHINXMIN:       # %bb.0:
92; RV32IZHINXMIN-NEXT:    li a0, 1
93; RV32IZHINXMIN-NEXT:    bnez a0, .LBB0_2
94; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.then
95; RV32IZHINXMIN-NEXT:    ret
96; RV32IZHINXMIN-NEXT:  .LBB0_2: # %if.else
97; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
98; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
99; RV32IZHINXMIN-NEXT:    call abort
100;
101; RV64IZHINXMIN-LABEL: br_fcmp_false:
102; RV64IZHINXMIN:       # %bb.0:
103; RV64IZHINXMIN-NEXT:    li a0, 1
104; RV64IZHINXMIN-NEXT:    bnez a0, .LBB0_2
105; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.then
106; RV64IZHINXMIN-NEXT:    ret
107; RV64IZHINXMIN-NEXT:  .LBB0_2: # %if.else
108; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
109; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
110; RV64IZHINXMIN-NEXT:    call abort
111  %1 = fcmp false half %a, %b
112  br i1 %1, label %if.then, label %if.else
113if.then:
114  ret void
115if.else:
116  tail call void @abort()
117  unreachable
118}
119
120define void @br_fcmp_oeq(half %a, half %b) nounwind {
121; RV32IZFH-LABEL: br_fcmp_oeq:
122; RV32IZFH:       # %bb.0:
123; RV32IZFH-NEXT:    feq.h a0, fa0, fa1
124; RV32IZFH-NEXT:    bnez a0, .LBB1_2
125; RV32IZFH-NEXT:  # %bb.1: # %if.else
126; RV32IZFH-NEXT:    ret
127; RV32IZFH-NEXT:  .LBB1_2: # %if.then
128; RV32IZFH-NEXT:    addi sp, sp, -16
129; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
130; RV32IZFH-NEXT:    call abort
131;
132; RV64IZFH-LABEL: br_fcmp_oeq:
133; RV64IZFH:       # %bb.0:
134; RV64IZFH-NEXT:    feq.h a0, fa0, fa1
135; RV64IZFH-NEXT:    bnez a0, .LBB1_2
136; RV64IZFH-NEXT:  # %bb.1: # %if.else
137; RV64IZFH-NEXT:    ret
138; RV64IZFH-NEXT:  .LBB1_2: # %if.then
139; RV64IZFH-NEXT:    addi sp, sp, -16
140; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
141; RV64IZFH-NEXT:    call abort
142;
143; RV32IZHINX-LABEL: br_fcmp_oeq:
144; RV32IZHINX:       # %bb.0:
145; RV32IZHINX-NEXT:    feq.h a0, a0, a1
146; RV32IZHINX-NEXT:    bnez a0, .LBB1_2
147; RV32IZHINX-NEXT:  # %bb.1: # %if.else
148; RV32IZHINX-NEXT:    ret
149; RV32IZHINX-NEXT:  .LBB1_2: # %if.then
150; RV32IZHINX-NEXT:    addi sp, sp, -16
151; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
152; RV32IZHINX-NEXT:    call abort
153;
154; RV64IZHINX-LABEL: br_fcmp_oeq:
155; RV64IZHINX:       # %bb.0:
156; RV64IZHINX-NEXT:    feq.h a0, a0, a1
157; RV64IZHINX-NEXT:    bnez a0, .LBB1_2
158; RV64IZHINX-NEXT:  # %bb.1: # %if.else
159; RV64IZHINX-NEXT:    ret
160; RV64IZHINX-NEXT:  .LBB1_2: # %if.then
161; RV64IZHINX-NEXT:    addi sp, sp, -16
162; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
163; RV64IZHINX-NEXT:    call abort
164;
165; RV32IZFHMIN-LABEL: br_fcmp_oeq:
166; RV32IZFHMIN:       # %bb.0:
167; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
168; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
169; RV32IZFHMIN-NEXT:    feq.s a0, fa4, fa5
170; RV32IZFHMIN-NEXT:    bnez a0, .LBB1_2
171; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
172; RV32IZFHMIN-NEXT:    ret
173; RV32IZFHMIN-NEXT:  .LBB1_2: # %if.then
174; RV32IZFHMIN-NEXT:    addi sp, sp, -16
175; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
176; RV32IZFHMIN-NEXT:    call abort
177;
178; RV64IZFHMIN-LABEL: br_fcmp_oeq:
179; RV64IZFHMIN:       # %bb.0:
180; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
181; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
182; RV64IZFHMIN-NEXT:    feq.s a0, fa4, fa5
183; RV64IZFHMIN-NEXT:    bnez a0, .LBB1_2
184; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
185; RV64IZFHMIN-NEXT:    ret
186; RV64IZFHMIN-NEXT:  .LBB1_2: # %if.then
187; RV64IZFHMIN-NEXT:    addi sp, sp, -16
188; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
189; RV64IZFHMIN-NEXT:    call abort
190;
191; RV32IZHINXMIN-LABEL: br_fcmp_oeq:
192; RV32IZHINXMIN:       # %bb.0:
193; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
194; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
195; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a1
196; RV32IZHINXMIN-NEXT:    bnez a0, .LBB1_2
197; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
198; RV32IZHINXMIN-NEXT:    ret
199; RV32IZHINXMIN-NEXT:  .LBB1_2: # %if.then
200; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
201; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
202; RV32IZHINXMIN-NEXT:    call abort
203;
204; RV64IZHINXMIN-LABEL: br_fcmp_oeq:
205; RV64IZHINXMIN:       # %bb.0:
206; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
207; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
208; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a1
209; RV64IZHINXMIN-NEXT:    bnez a0, .LBB1_2
210; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
211; RV64IZHINXMIN-NEXT:    ret
212; RV64IZHINXMIN-NEXT:  .LBB1_2: # %if.then
213; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
214; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
215; RV64IZHINXMIN-NEXT:    call abort
216  %1 = fcmp oeq half %a, %b
217  br i1 %1, label %if.then, label %if.else
218if.else:
219  ret void
220if.then:
221  tail call void @abort()
222  unreachable
223}
224
225; TODO: generated code quality for this is very poor due to
226; DAGCombiner::visitXOR converting the legal setoeq to setune, which requires
227; expansion.
228define void @br_fcmp_oeq_alt(half %a, half %b) nounwind {
229; RV32IZFH-LABEL: br_fcmp_oeq_alt:
230; RV32IZFH:       # %bb.0:
231; RV32IZFH-NEXT:    feq.h a0, fa0, fa1
232; RV32IZFH-NEXT:    bnez a0, .LBB2_2
233; RV32IZFH-NEXT:  # %bb.1: # %if.else
234; RV32IZFH-NEXT:    ret
235; RV32IZFH-NEXT:  .LBB2_2: # %if.then
236; RV32IZFH-NEXT:    addi sp, sp, -16
237; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
238; RV32IZFH-NEXT:    call abort
239;
240; RV64IZFH-LABEL: br_fcmp_oeq_alt:
241; RV64IZFH:       # %bb.0:
242; RV64IZFH-NEXT:    feq.h a0, fa0, fa1
243; RV64IZFH-NEXT:    bnez a0, .LBB2_2
244; RV64IZFH-NEXT:  # %bb.1: # %if.else
245; RV64IZFH-NEXT:    ret
246; RV64IZFH-NEXT:  .LBB2_2: # %if.then
247; RV64IZFH-NEXT:    addi sp, sp, -16
248; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
249; RV64IZFH-NEXT:    call abort
250;
251; RV32IZHINX-LABEL: br_fcmp_oeq_alt:
252; RV32IZHINX:       # %bb.0:
253; RV32IZHINX-NEXT:    feq.h a0, a0, a1
254; RV32IZHINX-NEXT:    bnez a0, .LBB2_2
255; RV32IZHINX-NEXT:  # %bb.1: # %if.else
256; RV32IZHINX-NEXT:    ret
257; RV32IZHINX-NEXT:  .LBB2_2: # %if.then
258; RV32IZHINX-NEXT:    addi sp, sp, -16
259; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
260; RV32IZHINX-NEXT:    call abort
261;
262; RV64IZHINX-LABEL: br_fcmp_oeq_alt:
263; RV64IZHINX:       # %bb.0:
264; RV64IZHINX-NEXT:    feq.h a0, a0, a1
265; RV64IZHINX-NEXT:    bnez a0, .LBB2_2
266; RV64IZHINX-NEXT:  # %bb.1: # %if.else
267; RV64IZHINX-NEXT:    ret
268; RV64IZHINX-NEXT:  .LBB2_2: # %if.then
269; RV64IZHINX-NEXT:    addi sp, sp, -16
270; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
271; RV64IZHINX-NEXT:    call abort
272;
273; RV32IZFHMIN-LABEL: br_fcmp_oeq_alt:
274; RV32IZFHMIN:       # %bb.0:
275; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
276; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
277; RV32IZFHMIN-NEXT:    feq.s a0, fa4, fa5
278; RV32IZFHMIN-NEXT:    bnez a0, .LBB2_2
279; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
280; RV32IZFHMIN-NEXT:    ret
281; RV32IZFHMIN-NEXT:  .LBB2_2: # %if.then
282; RV32IZFHMIN-NEXT:    addi sp, sp, -16
283; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
284; RV32IZFHMIN-NEXT:    call abort
285;
286; RV64IZFHMIN-LABEL: br_fcmp_oeq_alt:
287; RV64IZFHMIN:       # %bb.0:
288; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
289; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
290; RV64IZFHMIN-NEXT:    feq.s a0, fa4, fa5
291; RV64IZFHMIN-NEXT:    bnez a0, .LBB2_2
292; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
293; RV64IZFHMIN-NEXT:    ret
294; RV64IZFHMIN-NEXT:  .LBB2_2: # %if.then
295; RV64IZFHMIN-NEXT:    addi sp, sp, -16
296; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
297; RV64IZFHMIN-NEXT:    call abort
298;
299; RV32IZHINXMIN-LABEL: br_fcmp_oeq_alt:
300; RV32IZHINXMIN:       # %bb.0:
301; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
302; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
303; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a1
304; RV32IZHINXMIN-NEXT:    bnez a0, .LBB2_2
305; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
306; RV32IZHINXMIN-NEXT:    ret
307; RV32IZHINXMIN-NEXT:  .LBB2_2: # %if.then
308; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
309; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
310; RV32IZHINXMIN-NEXT:    call abort
311;
312; RV64IZHINXMIN-LABEL: br_fcmp_oeq_alt:
313; RV64IZHINXMIN:       # %bb.0:
314; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
315; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
316; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a1
317; RV64IZHINXMIN-NEXT:    bnez a0, .LBB2_2
318; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
319; RV64IZHINXMIN-NEXT:    ret
320; RV64IZHINXMIN-NEXT:  .LBB2_2: # %if.then
321; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
322; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
323; RV64IZHINXMIN-NEXT:    call abort
324  %1 = fcmp oeq half %a, %b
325  br i1 %1, label %if.then, label %if.else
326if.then:
327  tail call void @abort()
328  unreachable
329if.else:
330  ret void
331}
332
333define void @br_fcmp_ogt(half %a, half %b) nounwind {
334; RV32IZFH-LABEL: br_fcmp_ogt:
335; RV32IZFH:       # %bb.0:
336; RV32IZFH-NEXT:    flt.h a0, fa1, fa0
337; RV32IZFH-NEXT:    bnez a0, .LBB3_2
338; RV32IZFH-NEXT:  # %bb.1: # %if.else
339; RV32IZFH-NEXT:    ret
340; RV32IZFH-NEXT:  .LBB3_2: # %if.then
341; RV32IZFH-NEXT:    addi sp, sp, -16
342; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
343; RV32IZFH-NEXT:    call abort
344;
345; RV64IZFH-LABEL: br_fcmp_ogt:
346; RV64IZFH:       # %bb.0:
347; RV64IZFH-NEXT:    flt.h a0, fa1, fa0
348; RV64IZFH-NEXT:    bnez a0, .LBB3_2
349; RV64IZFH-NEXT:  # %bb.1: # %if.else
350; RV64IZFH-NEXT:    ret
351; RV64IZFH-NEXT:  .LBB3_2: # %if.then
352; RV64IZFH-NEXT:    addi sp, sp, -16
353; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
354; RV64IZFH-NEXT:    call abort
355;
356; RV32IZHINX-LABEL: br_fcmp_ogt:
357; RV32IZHINX:       # %bb.0:
358; RV32IZHINX-NEXT:    flt.h a0, a1, a0
359; RV32IZHINX-NEXT:    bnez a0, .LBB3_2
360; RV32IZHINX-NEXT:  # %bb.1: # %if.else
361; RV32IZHINX-NEXT:    ret
362; RV32IZHINX-NEXT:  .LBB3_2: # %if.then
363; RV32IZHINX-NEXT:    addi sp, sp, -16
364; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
365; RV32IZHINX-NEXT:    call abort
366;
367; RV64IZHINX-LABEL: br_fcmp_ogt:
368; RV64IZHINX:       # %bb.0:
369; RV64IZHINX-NEXT:    flt.h a0, a1, a0
370; RV64IZHINX-NEXT:    bnez a0, .LBB3_2
371; RV64IZHINX-NEXT:  # %bb.1: # %if.else
372; RV64IZHINX-NEXT:    ret
373; RV64IZHINX-NEXT:  .LBB3_2: # %if.then
374; RV64IZHINX-NEXT:    addi sp, sp, -16
375; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
376; RV64IZHINX-NEXT:    call abort
377;
378; RV32IZFHMIN-LABEL: br_fcmp_ogt:
379; RV32IZFHMIN:       # %bb.0:
380; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
381; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
382; RV32IZFHMIN-NEXT:    flt.s a0, fa4, fa5
383; RV32IZFHMIN-NEXT:    bnez a0, .LBB3_2
384; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
385; RV32IZFHMIN-NEXT:    ret
386; RV32IZFHMIN-NEXT:  .LBB3_2: # %if.then
387; RV32IZFHMIN-NEXT:    addi sp, sp, -16
388; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
389; RV32IZFHMIN-NEXT:    call abort
390;
391; RV64IZFHMIN-LABEL: br_fcmp_ogt:
392; RV64IZFHMIN:       # %bb.0:
393; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
394; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
395; RV64IZFHMIN-NEXT:    flt.s a0, fa4, fa5
396; RV64IZFHMIN-NEXT:    bnez a0, .LBB3_2
397; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
398; RV64IZFHMIN-NEXT:    ret
399; RV64IZFHMIN-NEXT:  .LBB3_2: # %if.then
400; RV64IZFHMIN-NEXT:    addi sp, sp, -16
401; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
402; RV64IZFHMIN-NEXT:    call abort
403;
404; RV32IZHINXMIN-LABEL: br_fcmp_ogt:
405; RV32IZHINXMIN:       # %bb.0:
406; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
407; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
408; RV32IZHINXMIN-NEXT:    flt.s a0, a1, a0
409; RV32IZHINXMIN-NEXT:    bnez a0, .LBB3_2
410; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
411; RV32IZHINXMIN-NEXT:    ret
412; RV32IZHINXMIN-NEXT:  .LBB3_2: # %if.then
413; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
414; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
415; RV32IZHINXMIN-NEXT:    call abort
416;
417; RV64IZHINXMIN-LABEL: br_fcmp_ogt:
418; RV64IZHINXMIN:       # %bb.0:
419; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
420; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
421; RV64IZHINXMIN-NEXT:    flt.s a0, a1, a0
422; RV64IZHINXMIN-NEXT:    bnez a0, .LBB3_2
423; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
424; RV64IZHINXMIN-NEXT:    ret
425; RV64IZHINXMIN-NEXT:  .LBB3_2: # %if.then
426; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
427; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
428; RV64IZHINXMIN-NEXT:    call abort
429  %1 = fcmp ogt half %a, %b
430  br i1 %1, label %if.then, label %if.else
431if.else:
432  ret void
433if.then:
434  tail call void @abort()
435  unreachable
436}
437
438define void @br_fcmp_oge(half %a, half %b) nounwind {
439; RV32IZFH-LABEL: br_fcmp_oge:
440; RV32IZFH:       # %bb.0:
441; RV32IZFH-NEXT:    fle.h a0, fa1, fa0
442; RV32IZFH-NEXT:    bnez a0, .LBB4_2
443; RV32IZFH-NEXT:  # %bb.1: # %if.else
444; RV32IZFH-NEXT:    ret
445; RV32IZFH-NEXT:  .LBB4_2: # %if.then
446; RV32IZFH-NEXT:    addi sp, sp, -16
447; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
448; RV32IZFH-NEXT:    call abort
449;
450; RV64IZFH-LABEL: br_fcmp_oge:
451; RV64IZFH:       # %bb.0:
452; RV64IZFH-NEXT:    fle.h a0, fa1, fa0
453; RV64IZFH-NEXT:    bnez a0, .LBB4_2
454; RV64IZFH-NEXT:  # %bb.1: # %if.else
455; RV64IZFH-NEXT:    ret
456; RV64IZFH-NEXT:  .LBB4_2: # %if.then
457; RV64IZFH-NEXT:    addi sp, sp, -16
458; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
459; RV64IZFH-NEXT:    call abort
460;
461; RV32IZHINX-LABEL: br_fcmp_oge:
462; RV32IZHINX:       # %bb.0:
463; RV32IZHINX-NEXT:    fle.h a0, a1, a0
464; RV32IZHINX-NEXT:    bnez a0, .LBB4_2
465; RV32IZHINX-NEXT:  # %bb.1: # %if.else
466; RV32IZHINX-NEXT:    ret
467; RV32IZHINX-NEXT:  .LBB4_2: # %if.then
468; RV32IZHINX-NEXT:    addi sp, sp, -16
469; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
470; RV32IZHINX-NEXT:    call abort
471;
472; RV64IZHINX-LABEL: br_fcmp_oge:
473; RV64IZHINX:       # %bb.0:
474; RV64IZHINX-NEXT:    fle.h a0, a1, a0
475; RV64IZHINX-NEXT:    bnez a0, .LBB4_2
476; RV64IZHINX-NEXT:  # %bb.1: # %if.else
477; RV64IZHINX-NEXT:    ret
478; RV64IZHINX-NEXT:  .LBB4_2: # %if.then
479; RV64IZHINX-NEXT:    addi sp, sp, -16
480; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
481; RV64IZHINX-NEXT:    call abort
482;
483; RV32IZFHMIN-LABEL: br_fcmp_oge:
484; RV32IZFHMIN:       # %bb.0:
485; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
486; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
487; RV32IZFHMIN-NEXT:    fle.s a0, fa4, fa5
488; RV32IZFHMIN-NEXT:    bnez a0, .LBB4_2
489; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
490; RV32IZFHMIN-NEXT:    ret
491; RV32IZFHMIN-NEXT:  .LBB4_2: # %if.then
492; RV32IZFHMIN-NEXT:    addi sp, sp, -16
493; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
494; RV32IZFHMIN-NEXT:    call abort
495;
496; RV64IZFHMIN-LABEL: br_fcmp_oge:
497; RV64IZFHMIN:       # %bb.0:
498; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
499; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
500; RV64IZFHMIN-NEXT:    fle.s a0, fa4, fa5
501; RV64IZFHMIN-NEXT:    bnez a0, .LBB4_2
502; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
503; RV64IZFHMIN-NEXT:    ret
504; RV64IZFHMIN-NEXT:  .LBB4_2: # %if.then
505; RV64IZFHMIN-NEXT:    addi sp, sp, -16
506; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
507; RV64IZFHMIN-NEXT:    call abort
508;
509; RV32IZHINXMIN-LABEL: br_fcmp_oge:
510; RV32IZHINXMIN:       # %bb.0:
511; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
512; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
513; RV32IZHINXMIN-NEXT:    fle.s a0, a1, a0
514; RV32IZHINXMIN-NEXT:    bnez a0, .LBB4_2
515; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
516; RV32IZHINXMIN-NEXT:    ret
517; RV32IZHINXMIN-NEXT:  .LBB4_2: # %if.then
518; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
519; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
520; RV32IZHINXMIN-NEXT:    call abort
521;
522; RV64IZHINXMIN-LABEL: br_fcmp_oge:
523; RV64IZHINXMIN:       # %bb.0:
524; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
525; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
526; RV64IZHINXMIN-NEXT:    fle.s a0, a1, a0
527; RV64IZHINXMIN-NEXT:    bnez a0, .LBB4_2
528; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
529; RV64IZHINXMIN-NEXT:    ret
530; RV64IZHINXMIN-NEXT:  .LBB4_2: # %if.then
531; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
532; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
533; RV64IZHINXMIN-NEXT:    call abort
534  %1 = fcmp oge half %a, %b
535  br i1 %1, label %if.then, label %if.else
536if.else:
537  ret void
538if.then:
539  tail call void @abort()
540  unreachable
541}
542
543define void @br_fcmp_olt(half %a, half %b) nounwind {
544; RV32IZFH-LABEL: br_fcmp_olt:
545; RV32IZFH:       # %bb.0:
546; RV32IZFH-NEXT:    flt.h a0, fa0, fa1
547; RV32IZFH-NEXT:    bnez a0, .LBB5_2
548; RV32IZFH-NEXT:  # %bb.1: # %if.else
549; RV32IZFH-NEXT:    ret
550; RV32IZFH-NEXT:  .LBB5_2: # %if.then
551; RV32IZFH-NEXT:    addi sp, sp, -16
552; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
553; RV32IZFH-NEXT:    call abort
554;
555; RV64IZFH-LABEL: br_fcmp_olt:
556; RV64IZFH:       # %bb.0:
557; RV64IZFH-NEXT:    flt.h a0, fa0, fa1
558; RV64IZFH-NEXT:    bnez a0, .LBB5_2
559; RV64IZFH-NEXT:  # %bb.1: # %if.else
560; RV64IZFH-NEXT:    ret
561; RV64IZFH-NEXT:  .LBB5_2: # %if.then
562; RV64IZFH-NEXT:    addi sp, sp, -16
563; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
564; RV64IZFH-NEXT:    call abort
565;
566; RV32IZHINX-LABEL: br_fcmp_olt:
567; RV32IZHINX:       # %bb.0:
568; RV32IZHINX-NEXT:    flt.h a0, a0, a1
569; RV32IZHINX-NEXT:    bnez a0, .LBB5_2
570; RV32IZHINX-NEXT:  # %bb.1: # %if.else
571; RV32IZHINX-NEXT:    ret
572; RV32IZHINX-NEXT:  .LBB5_2: # %if.then
573; RV32IZHINX-NEXT:    addi sp, sp, -16
574; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
575; RV32IZHINX-NEXT:    call abort
576;
577; RV64IZHINX-LABEL: br_fcmp_olt:
578; RV64IZHINX:       # %bb.0:
579; RV64IZHINX-NEXT:    flt.h a0, a0, a1
580; RV64IZHINX-NEXT:    bnez a0, .LBB5_2
581; RV64IZHINX-NEXT:  # %bb.1: # %if.else
582; RV64IZHINX-NEXT:    ret
583; RV64IZHINX-NEXT:  .LBB5_2: # %if.then
584; RV64IZHINX-NEXT:    addi sp, sp, -16
585; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
586; RV64IZHINX-NEXT:    call abort
587;
588; RV32IZFHMIN-LABEL: br_fcmp_olt:
589; RV32IZFHMIN:       # %bb.0:
590; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
591; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
592; RV32IZFHMIN-NEXT:    flt.s a0, fa4, fa5
593; RV32IZFHMIN-NEXT:    bnez a0, .LBB5_2
594; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
595; RV32IZFHMIN-NEXT:    ret
596; RV32IZFHMIN-NEXT:  .LBB5_2: # %if.then
597; RV32IZFHMIN-NEXT:    addi sp, sp, -16
598; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
599; RV32IZFHMIN-NEXT:    call abort
600;
601; RV64IZFHMIN-LABEL: br_fcmp_olt:
602; RV64IZFHMIN:       # %bb.0:
603; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
604; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
605; RV64IZFHMIN-NEXT:    flt.s a0, fa4, fa5
606; RV64IZFHMIN-NEXT:    bnez a0, .LBB5_2
607; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
608; RV64IZFHMIN-NEXT:    ret
609; RV64IZFHMIN-NEXT:  .LBB5_2: # %if.then
610; RV64IZFHMIN-NEXT:    addi sp, sp, -16
611; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
612; RV64IZFHMIN-NEXT:    call abort
613;
614; RV32IZHINXMIN-LABEL: br_fcmp_olt:
615; RV32IZHINXMIN:       # %bb.0:
616; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
617; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
618; RV32IZHINXMIN-NEXT:    flt.s a0, a0, a1
619; RV32IZHINXMIN-NEXT:    bnez a0, .LBB5_2
620; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
621; RV32IZHINXMIN-NEXT:    ret
622; RV32IZHINXMIN-NEXT:  .LBB5_2: # %if.then
623; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
624; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
625; RV32IZHINXMIN-NEXT:    call abort
626;
627; RV64IZHINXMIN-LABEL: br_fcmp_olt:
628; RV64IZHINXMIN:       # %bb.0:
629; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
630; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
631; RV64IZHINXMIN-NEXT:    flt.s a0, a0, a1
632; RV64IZHINXMIN-NEXT:    bnez a0, .LBB5_2
633; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
634; RV64IZHINXMIN-NEXT:    ret
635; RV64IZHINXMIN-NEXT:  .LBB5_2: # %if.then
636; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
637; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
638; RV64IZHINXMIN-NEXT:    call abort
639  %1 = fcmp olt half %a, %b
640  br i1 %1, label %if.then, label %if.else
641if.else:
642  ret void
643if.then:
644  tail call void @abort()
645  unreachable
646}
647
648define void @br_fcmp_ole(half %a, half %b) nounwind {
649; RV32IZFH-LABEL: br_fcmp_ole:
650; RV32IZFH:       # %bb.0:
651; RV32IZFH-NEXT:    fle.h a0, fa0, fa1
652; RV32IZFH-NEXT:    bnez a0, .LBB6_2
653; RV32IZFH-NEXT:  # %bb.1: # %if.else
654; RV32IZFH-NEXT:    ret
655; RV32IZFH-NEXT:  .LBB6_2: # %if.then
656; RV32IZFH-NEXT:    addi sp, sp, -16
657; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
658; RV32IZFH-NEXT:    call abort
659;
660; RV64IZFH-LABEL: br_fcmp_ole:
661; RV64IZFH:       # %bb.0:
662; RV64IZFH-NEXT:    fle.h a0, fa0, fa1
663; RV64IZFH-NEXT:    bnez a0, .LBB6_2
664; RV64IZFH-NEXT:  # %bb.1: # %if.else
665; RV64IZFH-NEXT:    ret
666; RV64IZFH-NEXT:  .LBB6_2: # %if.then
667; RV64IZFH-NEXT:    addi sp, sp, -16
668; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
669; RV64IZFH-NEXT:    call abort
670;
671; RV32IZHINX-LABEL: br_fcmp_ole:
672; RV32IZHINX:       # %bb.0:
673; RV32IZHINX-NEXT:    fle.h a0, a0, a1
674; RV32IZHINX-NEXT:    bnez a0, .LBB6_2
675; RV32IZHINX-NEXT:  # %bb.1: # %if.else
676; RV32IZHINX-NEXT:    ret
677; RV32IZHINX-NEXT:  .LBB6_2: # %if.then
678; RV32IZHINX-NEXT:    addi sp, sp, -16
679; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
680; RV32IZHINX-NEXT:    call abort
681;
682; RV64IZHINX-LABEL: br_fcmp_ole:
683; RV64IZHINX:       # %bb.0:
684; RV64IZHINX-NEXT:    fle.h a0, a0, a1
685; RV64IZHINX-NEXT:    bnez a0, .LBB6_2
686; RV64IZHINX-NEXT:  # %bb.1: # %if.else
687; RV64IZHINX-NEXT:    ret
688; RV64IZHINX-NEXT:  .LBB6_2: # %if.then
689; RV64IZHINX-NEXT:    addi sp, sp, -16
690; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
691; RV64IZHINX-NEXT:    call abort
692;
693; RV32IZFHMIN-LABEL: br_fcmp_ole:
694; RV32IZFHMIN:       # %bb.0:
695; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
696; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
697; RV32IZFHMIN-NEXT:    fle.s a0, fa4, fa5
698; RV32IZFHMIN-NEXT:    bnez a0, .LBB6_2
699; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
700; RV32IZFHMIN-NEXT:    ret
701; RV32IZFHMIN-NEXT:  .LBB6_2: # %if.then
702; RV32IZFHMIN-NEXT:    addi sp, sp, -16
703; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
704; RV32IZFHMIN-NEXT:    call abort
705;
706; RV64IZFHMIN-LABEL: br_fcmp_ole:
707; RV64IZFHMIN:       # %bb.0:
708; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
709; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
710; RV64IZFHMIN-NEXT:    fle.s a0, fa4, fa5
711; RV64IZFHMIN-NEXT:    bnez a0, .LBB6_2
712; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
713; RV64IZFHMIN-NEXT:    ret
714; RV64IZFHMIN-NEXT:  .LBB6_2: # %if.then
715; RV64IZFHMIN-NEXT:    addi sp, sp, -16
716; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
717; RV64IZFHMIN-NEXT:    call abort
718;
719; RV32IZHINXMIN-LABEL: br_fcmp_ole:
720; RV32IZHINXMIN:       # %bb.0:
721; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
722; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
723; RV32IZHINXMIN-NEXT:    fle.s a0, a0, a1
724; RV32IZHINXMIN-NEXT:    bnez a0, .LBB6_2
725; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
726; RV32IZHINXMIN-NEXT:    ret
727; RV32IZHINXMIN-NEXT:  .LBB6_2: # %if.then
728; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
729; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
730; RV32IZHINXMIN-NEXT:    call abort
731;
732; RV64IZHINXMIN-LABEL: br_fcmp_ole:
733; RV64IZHINXMIN:       # %bb.0:
734; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
735; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
736; RV64IZHINXMIN-NEXT:    fle.s a0, a0, a1
737; RV64IZHINXMIN-NEXT:    bnez a0, .LBB6_2
738; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
739; RV64IZHINXMIN-NEXT:    ret
740; RV64IZHINXMIN-NEXT:  .LBB6_2: # %if.then
741; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
742; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
743; RV64IZHINXMIN-NEXT:    call abort
744  %1 = fcmp ole half %a, %b
745  br i1 %1, label %if.then, label %if.else
746if.else:
747  ret void
748if.then:
749  tail call void @abort()
750  unreachable
751}
752
753define void @br_fcmp_one(half %a, half %b) nounwind {
754; RV32IZFH-LABEL: br_fcmp_one:
755; RV32IZFH:       # %bb.0:
756; RV32IZFH-NEXT:    flt.h a0, fa0, fa1
757; RV32IZFH-NEXT:    flt.h a1, fa1, fa0
758; RV32IZFH-NEXT:    or a0, a1, a0
759; RV32IZFH-NEXT:    bnez a0, .LBB7_2
760; RV32IZFH-NEXT:  # %bb.1: # %if.else
761; RV32IZFH-NEXT:    ret
762; RV32IZFH-NEXT:  .LBB7_2: # %if.then
763; RV32IZFH-NEXT:    addi sp, sp, -16
764; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
765; RV32IZFH-NEXT:    call abort
766;
767; RV64IZFH-LABEL: br_fcmp_one:
768; RV64IZFH:       # %bb.0:
769; RV64IZFH-NEXT:    flt.h a0, fa0, fa1
770; RV64IZFH-NEXT:    flt.h a1, fa1, fa0
771; RV64IZFH-NEXT:    or a0, a1, a0
772; RV64IZFH-NEXT:    bnez a0, .LBB7_2
773; RV64IZFH-NEXT:  # %bb.1: # %if.else
774; RV64IZFH-NEXT:    ret
775; RV64IZFH-NEXT:  .LBB7_2: # %if.then
776; RV64IZFH-NEXT:    addi sp, sp, -16
777; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
778; RV64IZFH-NEXT:    call abort
779;
780; RV32IZHINX-LABEL: br_fcmp_one:
781; RV32IZHINX:       # %bb.0:
782; RV32IZHINX-NEXT:    flt.h a2, a0, a1
783; RV32IZHINX-NEXT:    flt.h a0, a1, a0
784; RV32IZHINX-NEXT:    or a0, a0, a2
785; RV32IZHINX-NEXT:    bnez a0, .LBB7_2
786; RV32IZHINX-NEXT:  # %bb.1: # %if.else
787; RV32IZHINX-NEXT:    ret
788; RV32IZHINX-NEXT:  .LBB7_2: # %if.then
789; RV32IZHINX-NEXT:    addi sp, sp, -16
790; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
791; RV32IZHINX-NEXT:    call abort
792;
793; RV64IZHINX-LABEL: br_fcmp_one:
794; RV64IZHINX:       # %bb.0:
795; RV64IZHINX-NEXT:    flt.h a2, a0, a1
796; RV64IZHINX-NEXT:    flt.h a0, a1, a0
797; RV64IZHINX-NEXT:    or a0, a0, a2
798; RV64IZHINX-NEXT:    bnez a0, .LBB7_2
799; RV64IZHINX-NEXT:  # %bb.1: # %if.else
800; RV64IZHINX-NEXT:    ret
801; RV64IZHINX-NEXT:  .LBB7_2: # %if.then
802; RV64IZHINX-NEXT:    addi sp, sp, -16
803; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
804; RV64IZHINX-NEXT:    call abort
805;
806; RV32IZFHMIN-LABEL: br_fcmp_one:
807; RV32IZFHMIN:       # %bb.0:
808; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
809; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
810; RV32IZFHMIN-NEXT:    flt.s a0, fa4, fa5
811; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fa4
812; RV32IZFHMIN-NEXT:    or a0, a1, a0
813; RV32IZFHMIN-NEXT:    bnez a0, .LBB7_2
814; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
815; RV32IZFHMIN-NEXT:    ret
816; RV32IZFHMIN-NEXT:  .LBB7_2: # %if.then
817; RV32IZFHMIN-NEXT:    addi sp, sp, -16
818; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
819; RV32IZFHMIN-NEXT:    call abort
820;
821; RV64IZFHMIN-LABEL: br_fcmp_one:
822; RV64IZFHMIN:       # %bb.0:
823; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
824; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
825; RV64IZFHMIN-NEXT:    flt.s a0, fa4, fa5
826; RV64IZFHMIN-NEXT:    flt.s a1, fa5, fa4
827; RV64IZFHMIN-NEXT:    or a0, a1, a0
828; RV64IZFHMIN-NEXT:    bnez a0, .LBB7_2
829; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
830; RV64IZFHMIN-NEXT:    ret
831; RV64IZFHMIN-NEXT:  .LBB7_2: # %if.then
832; RV64IZFHMIN-NEXT:    addi sp, sp, -16
833; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
834; RV64IZFHMIN-NEXT:    call abort
835;
836; RV32IZHINXMIN-LABEL: br_fcmp_one:
837; RV32IZHINXMIN:       # %bb.0:
838; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
839; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
840; RV32IZHINXMIN-NEXT:    flt.s a2, a0, a1
841; RV32IZHINXMIN-NEXT:    flt.s a0, a1, a0
842; RV32IZHINXMIN-NEXT:    or a0, a0, a2
843; RV32IZHINXMIN-NEXT:    bnez a0, .LBB7_2
844; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
845; RV32IZHINXMIN-NEXT:    ret
846; RV32IZHINXMIN-NEXT:  .LBB7_2: # %if.then
847; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
848; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
849; RV32IZHINXMIN-NEXT:    call abort
850;
851; RV64IZHINXMIN-LABEL: br_fcmp_one:
852; RV64IZHINXMIN:       # %bb.0:
853; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
854; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
855; RV64IZHINXMIN-NEXT:    flt.s a2, a0, a1
856; RV64IZHINXMIN-NEXT:    flt.s a0, a1, a0
857; RV64IZHINXMIN-NEXT:    or a0, a0, a2
858; RV64IZHINXMIN-NEXT:    bnez a0, .LBB7_2
859; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
860; RV64IZHINXMIN-NEXT:    ret
861; RV64IZHINXMIN-NEXT:  .LBB7_2: # %if.then
862; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
863; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
864; RV64IZHINXMIN-NEXT:    call abort
865  %1 = fcmp one half %a, %b
866  br i1 %1, label %if.then, label %if.else
867if.else:
868  ret void
869if.then:
870  tail call void @abort()
871  unreachable
872}
873
874define void @br_fcmp_ord(half %a, half %b) nounwind {
875; RV32IZFH-LABEL: br_fcmp_ord:
876; RV32IZFH:       # %bb.0:
877; RV32IZFH-NEXT:    feq.h a0, fa1, fa1
878; RV32IZFH-NEXT:    feq.h a1, fa0, fa0
879; RV32IZFH-NEXT:    and a0, a1, a0
880; RV32IZFH-NEXT:    bnez a0, .LBB8_2
881; RV32IZFH-NEXT:  # %bb.1: # %if.else
882; RV32IZFH-NEXT:    ret
883; RV32IZFH-NEXT:  .LBB8_2: # %if.then
884; RV32IZFH-NEXT:    addi sp, sp, -16
885; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
886; RV32IZFH-NEXT:    call abort
887;
888; RV64IZFH-LABEL: br_fcmp_ord:
889; RV64IZFH:       # %bb.0:
890; RV64IZFH-NEXT:    feq.h a0, fa1, fa1
891; RV64IZFH-NEXT:    feq.h a1, fa0, fa0
892; RV64IZFH-NEXT:    and a0, a1, a0
893; RV64IZFH-NEXT:    bnez a0, .LBB8_2
894; RV64IZFH-NEXT:  # %bb.1: # %if.else
895; RV64IZFH-NEXT:    ret
896; RV64IZFH-NEXT:  .LBB8_2: # %if.then
897; RV64IZFH-NEXT:    addi sp, sp, -16
898; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
899; RV64IZFH-NEXT:    call abort
900;
901; RV32IZHINX-LABEL: br_fcmp_ord:
902; RV32IZHINX:       # %bb.0:
903; RV32IZHINX-NEXT:    feq.h a1, a1, a1
904; RV32IZHINX-NEXT:    feq.h a0, a0, a0
905; RV32IZHINX-NEXT:    and a0, a0, a1
906; RV32IZHINX-NEXT:    bnez a0, .LBB8_2
907; RV32IZHINX-NEXT:  # %bb.1: # %if.else
908; RV32IZHINX-NEXT:    ret
909; RV32IZHINX-NEXT:  .LBB8_2: # %if.then
910; RV32IZHINX-NEXT:    addi sp, sp, -16
911; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
912; RV32IZHINX-NEXT:    call abort
913;
914; RV64IZHINX-LABEL: br_fcmp_ord:
915; RV64IZHINX:       # %bb.0:
916; RV64IZHINX-NEXT:    feq.h a1, a1, a1
917; RV64IZHINX-NEXT:    feq.h a0, a0, a0
918; RV64IZHINX-NEXT:    and a0, a0, a1
919; RV64IZHINX-NEXT:    bnez a0, .LBB8_2
920; RV64IZHINX-NEXT:  # %bb.1: # %if.else
921; RV64IZHINX-NEXT:    ret
922; RV64IZHINX-NEXT:  .LBB8_2: # %if.then
923; RV64IZHINX-NEXT:    addi sp, sp, -16
924; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
925; RV64IZHINX-NEXT:    call abort
926;
927; RV32IZFHMIN-LABEL: br_fcmp_ord:
928; RV32IZFHMIN:       # %bb.0:
929; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
930; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
931; RV32IZFHMIN-NEXT:    feq.s a0, fa5, fa5
932; RV32IZFHMIN-NEXT:    feq.s a1, fa4, fa4
933; RV32IZFHMIN-NEXT:    and a0, a1, a0
934; RV32IZFHMIN-NEXT:    bnez a0, .LBB8_2
935; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
936; RV32IZFHMIN-NEXT:    ret
937; RV32IZFHMIN-NEXT:  .LBB8_2: # %if.then
938; RV32IZFHMIN-NEXT:    addi sp, sp, -16
939; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
940; RV32IZFHMIN-NEXT:    call abort
941;
942; RV64IZFHMIN-LABEL: br_fcmp_ord:
943; RV64IZFHMIN:       # %bb.0:
944; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
945; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
946; RV64IZFHMIN-NEXT:    feq.s a0, fa5, fa5
947; RV64IZFHMIN-NEXT:    feq.s a1, fa4, fa4
948; RV64IZFHMIN-NEXT:    and a0, a1, a0
949; RV64IZFHMIN-NEXT:    bnez a0, .LBB8_2
950; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
951; RV64IZFHMIN-NEXT:    ret
952; RV64IZFHMIN-NEXT:  .LBB8_2: # %if.then
953; RV64IZFHMIN-NEXT:    addi sp, sp, -16
954; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
955; RV64IZFHMIN-NEXT:    call abort
956;
957; RV32IZHINXMIN-LABEL: br_fcmp_ord:
958; RV32IZHINXMIN:       # %bb.0:
959; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
960; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
961; RV32IZHINXMIN-NEXT:    feq.s a1, a1, a1
962; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a0
963; RV32IZHINXMIN-NEXT:    and a0, a0, a1
964; RV32IZHINXMIN-NEXT:    bnez a0, .LBB8_2
965; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
966; RV32IZHINXMIN-NEXT:    ret
967; RV32IZHINXMIN-NEXT:  .LBB8_2: # %if.then
968; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
969; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
970; RV32IZHINXMIN-NEXT:    call abort
971;
972; RV64IZHINXMIN-LABEL: br_fcmp_ord:
973; RV64IZHINXMIN:       # %bb.0:
974; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
975; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
976; RV64IZHINXMIN-NEXT:    feq.s a1, a1, a1
977; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a0
978; RV64IZHINXMIN-NEXT:    and a0, a0, a1
979; RV64IZHINXMIN-NEXT:    bnez a0, .LBB8_2
980; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
981; RV64IZHINXMIN-NEXT:    ret
982; RV64IZHINXMIN-NEXT:  .LBB8_2: # %if.then
983; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
984; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
985; RV64IZHINXMIN-NEXT:    call abort
986  %1 = fcmp ord half %a, %b
987  br i1 %1, label %if.then, label %if.else
988if.else:
989  ret void
990if.then:
991  tail call void @abort()
992  unreachable
993}
994
995define void @br_fcmp_ueq(half %a, half %b) nounwind {
996; RV32IZFH-LABEL: br_fcmp_ueq:
997; RV32IZFH:       # %bb.0:
998; RV32IZFH-NEXT:    flt.h a0, fa0, fa1
999; RV32IZFH-NEXT:    flt.h a1, fa1, fa0
1000; RV32IZFH-NEXT:    or a0, a1, a0
1001; RV32IZFH-NEXT:    beqz a0, .LBB9_2
1002; RV32IZFH-NEXT:  # %bb.1: # %if.else
1003; RV32IZFH-NEXT:    ret
1004; RV32IZFH-NEXT:  .LBB9_2: # %if.then
1005; RV32IZFH-NEXT:    addi sp, sp, -16
1006; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1007; RV32IZFH-NEXT:    call abort
1008;
1009; RV64IZFH-LABEL: br_fcmp_ueq:
1010; RV64IZFH:       # %bb.0:
1011; RV64IZFH-NEXT:    flt.h a0, fa0, fa1
1012; RV64IZFH-NEXT:    flt.h a1, fa1, fa0
1013; RV64IZFH-NEXT:    or a0, a1, a0
1014; RV64IZFH-NEXT:    beqz a0, .LBB9_2
1015; RV64IZFH-NEXT:  # %bb.1: # %if.else
1016; RV64IZFH-NEXT:    ret
1017; RV64IZFH-NEXT:  .LBB9_2: # %if.then
1018; RV64IZFH-NEXT:    addi sp, sp, -16
1019; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1020; RV64IZFH-NEXT:    call abort
1021;
1022; RV32IZHINX-LABEL: br_fcmp_ueq:
1023; RV32IZHINX:       # %bb.0:
1024; RV32IZHINX-NEXT:    flt.h a2, a0, a1
1025; RV32IZHINX-NEXT:    flt.h a0, a1, a0
1026; RV32IZHINX-NEXT:    or a0, a0, a2
1027; RV32IZHINX-NEXT:    beqz a0, .LBB9_2
1028; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1029; RV32IZHINX-NEXT:    ret
1030; RV32IZHINX-NEXT:  .LBB9_2: # %if.then
1031; RV32IZHINX-NEXT:    addi sp, sp, -16
1032; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1033; RV32IZHINX-NEXT:    call abort
1034;
1035; RV64IZHINX-LABEL: br_fcmp_ueq:
1036; RV64IZHINX:       # %bb.0:
1037; RV64IZHINX-NEXT:    flt.h a2, a0, a1
1038; RV64IZHINX-NEXT:    flt.h a0, a1, a0
1039; RV64IZHINX-NEXT:    or a0, a0, a2
1040; RV64IZHINX-NEXT:    beqz a0, .LBB9_2
1041; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1042; RV64IZHINX-NEXT:    ret
1043; RV64IZHINX-NEXT:  .LBB9_2: # %if.then
1044; RV64IZHINX-NEXT:    addi sp, sp, -16
1045; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1046; RV64IZHINX-NEXT:    call abort
1047;
1048; RV32IZFHMIN-LABEL: br_fcmp_ueq:
1049; RV32IZFHMIN:       # %bb.0:
1050; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1051; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1052; RV32IZFHMIN-NEXT:    flt.s a0, fa4, fa5
1053; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fa4
1054; RV32IZFHMIN-NEXT:    or a0, a1, a0
1055; RV32IZFHMIN-NEXT:    beqz a0, .LBB9_2
1056; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1057; RV32IZFHMIN-NEXT:    ret
1058; RV32IZFHMIN-NEXT:  .LBB9_2: # %if.then
1059; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1060; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1061; RV32IZFHMIN-NEXT:    call abort
1062;
1063; RV64IZFHMIN-LABEL: br_fcmp_ueq:
1064; RV64IZFHMIN:       # %bb.0:
1065; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1066; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1067; RV64IZFHMIN-NEXT:    flt.s a0, fa4, fa5
1068; RV64IZFHMIN-NEXT:    flt.s a1, fa5, fa4
1069; RV64IZFHMIN-NEXT:    or a0, a1, a0
1070; RV64IZFHMIN-NEXT:    beqz a0, .LBB9_2
1071; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1072; RV64IZFHMIN-NEXT:    ret
1073; RV64IZFHMIN-NEXT:  .LBB9_2: # %if.then
1074; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1075; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1076; RV64IZFHMIN-NEXT:    call abort
1077;
1078; RV32IZHINXMIN-LABEL: br_fcmp_ueq:
1079; RV32IZHINXMIN:       # %bb.0:
1080; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1081; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1082; RV32IZHINXMIN-NEXT:    flt.s a2, a0, a1
1083; RV32IZHINXMIN-NEXT:    flt.s a0, a1, a0
1084; RV32IZHINXMIN-NEXT:    or a0, a0, a2
1085; RV32IZHINXMIN-NEXT:    beqz a0, .LBB9_2
1086; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1087; RV32IZHINXMIN-NEXT:    ret
1088; RV32IZHINXMIN-NEXT:  .LBB9_2: # %if.then
1089; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1090; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1091; RV32IZHINXMIN-NEXT:    call abort
1092;
1093; RV64IZHINXMIN-LABEL: br_fcmp_ueq:
1094; RV64IZHINXMIN:       # %bb.0:
1095; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1096; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1097; RV64IZHINXMIN-NEXT:    flt.s a2, a0, a1
1098; RV64IZHINXMIN-NEXT:    flt.s a0, a1, a0
1099; RV64IZHINXMIN-NEXT:    or a0, a0, a2
1100; RV64IZHINXMIN-NEXT:    beqz a0, .LBB9_2
1101; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1102; RV64IZHINXMIN-NEXT:    ret
1103; RV64IZHINXMIN-NEXT:  .LBB9_2: # %if.then
1104; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1105; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1106; RV64IZHINXMIN-NEXT:    call abort
1107  %1 = fcmp ueq half %a, %b
1108  br i1 %1, label %if.then, label %if.else
1109if.else:
1110  ret void
1111if.then:
1112  tail call void @abort()
1113  unreachable
1114}
1115
1116define void @br_fcmp_ugt(half %a, half %b) nounwind {
1117; RV32IZFH-LABEL: br_fcmp_ugt:
1118; RV32IZFH:       # %bb.0:
1119; RV32IZFH-NEXT:    fle.h a0, fa0, fa1
1120; RV32IZFH-NEXT:    beqz a0, .LBB10_2
1121; RV32IZFH-NEXT:  # %bb.1: # %if.else
1122; RV32IZFH-NEXT:    ret
1123; RV32IZFH-NEXT:  .LBB10_2: # %if.then
1124; RV32IZFH-NEXT:    addi sp, sp, -16
1125; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1126; RV32IZFH-NEXT:    call abort
1127;
1128; RV64IZFH-LABEL: br_fcmp_ugt:
1129; RV64IZFH:       # %bb.0:
1130; RV64IZFH-NEXT:    fle.h a0, fa0, fa1
1131; RV64IZFH-NEXT:    beqz a0, .LBB10_2
1132; RV64IZFH-NEXT:  # %bb.1: # %if.else
1133; RV64IZFH-NEXT:    ret
1134; RV64IZFH-NEXT:  .LBB10_2: # %if.then
1135; RV64IZFH-NEXT:    addi sp, sp, -16
1136; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1137; RV64IZFH-NEXT:    call abort
1138;
1139; RV32IZHINX-LABEL: br_fcmp_ugt:
1140; RV32IZHINX:       # %bb.0:
1141; RV32IZHINX-NEXT:    fle.h a0, a0, a1
1142; RV32IZHINX-NEXT:    beqz a0, .LBB10_2
1143; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1144; RV32IZHINX-NEXT:    ret
1145; RV32IZHINX-NEXT:  .LBB10_2: # %if.then
1146; RV32IZHINX-NEXT:    addi sp, sp, -16
1147; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1148; RV32IZHINX-NEXT:    call abort
1149;
1150; RV64IZHINX-LABEL: br_fcmp_ugt:
1151; RV64IZHINX:       # %bb.0:
1152; RV64IZHINX-NEXT:    fle.h a0, a0, a1
1153; RV64IZHINX-NEXT:    beqz a0, .LBB10_2
1154; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1155; RV64IZHINX-NEXT:    ret
1156; RV64IZHINX-NEXT:  .LBB10_2: # %if.then
1157; RV64IZHINX-NEXT:    addi sp, sp, -16
1158; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1159; RV64IZHINX-NEXT:    call abort
1160;
1161; RV32IZFHMIN-LABEL: br_fcmp_ugt:
1162; RV32IZFHMIN:       # %bb.0:
1163; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1164; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1165; RV32IZFHMIN-NEXT:    fle.s a0, fa4, fa5
1166; RV32IZFHMIN-NEXT:    beqz a0, .LBB10_2
1167; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1168; RV32IZFHMIN-NEXT:    ret
1169; RV32IZFHMIN-NEXT:  .LBB10_2: # %if.then
1170; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1171; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1172; RV32IZFHMIN-NEXT:    call abort
1173;
1174; RV64IZFHMIN-LABEL: br_fcmp_ugt:
1175; RV64IZFHMIN:       # %bb.0:
1176; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1177; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1178; RV64IZFHMIN-NEXT:    fle.s a0, fa4, fa5
1179; RV64IZFHMIN-NEXT:    beqz a0, .LBB10_2
1180; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1181; RV64IZFHMIN-NEXT:    ret
1182; RV64IZFHMIN-NEXT:  .LBB10_2: # %if.then
1183; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1184; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1185; RV64IZFHMIN-NEXT:    call abort
1186;
1187; RV32IZHINXMIN-LABEL: br_fcmp_ugt:
1188; RV32IZHINXMIN:       # %bb.0:
1189; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1190; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1191; RV32IZHINXMIN-NEXT:    fle.s a0, a0, a1
1192; RV32IZHINXMIN-NEXT:    beqz a0, .LBB10_2
1193; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1194; RV32IZHINXMIN-NEXT:    ret
1195; RV32IZHINXMIN-NEXT:  .LBB10_2: # %if.then
1196; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1197; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1198; RV32IZHINXMIN-NEXT:    call abort
1199;
1200; RV64IZHINXMIN-LABEL: br_fcmp_ugt:
1201; RV64IZHINXMIN:       # %bb.0:
1202; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1203; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1204; RV64IZHINXMIN-NEXT:    fle.s a0, a0, a1
1205; RV64IZHINXMIN-NEXT:    beqz a0, .LBB10_2
1206; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1207; RV64IZHINXMIN-NEXT:    ret
1208; RV64IZHINXMIN-NEXT:  .LBB10_2: # %if.then
1209; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1210; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1211; RV64IZHINXMIN-NEXT:    call abort
1212  %1 = fcmp ugt half %a, %b
1213  br i1 %1, label %if.then, label %if.else
1214if.else:
1215  ret void
1216if.then:
1217  tail call void @abort()
1218  unreachable
1219}
1220
1221define void @br_fcmp_uge(half %a, half %b) nounwind {
1222; RV32IZFH-LABEL: br_fcmp_uge:
1223; RV32IZFH:       # %bb.0:
1224; RV32IZFH-NEXT:    flt.h a0, fa0, fa1
1225; RV32IZFH-NEXT:    beqz a0, .LBB11_2
1226; RV32IZFH-NEXT:  # %bb.1: # %if.else
1227; RV32IZFH-NEXT:    ret
1228; RV32IZFH-NEXT:  .LBB11_2: # %if.then
1229; RV32IZFH-NEXT:    addi sp, sp, -16
1230; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1231; RV32IZFH-NEXT:    call abort
1232;
1233; RV64IZFH-LABEL: br_fcmp_uge:
1234; RV64IZFH:       # %bb.0:
1235; RV64IZFH-NEXT:    flt.h a0, fa0, fa1
1236; RV64IZFH-NEXT:    beqz a0, .LBB11_2
1237; RV64IZFH-NEXT:  # %bb.1: # %if.else
1238; RV64IZFH-NEXT:    ret
1239; RV64IZFH-NEXT:  .LBB11_2: # %if.then
1240; RV64IZFH-NEXT:    addi sp, sp, -16
1241; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1242; RV64IZFH-NEXT:    call abort
1243;
1244; RV32IZHINX-LABEL: br_fcmp_uge:
1245; RV32IZHINX:       # %bb.0:
1246; RV32IZHINX-NEXT:    flt.h a0, a0, a1
1247; RV32IZHINX-NEXT:    beqz a0, .LBB11_2
1248; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1249; RV32IZHINX-NEXT:    ret
1250; RV32IZHINX-NEXT:  .LBB11_2: # %if.then
1251; RV32IZHINX-NEXT:    addi sp, sp, -16
1252; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1253; RV32IZHINX-NEXT:    call abort
1254;
1255; RV64IZHINX-LABEL: br_fcmp_uge:
1256; RV64IZHINX:       # %bb.0:
1257; RV64IZHINX-NEXT:    flt.h a0, a0, a1
1258; RV64IZHINX-NEXT:    beqz a0, .LBB11_2
1259; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1260; RV64IZHINX-NEXT:    ret
1261; RV64IZHINX-NEXT:  .LBB11_2: # %if.then
1262; RV64IZHINX-NEXT:    addi sp, sp, -16
1263; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1264; RV64IZHINX-NEXT:    call abort
1265;
1266; RV32IZFHMIN-LABEL: br_fcmp_uge:
1267; RV32IZFHMIN:       # %bb.0:
1268; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1269; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1270; RV32IZFHMIN-NEXT:    flt.s a0, fa4, fa5
1271; RV32IZFHMIN-NEXT:    beqz a0, .LBB11_2
1272; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1273; RV32IZFHMIN-NEXT:    ret
1274; RV32IZFHMIN-NEXT:  .LBB11_2: # %if.then
1275; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1276; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1277; RV32IZFHMIN-NEXT:    call abort
1278;
1279; RV64IZFHMIN-LABEL: br_fcmp_uge:
1280; RV64IZFHMIN:       # %bb.0:
1281; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1282; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1283; RV64IZFHMIN-NEXT:    flt.s a0, fa4, fa5
1284; RV64IZFHMIN-NEXT:    beqz a0, .LBB11_2
1285; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1286; RV64IZFHMIN-NEXT:    ret
1287; RV64IZFHMIN-NEXT:  .LBB11_2: # %if.then
1288; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1289; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1290; RV64IZFHMIN-NEXT:    call abort
1291;
1292; RV32IZHINXMIN-LABEL: br_fcmp_uge:
1293; RV32IZHINXMIN:       # %bb.0:
1294; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1295; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1296; RV32IZHINXMIN-NEXT:    flt.s a0, a0, a1
1297; RV32IZHINXMIN-NEXT:    beqz a0, .LBB11_2
1298; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1299; RV32IZHINXMIN-NEXT:    ret
1300; RV32IZHINXMIN-NEXT:  .LBB11_2: # %if.then
1301; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1302; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1303; RV32IZHINXMIN-NEXT:    call abort
1304;
1305; RV64IZHINXMIN-LABEL: br_fcmp_uge:
1306; RV64IZHINXMIN:       # %bb.0:
1307; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1308; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1309; RV64IZHINXMIN-NEXT:    flt.s a0, a0, a1
1310; RV64IZHINXMIN-NEXT:    beqz a0, .LBB11_2
1311; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1312; RV64IZHINXMIN-NEXT:    ret
1313; RV64IZHINXMIN-NEXT:  .LBB11_2: # %if.then
1314; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1315; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1316; RV64IZHINXMIN-NEXT:    call abort
1317  %1 = fcmp uge half %a, %b
1318  br i1 %1, label %if.then, label %if.else
1319if.else:
1320  ret void
1321if.then:
1322  tail call void @abort()
1323  unreachable
1324}
1325
1326define void @br_fcmp_ult(half %a, half %b) nounwind {
1327; RV32IZFH-LABEL: br_fcmp_ult:
1328; RV32IZFH:       # %bb.0:
1329; RV32IZFH-NEXT:    fle.h a0, fa1, fa0
1330; RV32IZFH-NEXT:    beqz a0, .LBB12_2
1331; RV32IZFH-NEXT:  # %bb.1: # %if.else
1332; RV32IZFH-NEXT:    ret
1333; RV32IZFH-NEXT:  .LBB12_2: # %if.then
1334; RV32IZFH-NEXT:    addi sp, sp, -16
1335; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1336; RV32IZFH-NEXT:    call abort
1337;
1338; RV64IZFH-LABEL: br_fcmp_ult:
1339; RV64IZFH:       # %bb.0:
1340; RV64IZFH-NEXT:    fle.h a0, fa1, fa0
1341; RV64IZFH-NEXT:    beqz a0, .LBB12_2
1342; RV64IZFH-NEXT:  # %bb.1: # %if.else
1343; RV64IZFH-NEXT:    ret
1344; RV64IZFH-NEXT:  .LBB12_2: # %if.then
1345; RV64IZFH-NEXT:    addi sp, sp, -16
1346; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1347; RV64IZFH-NEXT:    call abort
1348;
1349; RV32IZHINX-LABEL: br_fcmp_ult:
1350; RV32IZHINX:       # %bb.0:
1351; RV32IZHINX-NEXT:    fle.h a0, a1, a0
1352; RV32IZHINX-NEXT:    beqz a0, .LBB12_2
1353; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1354; RV32IZHINX-NEXT:    ret
1355; RV32IZHINX-NEXT:  .LBB12_2: # %if.then
1356; RV32IZHINX-NEXT:    addi sp, sp, -16
1357; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1358; RV32IZHINX-NEXT:    call abort
1359;
1360; RV64IZHINX-LABEL: br_fcmp_ult:
1361; RV64IZHINX:       # %bb.0:
1362; RV64IZHINX-NEXT:    fle.h a0, a1, a0
1363; RV64IZHINX-NEXT:    beqz a0, .LBB12_2
1364; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1365; RV64IZHINX-NEXT:    ret
1366; RV64IZHINX-NEXT:  .LBB12_2: # %if.then
1367; RV64IZHINX-NEXT:    addi sp, sp, -16
1368; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1369; RV64IZHINX-NEXT:    call abort
1370;
1371; RV32IZFHMIN-LABEL: br_fcmp_ult:
1372; RV32IZFHMIN:       # %bb.0:
1373; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
1374; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
1375; RV32IZFHMIN-NEXT:    fle.s a0, fa4, fa5
1376; RV32IZFHMIN-NEXT:    beqz a0, .LBB12_2
1377; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1378; RV32IZFHMIN-NEXT:    ret
1379; RV32IZFHMIN-NEXT:  .LBB12_2: # %if.then
1380; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1381; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1382; RV32IZFHMIN-NEXT:    call abort
1383;
1384; RV64IZFHMIN-LABEL: br_fcmp_ult:
1385; RV64IZFHMIN:       # %bb.0:
1386; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
1387; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
1388; RV64IZFHMIN-NEXT:    fle.s a0, fa4, fa5
1389; RV64IZFHMIN-NEXT:    beqz a0, .LBB12_2
1390; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1391; RV64IZFHMIN-NEXT:    ret
1392; RV64IZFHMIN-NEXT:  .LBB12_2: # %if.then
1393; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1394; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1395; RV64IZFHMIN-NEXT:    call abort
1396;
1397; RV32IZHINXMIN-LABEL: br_fcmp_ult:
1398; RV32IZHINXMIN:       # %bb.0:
1399; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1400; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1401; RV32IZHINXMIN-NEXT:    fle.s a0, a1, a0
1402; RV32IZHINXMIN-NEXT:    beqz a0, .LBB12_2
1403; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1404; RV32IZHINXMIN-NEXT:    ret
1405; RV32IZHINXMIN-NEXT:  .LBB12_2: # %if.then
1406; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1407; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1408; RV32IZHINXMIN-NEXT:    call abort
1409;
1410; RV64IZHINXMIN-LABEL: br_fcmp_ult:
1411; RV64IZHINXMIN:       # %bb.0:
1412; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1413; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1414; RV64IZHINXMIN-NEXT:    fle.s a0, a1, a0
1415; RV64IZHINXMIN-NEXT:    beqz a0, .LBB12_2
1416; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1417; RV64IZHINXMIN-NEXT:    ret
1418; RV64IZHINXMIN-NEXT:  .LBB12_2: # %if.then
1419; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1420; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1421; RV64IZHINXMIN-NEXT:    call abort
1422  %1 = fcmp ult half %a, %b
1423  br i1 %1, label %if.then, label %if.else
1424if.else:
1425  ret void
1426if.then:
1427  tail call void @abort()
1428  unreachable
1429}
1430
1431define void @br_fcmp_ule(half %a, half %b) nounwind {
1432; RV32IZFH-LABEL: br_fcmp_ule:
1433; RV32IZFH:       # %bb.0:
1434; RV32IZFH-NEXT:    flt.h a0, fa1, fa0
1435; RV32IZFH-NEXT:    beqz a0, .LBB13_2
1436; RV32IZFH-NEXT:  # %bb.1: # %if.else
1437; RV32IZFH-NEXT:    ret
1438; RV32IZFH-NEXT:  .LBB13_2: # %if.then
1439; RV32IZFH-NEXT:    addi sp, sp, -16
1440; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1441; RV32IZFH-NEXT:    call abort
1442;
1443; RV64IZFH-LABEL: br_fcmp_ule:
1444; RV64IZFH:       # %bb.0:
1445; RV64IZFH-NEXT:    flt.h a0, fa1, fa0
1446; RV64IZFH-NEXT:    beqz a0, .LBB13_2
1447; RV64IZFH-NEXT:  # %bb.1: # %if.else
1448; RV64IZFH-NEXT:    ret
1449; RV64IZFH-NEXT:  .LBB13_2: # %if.then
1450; RV64IZFH-NEXT:    addi sp, sp, -16
1451; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1452; RV64IZFH-NEXT:    call abort
1453;
1454; RV32IZHINX-LABEL: br_fcmp_ule:
1455; RV32IZHINX:       # %bb.0:
1456; RV32IZHINX-NEXT:    flt.h a0, a1, a0
1457; RV32IZHINX-NEXT:    beqz a0, .LBB13_2
1458; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1459; RV32IZHINX-NEXT:    ret
1460; RV32IZHINX-NEXT:  .LBB13_2: # %if.then
1461; RV32IZHINX-NEXT:    addi sp, sp, -16
1462; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1463; RV32IZHINX-NEXT:    call abort
1464;
1465; RV64IZHINX-LABEL: br_fcmp_ule:
1466; RV64IZHINX:       # %bb.0:
1467; RV64IZHINX-NEXT:    flt.h a0, a1, a0
1468; RV64IZHINX-NEXT:    beqz a0, .LBB13_2
1469; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1470; RV64IZHINX-NEXT:    ret
1471; RV64IZHINX-NEXT:  .LBB13_2: # %if.then
1472; RV64IZHINX-NEXT:    addi sp, sp, -16
1473; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1474; RV64IZHINX-NEXT:    call abort
1475;
1476; RV32IZFHMIN-LABEL: br_fcmp_ule:
1477; RV32IZFHMIN:       # %bb.0:
1478; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
1479; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
1480; RV32IZFHMIN-NEXT:    flt.s a0, fa4, fa5
1481; RV32IZFHMIN-NEXT:    beqz a0, .LBB13_2
1482; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1483; RV32IZFHMIN-NEXT:    ret
1484; RV32IZFHMIN-NEXT:  .LBB13_2: # %if.then
1485; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1486; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1487; RV32IZFHMIN-NEXT:    call abort
1488;
1489; RV64IZFHMIN-LABEL: br_fcmp_ule:
1490; RV64IZFHMIN:       # %bb.0:
1491; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0
1492; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa1
1493; RV64IZFHMIN-NEXT:    flt.s a0, fa4, fa5
1494; RV64IZFHMIN-NEXT:    beqz a0, .LBB13_2
1495; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1496; RV64IZFHMIN-NEXT:    ret
1497; RV64IZFHMIN-NEXT:  .LBB13_2: # %if.then
1498; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1499; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1500; RV64IZFHMIN-NEXT:    call abort
1501;
1502; RV32IZHINXMIN-LABEL: br_fcmp_ule:
1503; RV32IZHINXMIN:       # %bb.0:
1504; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1505; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1506; RV32IZHINXMIN-NEXT:    flt.s a0, a1, a0
1507; RV32IZHINXMIN-NEXT:    beqz a0, .LBB13_2
1508; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1509; RV32IZHINXMIN-NEXT:    ret
1510; RV32IZHINXMIN-NEXT:  .LBB13_2: # %if.then
1511; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1512; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1513; RV32IZHINXMIN-NEXT:    call abort
1514;
1515; RV64IZHINXMIN-LABEL: br_fcmp_ule:
1516; RV64IZHINXMIN:       # %bb.0:
1517; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1518; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1519; RV64IZHINXMIN-NEXT:    flt.s a0, a1, a0
1520; RV64IZHINXMIN-NEXT:    beqz a0, .LBB13_2
1521; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1522; RV64IZHINXMIN-NEXT:    ret
1523; RV64IZHINXMIN-NEXT:  .LBB13_2: # %if.then
1524; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1525; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1526; RV64IZHINXMIN-NEXT:    call abort
1527  %1 = fcmp ule half %a, %b
1528  br i1 %1, label %if.then, label %if.else
1529if.else:
1530  ret void
1531if.then:
1532  tail call void @abort()
1533  unreachable
1534}
1535
1536define void @br_fcmp_une(half %a, half %b) nounwind {
1537; RV32IZFH-LABEL: br_fcmp_une:
1538; RV32IZFH:       # %bb.0:
1539; RV32IZFH-NEXT:    feq.h a0, fa0, fa1
1540; RV32IZFH-NEXT:    beqz a0, .LBB14_2
1541; RV32IZFH-NEXT:  # %bb.1: # %if.else
1542; RV32IZFH-NEXT:    ret
1543; RV32IZFH-NEXT:  .LBB14_2: # %if.then
1544; RV32IZFH-NEXT:    addi sp, sp, -16
1545; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1546; RV32IZFH-NEXT:    call abort
1547;
1548; RV64IZFH-LABEL: br_fcmp_une:
1549; RV64IZFH:       # %bb.0:
1550; RV64IZFH-NEXT:    feq.h a0, fa0, fa1
1551; RV64IZFH-NEXT:    beqz a0, .LBB14_2
1552; RV64IZFH-NEXT:  # %bb.1: # %if.else
1553; RV64IZFH-NEXT:    ret
1554; RV64IZFH-NEXT:  .LBB14_2: # %if.then
1555; RV64IZFH-NEXT:    addi sp, sp, -16
1556; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1557; RV64IZFH-NEXT:    call abort
1558;
1559; RV32IZHINX-LABEL: br_fcmp_une:
1560; RV32IZHINX:       # %bb.0:
1561; RV32IZHINX-NEXT:    feq.h a0, a0, a1
1562; RV32IZHINX-NEXT:    beqz a0, .LBB14_2
1563; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1564; RV32IZHINX-NEXT:    ret
1565; RV32IZHINX-NEXT:  .LBB14_2: # %if.then
1566; RV32IZHINX-NEXT:    addi sp, sp, -16
1567; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1568; RV32IZHINX-NEXT:    call abort
1569;
1570; RV64IZHINX-LABEL: br_fcmp_une:
1571; RV64IZHINX:       # %bb.0:
1572; RV64IZHINX-NEXT:    feq.h a0, a0, a1
1573; RV64IZHINX-NEXT:    beqz a0, .LBB14_2
1574; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1575; RV64IZHINX-NEXT:    ret
1576; RV64IZHINX-NEXT:  .LBB14_2: # %if.then
1577; RV64IZHINX-NEXT:    addi sp, sp, -16
1578; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1579; RV64IZHINX-NEXT:    call abort
1580;
1581; RV32IZFHMIN-LABEL: br_fcmp_une:
1582; RV32IZFHMIN:       # %bb.0:
1583; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1584; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1585; RV32IZFHMIN-NEXT:    feq.s a0, fa4, fa5
1586; RV32IZFHMIN-NEXT:    beqz a0, .LBB14_2
1587; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1588; RV32IZFHMIN-NEXT:    ret
1589; RV32IZFHMIN-NEXT:  .LBB14_2: # %if.then
1590; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1591; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1592; RV32IZFHMIN-NEXT:    call abort
1593;
1594; RV64IZFHMIN-LABEL: br_fcmp_une:
1595; RV64IZFHMIN:       # %bb.0:
1596; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1597; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1598; RV64IZFHMIN-NEXT:    feq.s a0, fa4, fa5
1599; RV64IZFHMIN-NEXT:    beqz a0, .LBB14_2
1600; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1601; RV64IZFHMIN-NEXT:    ret
1602; RV64IZFHMIN-NEXT:  .LBB14_2: # %if.then
1603; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1604; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1605; RV64IZFHMIN-NEXT:    call abort
1606;
1607; RV32IZHINXMIN-LABEL: br_fcmp_une:
1608; RV32IZHINXMIN:       # %bb.0:
1609; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1610; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1611; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a1
1612; RV32IZHINXMIN-NEXT:    beqz a0, .LBB14_2
1613; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1614; RV32IZHINXMIN-NEXT:    ret
1615; RV32IZHINXMIN-NEXT:  .LBB14_2: # %if.then
1616; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1617; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1618; RV32IZHINXMIN-NEXT:    call abort
1619;
1620; RV64IZHINXMIN-LABEL: br_fcmp_une:
1621; RV64IZHINXMIN:       # %bb.0:
1622; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1623; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1624; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a1
1625; RV64IZHINXMIN-NEXT:    beqz a0, .LBB14_2
1626; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1627; RV64IZHINXMIN-NEXT:    ret
1628; RV64IZHINXMIN-NEXT:  .LBB14_2: # %if.then
1629; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1630; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1631; RV64IZHINXMIN-NEXT:    call abort
1632  %1 = fcmp une half %a, %b
1633  br i1 %1, label %if.then, label %if.else
1634if.else:
1635  ret void
1636if.then:
1637  tail call void @abort()
1638  unreachable
1639}
1640
1641define void @br_fcmp_uno(half %a, half %b) nounwind {
1642; RV32IZFH-LABEL: br_fcmp_uno:
1643; RV32IZFH:       # %bb.0:
1644; RV32IZFH-NEXT:    feq.h a0, fa1, fa1
1645; RV32IZFH-NEXT:    feq.h a1, fa0, fa0
1646; RV32IZFH-NEXT:    and a0, a1, a0
1647; RV32IZFH-NEXT:    beqz a0, .LBB15_2
1648; RV32IZFH-NEXT:  # %bb.1: # %if.else
1649; RV32IZFH-NEXT:    ret
1650; RV32IZFH-NEXT:  .LBB15_2: # %if.then
1651; RV32IZFH-NEXT:    addi sp, sp, -16
1652; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1653; RV32IZFH-NEXT:    call abort
1654;
1655; RV64IZFH-LABEL: br_fcmp_uno:
1656; RV64IZFH:       # %bb.0:
1657; RV64IZFH-NEXT:    feq.h a0, fa1, fa1
1658; RV64IZFH-NEXT:    feq.h a1, fa0, fa0
1659; RV64IZFH-NEXT:    and a0, a1, a0
1660; RV64IZFH-NEXT:    beqz a0, .LBB15_2
1661; RV64IZFH-NEXT:  # %bb.1: # %if.else
1662; RV64IZFH-NEXT:    ret
1663; RV64IZFH-NEXT:  .LBB15_2: # %if.then
1664; RV64IZFH-NEXT:    addi sp, sp, -16
1665; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1666; RV64IZFH-NEXT:    call abort
1667;
1668; RV32IZHINX-LABEL: br_fcmp_uno:
1669; RV32IZHINX:       # %bb.0:
1670; RV32IZHINX-NEXT:    feq.h a1, a1, a1
1671; RV32IZHINX-NEXT:    feq.h a0, a0, a0
1672; RV32IZHINX-NEXT:    and a0, a0, a1
1673; RV32IZHINX-NEXT:    beqz a0, .LBB15_2
1674; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1675; RV32IZHINX-NEXT:    ret
1676; RV32IZHINX-NEXT:  .LBB15_2: # %if.then
1677; RV32IZHINX-NEXT:    addi sp, sp, -16
1678; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1679; RV32IZHINX-NEXT:    call abort
1680;
1681; RV64IZHINX-LABEL: br_fcmp_uno:
1682; RV64IZHINX:       # %bb.0:
1683; RV64IZHINX-NEXT:    feq.h a1, a1, a1
1684; RV64IZHINX-NEXT:    feq.h a0, a0, a0
1685; RV64IZHINX-NEXT:    and a0, a0, a1
1686; RV64IZHINX-NEXT:    beqz a0, .LBB15_2
1687; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1688; RV64IZHINX-NEXT:    ret
1689; RV64IZHINX-NEXT:  .LBB15_2: # %if.then
1690; RV64IZHINX-NEXT:    addi sp, sp, -16
1691; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1692; RV64IZHINX-NEXT:    call abort
1693;
1694; RV32IZFHMIN-LABEL: br_fcmp_uno:
1695; RV32IZFHMIN:       # %bb.0:
1696; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1697; RV32IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1698; RV32IZFHMIN-NEXT:    feq.s a0, fa5, fa5
1699; RV32IZFHMIN-NEXT:    feq.s a1, fa4, fa4
1700; RV32IZFHMIN-NEXT:    and a0, a1, a0
1701; RV32IZFHMIN-NEXT:    beqz a0, .LBB15_2
1702; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1703; RV32IZFHMIN-NEXT:    ret
1704; RV32IZFHMIN-NEXT:  .LBB15_2: # %if.then
1705; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1706; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1707; RV32IZFHMIN-NEXT:    call abort
1708;
1709; RV64IZFHMIN-LABEL: br_fcmp_uno:
1710; RV64IZFHMIN:       # %bb.0:
1711; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa1
1712; RV64IZFHMIN-NEXT:    fcvt.s.h fa4, fa0
1713; RV64IZFHMIN-NEXT:    feq.s a0, fa5, fa5
1714; RV64IZFHMIN-NEXT:    feq.s a1, fa4, fa4
1715; RV64IZFHMIN-NEXT:    and a0, a1, a0
1716; RV64IZFHMIN-NEXT:    beqz a0, .LBB15_2
1717; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1718; RV64IZFHMIN-NEXT:    ret
1719; RV64IZFHMIN-NEXT:  .LBB15_2: # %if.then
1720; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1721; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1722; RV64IZFHMIN-NEXT:    call abort
1723;
1724; RV32IZHINXMIN-LABEL: br_fcmp_uno:
1725; RV32IZHINXMIN:       # %bb.0:
1726; RV32IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1727; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1728; RV32IZHINXMIN-NEXT:    feq.s a1, a1, a1
1729; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a0
1730; RV32IZHINXMIN-NEXT:    and a0, a0, a1
1731; RV32IZHINXMIN-NEXT:    beqz a0, .LBB15_2
1732; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1733; RV32IZHINXMIN-NEXT:    ret
1734; RV32IZHINXMIN-NEXT:  .LBB15_2: # %if.then
1735; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1736; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1737; RV32IZHINXMIN-NEXT:    call abort
1738;
1739; RV64IZHINXMIN-LABEL: br_fcmp_uno:
1740; RV64IZHINXMIN:       # %bb.0:
1741; RV64IZHINXMIN-NEXT:    fcvt.s.h a1, a1
1742; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0
1743; RV64IZHINXMIN-NEXT:    feq.s a1, a1, a1
1744; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a0
1745; RV64IZHINXMIN-NEXT:    and a0, a0, a1
1746; RV64IZHINXMIN-NEXT:    beqz a0, .LBB15_2
1747; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1748; RV64IZHINXMIN-NEXT:    ret
1749; RV64IZHINXMIN-NEXT:  .LBB15_2: # %if.then
1750; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1751; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1752; RV64IZHINXMIN-NEXT:    call abort
1753  %1 = fcmp uno half %a, %b
1754  br i1 %1, label %if.then, label %if.else
1755if.else:
1756  ret void
1757if.then:
1758  tail call void @abort()
1759  unreachable
1760}
1761
1762define void @br_fcmp_true(half %a, half %b) nounwind {
1763; RV32IZFH-LABEL: br_fcmp_true:
1764; RV32IZFH:       # %bb.0:
1765; RV32IZFH-NEXT:    li a0, 1
1766; RV32IZFH-NEXT:    bnez a0, .LBB16_2
1767; RV32IZFH-NEXT:  # %bb.1: # %if.else
1768; RV32IZFH-NEXT:    ret
1769; RV32IZFH-NEXT:  .LBB16_2: # %if.then
1770; RV32IZFH-NEXT:    addi sp, sp, -16
1771; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1772; RV32IZFH-NEXT:    call abort
1773;
1774; RV64IZFH-LABEL: br_fcmp_true:
1775; RV64IZFH:       # %bb.0:
1776; RV64IZFH-NEXT:    li a0, 1
1777; RV64IZFH-NEXT:    bnez a0, .LBB16_2
1778; RV64IZFH-NEXT:  # %bb.1: # %if.else
1779; RV64IZFH-NEXT:    ret
1780; RV64IZFH-NEXT:  .LBB16_2: # %if.then
1781; RV64IZFH-NEXT:    addi sp, sp, -16
1782; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1783; RV64IZFH-NEXT:    call abort
1784;
1785; RV32IZHINX-LABEL: br_fcmp_true:
1786; RV32IZHINX:       # %bb.0:
1787; RV32IZHINX-NEXT:    li a0, 1
1788; RV32IZHINX-NEXT:    bnez a0, .LBB16_2
1789; RV32IZHINX-NEXT:  # %bb.1: # %if.else
1790; RV32IZHINX-NEXT:    ret
1791; RV32IZHINX-NEXT:  .LBB16_2: # %if.then
1792; RV32IZHINX-NEXT:    addi sp, sp, -16
1793; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1794; RV32IZHINX-NEXT:    call abort
1795;
1796; RV64IZHINX-LABEL: br_fcmp_true:
1797; RV64IZHINX:       # %bb.0:
1798; RV64IZHINX-NEXT:    li a0, 1
1799; RV64IZHINX-NEXT:    bnez a0, .LBB16_2
1800; RV64IZHINX-NEXT:  # %bb.1: # %if.else
1801; RV64IZHINX-NEXT:    ret
1802; RV64IZHINX-NEXT:  .LBB16_2: # %if.then
1803; RV64IZHINX-NEXT:    addi sp, sp, -16
1804; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1805; RV64IZHINX-NEXT:    call abort
1806;
1807; RV32IZFHMIN-LABEL: br_fcmp_true:
1808; RV32IZFHMIN:       # %bb.0:
1809; RV32IZFHMIN-NEXT:    li a0, 1
1810; RV32IZFHMIN-NEXT:    bnez a0, .LBB16_2
1811; RV32IZFHMIN-NEXT:  # %bb.1: # %if.else
1812; RV32IZFHMIN-NEXT:    ret
1813; RV32IZFHMIN-NEXT:  .LBB16_2: # %if.then
1814; RV32IZFHMIN-NEXT:    addi sp, sp, -16
1815; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1816; RV32IZFHMIN-NEXT:    call abort
1817;
1818; RV64IZFHMIN-LABEL: br_fcmp_true:
1819; RV64IZFHMIN:       # %bb.0:
1820; RV64IZFHMIN-NEXT:    li a0, 1
1821; RV64IZFHMIN-NEXT:    bnez a0, .LBB16_2
1822; RV64IZFHMIN-NEXT:  # %bb.1: # %if.else
1823; RV64IZFHMIN-NEXT:    ret
1824; RV64IZFHMIN-NEXT:  .LBB16_2: # %if.then
1825; RV64IZFHMIN-NEXT:    addi sp, sp, -16
1826; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1827; RV64IZFHMIN-NEXT:    call abort
1828;
1829; RV32IZHINXMIN-LABEL: br_fcmp_true:
1830; RV32IZHINXMIN:       # %bb.0:
1831; RV32IZHINXMIN-NEXT:    li a0, 1
1832; RV32IZHINXMIN-NEXT:    bnez a0, .LBB16_2
1833; RV32IZHINXMIN-NEXT:  # %bb.1: # %if.else
1834; RV32IZHINXMIN-NEXT:    ret
1835; RV32IZHINXMIN-NEXT:  .LBB16_2: # %if.then
1836; RV32IZHINXMIN-NEXT:    addi sp, sp, -16
1837; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1838; RV32IZHINXMIN-NEXT:    call abort
1839;
1840; RV64IZHINXMIN-LABEL: br_fcmp_true:
1841; RV64IZHINXMIN:       # %bb.0:
1842; RV64IZHINXMIN-NEXT:    li a0, 1
1843; RV64IZHINXMIN-NEXT:    bnez a0, .LBB16_2
1844; RV64IZHINXMIN-NEXT:  # %bb.1: # %if.else
1845; RV64IZHINXMIN-NEXT:    ret
1846; RV64IZHINXMIN-NEXT:  .LBB16_2: # %if.then
1847; RV64IZHINXMIN-NEXT:    addi sp, sp, -16
1848; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1849; RV64IZHINXMIN-NEXT:    call abort
1850  %1 = fcmp true half %a, %b
1851  br i1 %1, label %if.then, label %if.else
1852if.else:
1853  ret void
1854if.then:
1855  tail call void @abort()
1856  unreachable
1857}
1858