xref: /llvm-project/llvm/test/CodeGen/RISCV/half-select-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 %s
4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \
5; RUN:   -target-abi lp64f < %s | FileCheck %s
6; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \
7; RUN:   -target-abi ilp32 < %s | FileCheck -check-prefix=CHECKIZHINX %s
8; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \
9; RUN:   -target-abi lp64 < %s | FileCheck -check-prefix=CHECKIZHINX %s
10; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs < %s \
11; RUN:   -target-abi=ilp32f | FileCheck -check-prefix=CHECKIZFHMIN %s
12; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs < %s \
13; RUN:   -target-abi=lp64f | FileCheck -check-prefix=CHECKIZFHMIN %s
14; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs < %s \
15; RUN:   -target-abi=ilp32 | FileCheck -check-prefix=CHECKIZHINXMIN %s
16; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs < %s \
17; RUN:   -target-abi=lp64 | FileCheck -check-prefix=CHECKIZHINXMIN %s
18
19define half @select_fcmp_false(half %a, half %b) nounwind {
20; CHECK-LABEL: select_fcmp_false:
21; CHECK:       # %bb.0:
22; CHECK-NEXT:    fmv.h fa0, fa1
23; CHECK-NEXT:    ret
24;
25; CHECKIZHINX-LABEL: select_fcmp_false:
26; CHECKIZHINX:       # %bb.0:
27; CHECKIZHINX-NEXT:    mv a0, a1
28; CHECKIZHINX-NEXT:    ret
29;
30; CHECKIZFHMIN-LABEL: select_fcmp_false:
31; CHECKIZFHMIN:       # %bb.0:
32; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
33; CHECKIZFHMIN-NEXT:    ret
34;
35; CHECKIZHINXMIN-LABEL: select_fcmp_false:
36; CHECKIZHINXMIN:       # %bb.0:
37; CHECKIZHINXMIN-NEXT:    mv a0, a1
38; CHECKIZHINXMIN-NEXT:    ret
39  %1 = fcmp false half %a, %b
40  %2 = select i1 %1, half %a, half %b
41  ret half %2
42}
43
44define half @select_fcmp_oeq(half %a, half %b) nounwind {
45; CHECK-LABEL: select_fcmp_oeq:
46; CHECK:       # %bb.0:
47; CHECK-NEXT:    feq.h a0, fa0, fa1
48; CHECK-NEXT:    bnez a0, .LBB1_2
49; CHECK-NEXT:  # %bb.1:
50; CHECK-NEXT:    fmv.h fa0, fa1
51; CHECK-NEXT:  .LBB1_2:
52; CHECK-NEXT:    ret
53;
54; CHECKIZHINX-LABEL: select_fcmp_oeq:
55; CHECKIZHINX:       # %bb.0:
56; CHECKIZHINX-NEXT:    feq.h a2, a0, a1
57; CHECKIZHINX-NEXT:    bnez a2, .LBB1_2
58; CHECKIZHINX-NEXT:  # %bb.1:
59; CHECKIZHINX-NEXT:    mv a0, a1
60; CHECKIZHINX-NEXT:  .LBB1_2:
61; CHECKIZHINX-NEXT:    ret
62;
63; CHECKIZFHMIN-LABEL: select_fcmp_oeq:
64; CHECKIZFHMIN:       # %bb.0:
65; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
66; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
67; CHECKIZFHMIN-NEXT:    feq.s a0, fa4, fa5
68; CHECKIZFHMIN-NEXT:    bnez a0, .LBB1_2
69; CHECKIZFHMIN-NEXT:  # %bb.1:
70; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
71; CHECKIZFHMIN-NEXT:  .LBB1_2:
72; CHECKIZFHMIN-NEXT:    ret
73;
74; CHECKIZHINXMIN-LABEL: select_fcmp_oeq:
75; CHECKIZHINXMIN:       # %bb.0:
76; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
77; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
78; CHECKIZHINXMIN-NEXT:    feq.s a2, a3, a2
79; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB1_2
80; CHECKIZHINXMIN-NEXT:  # %bb.1:
81; CHECKIZHINXMIN-NEXT:    mv a0, a1
82; CHECKIZHINXMIN-NEXT:  .LBB1_2:
83; CHECKIZHINXMIN-NEXT:    ret
84  %1 = fcmp oeq half %a, %b
85  %2 = select i1 %1, half %a, half %b
86  ret half %2
87}
88
89define half @select_fcmp_ogt(half %a, half %b) nounwind {
90; CHECK-LABEL: select_fcmp_ogt:
91; CHECK:       # %bb.0:
92; CHECK-NEXT:    flt.h a0, fa1, fa0
93; CHECK-NEXT:    bnez a0, .LBB2_2
94; CHECK-NEXT:  # %bb.1:
95; CHECK-NEXT:    fmv.h fa0, fa1
96; CHECK-NEXT:  .LBB2_2:
97; CHECK-NEXT:    ret
98;
99; CHECKIZHINX-LABEL: select_fcmp_ogt:
100; CHECKIZHINX:       # %bb.0:
101; CHECKIZHINX-NEXT:    flt.h a2, a1, a0
102; CHECKIZHINX-NEXT:    bnez a2, .LBB2_2
103; CHECKIZHINX-NEXT:  # %bb.1:
104; CHECKIZHINX-NEXT:    mv a0, a1
105; CHECKIZHINX-NEXT:  .LBB2_2:
106; CHECKIZHINX-NEXT:    ret
107;
108; CHECKIZFHMIN-LABEL: select_fcmp_ogt:
109; CHECKIZFHMIN:       # %bb.0:
110; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0
111; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1
112; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5
113; CHECKIZFHMIN-NEXT:    bnez a0, .LBB2_2
114; CHECKIZFHMIN-NEXT:  # %bb.1:
115; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
116; CHECKIZFHMIN-NEXT:  .LBB2_2:
117; CHECKIZFHMIN-NEXT:    ret
118;
119; CHECKIZHINXMIN-LABEL: select_fcmp_ogt:
120; CHECKIZHINXMIN:       # %bb.0:
121; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0
122; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1
123; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2
124; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB2_2
125; CHECKIZHINXMIN-NEXT:  # %bb.1:
126; CHECKIZHINXMIN-NEXT:    mv a0, a1
127; CHECKIZHINXMIN-NEXT:  .LBB2_2:
128; CHECKIZHINXMIN-NEXT:    ret
129  %1 = fcmp ogt half %a, %b
130  %2 = select i1 %1, half %a, half %b
131  ret half %2
132}
133
134define half @select_fcmp_oge(half %a, half %b) nounwind {
135; CHECK-LABEL: select_fcmp_oge:
136; CHECK:       # %bb.0:
137; CHECK-NEXT:    fle.h a0, fa1, fa0
138; CHECK-NEXT:    bnez a0, .LBB3_2
139; CHECK-NEXT:  # %bb.1:
140; CHECK-NEXT:    fmv.h fa0, fa1
141; CHECK-NEXT:  .LBB3_2:
142; CHECK-NEXT:    ret
143;
144; CHECKIZHINX-LABEL: select_fcmp_oge:
145; CHECKIZHINX:       # %bb.0:
146; CHECKIZHINX-NEXT:    fle.h a2, a1, a0
147; CHECKIZHINX-NEXT:    bnez a2, .LBB3_2
148; CHECKIZHINX-NEXT:  # %bb.1:
149; CHECKIZHINX-NEXT:    mv a0, a1
150; CHECKIZHINX-NEXT:  .LBB3_2:
151; CHECKIZHINX-NEXT:    ret
152;
153; CHECKIZFHMIN-LABEL: select_fcmp_oge:
154; CHECKIZFHMIN:       # %bb.0:
155; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0
156; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1
157; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5
158; CHECKIZFHMIN-NEXT:    bnez a0, .LBB3_2
159; CHECKIZFHMIN-NEXT:  # %bb.1:
160; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
161; CHECKIZFHMIN-NEXT:  .LBB3_2:
162; CHECKIZFHMIN-NEXT:    ret
163;
164; CHECKIZHINXMIN-LABEL: select_fcmp_oge:
165; CHECKIZHINXMIN:       # %bb.0:
166; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0
167; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1
168; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2
169; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB3_2
170; CHECKIZHINXMIN-NEXT:  # %bb.1:
171; CHECKIZHINXMIN-NEXT:    mv a0, a1
172; CHECKIZHINXMIN-NEXT:  .LBB3_2:
173; CHECKIZHINXMIN-NEXT:    ret
174  %1 = fcmp oge half %a, %b
175  %2 = select i1 %1, half %a, half %b
176  ret half %2
177}
178
179define half @select_fcmp_olt(half %a, half %b) nounwind {
180; CHECK-LABEL: select_fcmp_olt:
181; CHECK:       # %bb.0:
182; CHECK-NEXT:    flt.h a0, fa0, fa1
183; CHECK-NEXT:    bnez a0, .LBB4_2
184; CHECK-NEXT:  # %bb.1:
185; CHECK-NEXT:    fmv.h fa0, fa1
186; CHECK-NEXT:  .LBB4_2:
187; CHECK-NEXT:    ret
188;
189; CHECKIZHINX-LABEL: select_fcmp_olt:
190; CHECKIZHINX:       # %bb.0:
191; CHECKIZHINX-NEXT:    flt.h a2, a0, a1
192; CHECKIZHINX-NEXT:    bnez a2, .LBB4_2
193; CHECKIZHINX-NEXT:  # %bb.1:
194; CHECKIZHINX-NEXT:    mv a0, a1
195; CHECKIZHINX-NEXT:  .LBB4_2:
196; CHECKIZHINX-NEXT:    ret
197;
198; CHECKIZFHMIN-LABEL: select_fcmp_olt:
199; CHECKIZFHMIN:       # %bb.0:
200; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
201; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
202; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5
203; CHECKIZFHMIN-NEXT:    bnez a0, .LBB4_2
204; CHECKIZFHMIN-NEXT:  # %bb.1:
205; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
206; CHECKIZFHMIN-NEXT:  .LBB4_2:
207; CHECKIZFHMIN-NEXT:    ret
208;
209; CHECKIZHINXMIN-LABEL: select_fcmp_olt:
210; CHECKIZHINXMIN:       # %bb.0:
211; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
212; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
213; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2
214; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB4_2
215; CHECKIZHINXMIN-NEXT:  # %bb.1:
216; CHECKIZHINXMIN-NEXT:    mv a0, a1
217; CHECKIZHINXMIN-NEXT:  .LBB4_2:
218; CHECKIZHINXMIN-NEXT:    ret
219  %1 = fcmp olt half %a, %b
220  %2 = select i1 %1, half %a, half %b
221  ret half %2
222}
223
224define half @select_fcmp_ole(half %a, half %b) nounwind {
225; CHECK-LABEL: select_fcmp_ole:
226; CHECK:       # %bb.0:
227; CHECK-NEXT:    fle.h a0, fa0, fa1
228; CHECK-NEXT:    bnez a0, .LBB5_2
229; CHECK-NEXT:  # %bb.1:
230; CHECK-NEXT:    fmv.h fa0, fa1
231; CHECK-NEXT:  .LBB5_2:
232; CHECK-NEXT:    ret
233;
234; CHECKIZHINX-LABEL: select_fcmp_ole:
235; CHECKIZHINX:       # %bb.0:
236; CHECKIZHINX-NEXT:    fle.h a2, a0, a1
237; CHECKIZHINX-NEXT:    bnez a2, .LBB5_2
238; CHECKIZHINX-NEXT:  # %bb.1:
239; CHECKIZHINX-NEXT:    mv a0, a1
240; CHECKIZHINX-NEXT:  .LBB5_2:
241; CHECKIZHINX-NEXT:    ret
242;
243; CHECKIZFHMIN-LABEL: select_fcmp_ole:
244; CHECKIZFHMIN:       # %bb.0:
245; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
246; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
247; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5
248; CHECKIZFHMIN-NEXT:    bnez a0, .LBB5_2
249; CHECKIZFHMIN-NEXT:  # %bb.1:
250; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
251; CHECKIZFHMIN-NEXT:  .LBB5_2:
252; CHECKIZFHMIN-NEXT:    ret
253;
254; CHECKIZHINXMIN-LABEL: select_fcmp_ole:
255; CHECKIZHINXMIN:       # %bb.0:
256; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
257; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
258; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2
259; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB5_2
260; CHECKIZHINXMIN-NEXT:  # %bb.1:
261; CHECKIZHINXMIN-NEXT:    mv a0, a1
262; CHECKIZHINXMIN-NEXT:  .LBB5_2:
263; CHECKIZHINXMIN-NEXT:    ret
264  %1 = fcmp ole half %a, %b
265  %2 = select i1 %1, half %a, half %b
266  ret half %2
267}
268
269define half @select_fcmp_one(half %a, half %b) nounwind {
270; CHECK-LABEL: select_fcmp_one:
271; CHECK:       # %bb.0:
272; CHECK-NEXT:    flt.h a0, fa0, fa1
273; CHECK-NEXT:    flt.h a1, fa1, fa0
274; CHECK-NEXT:    or a0, a1, a0
275; CHECK-NEXT:    bnez a0, .LBB6_2
276; CHECK-NEXT:  # %bb.1:
277; CHECK-NEXT:    fmv.h fa0, fa1
278; CHECK-NEXT:  .LBB6_2:
279; CHECK-NEXT:    ret
280;
281; CHECKIZHINX-LABEL: select_fcmp_one:
282; CHECKIZHINX:       # %bb.0:
283; CHECKIZHINX-NEXT:    flt.h a2, a0, a1
284; CHECKIZHINX-NEXT:    flt.h a3, a1, a0
285; CHECKIZHINX-NEXT:    or a2, a3, a2
286; CHECKIZHINX-NEXT:    bnez a2, .LBB6_2
287; CHECKIZHINX-NEXT:  # %bb.1:
288; CHECKIZHINX-NEXT:    mv a0, a1
289; CHECKIZHINX-NEXT:  .LBB6_2:
290; CHECKIZHINX-NEXT:    ret
291;
292; CHECKIZFHMIN-LABEL: select_fcmp_one:
293; CHECKIZFHMIN:       # %bb.0:
294; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
295; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
296; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5
297; CHECKIZFHMIN-NEXT:    flt.s a1, fa5, fa4
298; CHECKIZFHMIN-NEXT:    or a0, a1, a0
299; CHECKIZFHMIN-NEXT:    bnez a0, .LBB6_2
300; CHECKIZFHMIN-NEXT:  # %bb.1:
301; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
302; CHECKIZFHMIN-NEXT:  .LBB6_2:
303; CHECKIZFHMIN-NEXT:    ret
304;
305; CHECKIZHINXMIN-LABEL: select_fcmp_one:
306; CHECKIZHINXMIN:       # %bb.0:
307; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
308; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
309; CHECKIZHINXMIN-NEXT:    flt.s a4, a3, a2
310; CHECKIZHINXMIN-NEXT:    flt.s a2, a2, a3
311; CHECKIZHINXMIN-NEXT:    or a2, a2, a4
312; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB6_2
313; CHECKIZHINXMIN-NEXT:  # %bb.1:
314; CHECKIZHINXMIN-NEXT:    mv a0, a1
315; CHECKIZHINXMIN-NEXT:  .LBB6_2:
316; CHECKIZHINXMIN-NEXT:    ret
317  %1 = fcmp one half %a, %b
318  %2 = select i1 %1, half %a, half %b
319  ret half %2
320}
321
322define half @select_fcmp_ord(half %a, half %b) nounwind {
323; CHECK-LABEL: select_fcmp_ord:
324; CHECK:       # %bb.0:
325; CHECK-NEXT:    feq.h a0, fa1, fa1
326; CHECK-NEXT:    feq.h a1, fa0, fa0
327; CHECK-NEXT:    and a0, a1, a0
328; CHECK-NEXT:    bnez a0, .LBB7_2
329; CHECK-NEXT:  # %bb.1:
330; CHECK-NEXT:    fmv.h fa0, fa1
331; CHECK-NEXT:  .LBB7_2:
332; CHECK-NEXT:    ret
333;
334; CHECKIZHINX-LABEL: select_fcmp_ord:
335; CHECKIZHINX:       # %bb.0:
336; CHECKIZHINX-NEXT:    feq.h a2, a1, a1
337; CHECKIZHINX-NEXT:    feq.h a3, a0, a0
338; CHECKIZHINX-NEXT:    and a2, a3, a2
339; CHECKIZHINX-NEXT:    bnez a2, .LBB7_2
340; CHECKIZHINX-NEXT:  # %bb.1:
341; CHECKIZHINX-NEXT:    mv a0, a1
342; CHECKIZHINX-NEXT:  .LBB7_2:
343; CHECKIZHINX-NEXT:    ret
344;
345; CHECKIZFHMIN-LABEL: select_fcmp_ord:
346; CHECKIZFHMIN:       # %bb.0:
347; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
348; CHECKIZFHMIN-NEXT:    feq.s a0, fa5, fa5
349; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0
350; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa5
351; CHECKIZFHMIN-NEXT:    and a0, a1, a0
352; CHECKIZFHMIN-NEXT:    bnez a0, .LBB7_2
353; CHECKIZFHMIN-NEXT:  # %bb.1:
354; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
355; CHECKIZFHMIN-NEXT:  .LBB7_2:
356; CHECKIZFHMIN-NEXT:    ret
357;
358; CHECKIZHINXMIN-LABEL: select_fcmp_ord:
359; CHECKIZHINXMIN:       # %bb.0:
360; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
361; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
362; CHECKIZHINXMIN-NEXT:    feq.s a2, a2, a2
363; CHECKIZHINXMIN-NEXT:    feq.s a3, a3, a3
364; CHECKIZHINXMIN-NEXT:    and a2, a3, a2
365; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB7_2
366; CHECKIZHINXMIN-NEXT:  # %bb.1:
367; CHECKIZHINXMIN-NEXT:    mv a0, a1
368; CHECKIZHINXMIN-NEXT:  .LBB7_2:
369; CHECKIZHINXMIN-NEXT:    ret
370  %1 = fcmp ord half %a, %b
371  %2 = select i1 %1, half %a, half %b
372  ret half %2
373}
374
375define half @select_fcmp_ueq(half %a, half %b) nounwind {
376; CHECK-LABEL: select_fcmp_ueq:
377; CHECK:       # %bb.0:
378; CHECK-NEXT:    flt.h a0, fa0, fa1
379; CHECK-NEXT:    flt.h a1, fa1, fa0
380; CHECK-NEXT:    or a0, a1, a0
381; CHECK-NEXT:    beqz a0, .LBB8_2
382; CHECK-NEXT:  # %bb.1:
383; CHECK-NEXT:    fmv.h fa0, fa1
384; CHECK-NEXT:  .LBB8_2:
385; CHECK-NEXT:    ret
386;
387; CHECKIZHINX-LABEL: select_fcmp_ueq:
388; CHECKIZHINX:       # %bb.0:
389; CHECKIZHINX-NEXT:    flt.h a2, a0, a1
390; CHECKIZHINX-NEXT:    flt.h a3, a1, a0
391; CHECKIZHINX-NEXT:    or a2, a3, a2
392; CHECKIZHINX-NEXT:    beqz a2, .LBB8_2
393; CHECKIZHINX-NEXT:  # %bb.1:
394; CHECKIZHINX-NEXT:    mv a0, a1
395; CHECKIZHINX-NEXT:  .LBB8_2:
396; CHECKIZHINX-NEXT:    ret
397;
398; CHECKIZFHMIN-LABEL: select_fcmp_ueq:
399; CHECKIZFHMIN:       # %bb.0:
400; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
401; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
402; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5
403; CHECKIZFHMIN-NEXT:    flt.s a1, fa5, fa4
404; CHECKIZFHMIN-NEXT:    or a0, a1, a0
405; CHECKIZFHMIN-NEXT:    beqz a0, .LBB8_2
406; CHECKIZFHMIN-NEXT:  # %bb.1:
407; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
408; CHECKIZFHMIN-NEXT:  .LBB8_2:
409; CHECKIZFHMIN-NEXT:    ret
410;
411; CHECKIZHINXMIN-LABEL: select_fcmp_ueq:
412; CHECKIZHINXMIN:       # %bb.0:
413; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
414; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
415; CHECKIZHINXMIN-NEXT:    flt.s a4, a3, a2
416; CHECKIZHINXMIN-NEXT:    flt.s a2, a2, a3
417; CHECKIZHINXMIN-NEXT:    or a2, a2, a4
418; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB8_2
419; CHECKIZHINXMIN-NEXT:  # %bb.1:
420; CHECKIZHINXMIN-NEXT:    mv a0, a1
421; CHECKIZHINXMIN-NEXT:  .LBB8_2:
422; CHECKIZHINXMIN-NEXT:    ret
423  %1 = fcmp ueq half %a, %b
424  %2 = select i1 %1, half %a, half %b
425  ret half %2
426}
427
428define half @select_fcmp_ugt(half %a, half %b) nounwind {
429; CHECK-LABEL: select_fcmp_ugt:
430; CHECK:       # %bb.0:
431; CHECK-NEXT:    fle.h a0, fa0, fa1
432; CHECK-NEXT:    beqz a0, .LBB9_2
433; CHECK-NEXT:  # %bb.1:
434; CHECK-NEXT:    fmv.h fa0, fa1
435; CHECK-NEXT:  .LBB9_2:
436; CHECK-NEXT:    ret
437;
438; CHECKIZHINX-LABEL: select_fcmp_ugt:
439; CHECKIZHINX:       # %bb.0:
440; CHECKIZHINX-NEXT:    fle.h a2, a0, a1
441; CHECKIZHINX-NEXT:    beqz a2, .LBB9_2
442; CHECKIZHINX-NEXT:  # %bb.1:
443; CHECKIZHINX-NEXT:    mv a0, a1
444; CHECKIZHINX-NEXT:  .LBB9_2:
445; CHECKIZHINX-NEXT:    ret
446;
447; CHECKIZFHMIN-LABEL: select_fcmp_ugt:
448; CHECKIZFHMIN:       # %bb.0:
449; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
450; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
451; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5
452; CHECKIZFHMIN-NEXT:    beqz a0, .LBB9_2
453; CHECKIZFHMIN-NEXT:  # %bb.1:
454; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
455; CHECKIZFHMIN-NEXT:  .LBB9_2:
456; CHECKIZFHMIN-NEXT:    ret
457;
458; CHECKIZHINXMIN-LABEL: select_fcmp_ugt:
459; CHECKIZHINXMIN:       # %bb.0:
460; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
461; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
462; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2
463; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB9_2
464; CHECKIZHINXMIN-NEXT:  # %bb.1:
465; CHECKIZHINXMIN-NEXT:    mv a0, a1
466; CHECKIZHINXMIN-NEXT:  .LBB9_2:
467; CHECKIZHINXMIN-NEXT:    ret
468  %1 = fcmp ugt half %a, %b
469  %2 = select i1 %1, half %a, half %b
470  ret half %2
471}
472
473define half @select_fcmp_uge(half %a, half %b) nounwind {
474; CHECK-LABEL: select_fcmp_uge:
475; CHECK:       # %bb.0:
476; CHECK-NEXT:    flt.h a0, fa0, fa1
477; CHECK-NEXT:    beqz a0, .LBB10_2
478; CHECK-NEXT:  # %bb.1:
479; CHECK-NEXT:    fmv.h fa0, fa1
480; CHECK-NEXT:  .LBB10_2:
481; CHECK-NEXT:    ret
482;
483; CHECKIZHINX-LABEL: select_fcmp_uge:
484; CHECKIZHINX:       # %bb.0:
485; CHECKIZHINX-NEXT:    flt.h a2, a0, a1
486; CHECKIZHINX-NEXT:    beqz a2, .LBB10_2
487; CHECKIZHINX-NEXT:  # %bb.1:
488; CHECKIZHINX-NEXT:    mv a0, a1
489; CHECKIZHINX-NEXT:  .LBB10_2:
490; CHECKIZHINX-NEXT:    ret
491;
492; CHECKIZFHMIN-LABEL: select_fcmp_uge:
493; CHECKIZFHMIN:       # %bb.0:
494; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
495; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
496; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5
497; CHECKIZFHMIN-NEXT:    beqz a0, .LBB10_2
498; CHECKIZFHMIN-NEXT:  # %bb.1:
499; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
500; CHECKIZFHMIN-NEXT:  .LBB10_2:
501; CHECKIZFHMIN-NEXT:    ret
502;
503; CHECKIZHINXMIN-LABEL: select_fcmp_uge:
504; CHECKIZHINXMIN:       # %bb.0:
505; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
506; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
507; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2
508; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB10_2
509; CHECKIZHINXMIN-NEXT:  # %bb.1:
510; CHECKIZHINXMIN-NEXT:    mv a0, a1
511; CHECKIZHINXMIN-NEXT:  .LBB10_2:
512; CHECKIZHINXMIN-NEXT:    ret
513  %1 = fcmp uge half %a, %b
514  %2 = select i1 %1, half %a, half %b
515  ret half %2
516}
517
518define half @select_fcmp_ult(half %a, half %b) nounwind {
519; CHECK-LABEL: select_fcmp_ult:
520; CHECK:       # %bb.0:
521; CHECK-NEXT:    fle.h a0, fa1, fa0
522; CHECK-NEXT:    beqz a0, .LBB11_2
523; CHECK-NEXT:  # %bb.1:
524; CHECK-NEXT:    fmv.h fa0, fa1
525; CHECK-NEXT:  .LBB11_2:
526; CHECK-NEXT:    ret
527;
528; CHECKIZHINX-LABEL: select_fcmp_ult:
529; CHECKIZHINX:       # %bb.0:
530; CHECKIZHINX-NEXT:    fle.h a2, a1, a0
531; CHECKIZHINX-NEXT:    beqz a2, .LBB11_2
532; CHECKIZHINX-NEXT:  # %bb.1:
533; CHECKIZHINX-NEXT:    mv a0, a1
534; CHECKIZHINX-NEXT:  .LBB11_2:
535; CHECKIZHINX-NEXT:    ret
536;
537; CHECKIZFHMIN-LABEL: select_fcmp_ult:
538; CHECKIZFHMIN:       # %bb.0:
539; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0
540; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1
541; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5
542; CHECKIZFHMIN-NEXT:    beqz a0, .LBB11_2
543; CHECKIZFHMIN-NEXT:  # %bb.1:
544; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
545; CHECKIZFHMIN-NEXT:  .LBB11_2:
546; CHECKIZFHMIN-NEXT:    ret
547;
548; CHECKIZHINXMIN-LABEL: select_fcmp_ult:
549; CHECKIZHINXMIN:       # %bb.0:
550; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0
551; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1
552; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2
553; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB11_2
554; CHECKIZHINXMIN-NEXT:  # %bb.1:
555; CHECKIZHINXMIN-NEXT:    mv a0, a1
556; CHECKIZHINXMIN-NEXT:  .LBB11_2:
557; CHECKIZHINXMIN-NEXT:    ret
558  %1 = fcmp ult half %a, %b
559  %2 = select i1 %1, half %a, half %b
560  ret half %2
561}
562
563define half @select_fcmp_ule(half %a, half %b) nounwind {
564; CHECK-LABEL: select_fcmp_ule:
565; CHECK:       # %bb.0:
566; CHECK-NEXT:    flt.h a0, fa1, fa0
567; CHECK-NEXT:    beqz a0, .LBB12_2
568; CHECK-NEXT:  # %bb.1:
569; CHECK-NEXT:    fmv.h fa0, fa1
570; CHECK-NEXT:  .LBB12_2:
571; CHECK-NEXT:    ret
572;
573; CHECKIZHINX-LABEL: select_fcmp_ule:
574; CHECKIZHINX:       # %bb.0:
575; CHECKIZHINX-NEXT:    flt.h a2, a1, a0
576; CHECKIZHINX-NEXT:    beqz a2, .LBB12_2
577; CHECKIZHINX-NEXT:  # %bb.1:
578; CHECKIZHINX-NEXT:    mv a0, a1
579; CHECKIZHINX-NEXT:  .LBB12_2:
580; CHECKIZHINX-NEXT:    ret
581;
582; CHECKIZFHMIN-LABEL: select_fcmp_ule:
583; CHECKIZFHMIN:       # %bb.0:
584; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0
585; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1
586; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5
587; CHECKIZFHMIN-NEXT:    beqz a0, .LBB12_2
588; CHECKIZFHMIN-NEXT:  # %bb.1:
589; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
590; CHECKIZFHMIN-NEXT:  .LBB12_2:
591; CHECKIZFHMIN-NEXT:    ret
592;
593; CHECKIZHINXMIN-LABEL: select_fcmp_ule:
594; CHECKIZHINXMIN:       # %bb.0:
595; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0
596; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1
597; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2
598; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB12_2
599; CHECKIZHINXMIN-NEXT:  # %bb.1:
600; CHECKIZHINXMIN-NEXT:    mv a0, a1
601; CHECKIZHINXMIN-NEXT:  .LBB12_2:
602; CHECKIZHINXMIN-NEXT:    ret
603  %1 = fcmp ule half %a, %b
604  %2 = select i1 %1, half %a, half %b
605  ret half %2
606}
607
608define half @select_fcmp_une(half %a, half %b) nounwind {
609; CHECK-LABEL: select_fcmp_une:
610; CHECK:       # %bb.0:
611; CHECK-NEXT:    feq.h a0, fa0, fa1
612; CHECK-NEXT:    beqz a0, .LBB13_2
613; CHECK-NEXT:  # %bb.1:
614; CHECK-NEXT:    fmv.h fa0, fa1
615; CHECK-NEXT:  .LBB13_2:
616; CHECK-NEXT:    ret
617;
618; CHECKIZHINX-LABEL: select_fcmp_une:
619; CHECKIZHINX:       # %bb.0:
620; CHECKIZHINX-NEXT:    feq.h a2, a0, a1
621; CHECKIZHINX-NEXT:    beqz a2, .LBB13_2
622; CHECKIZHINX-NEXT:  # %bb.1:
623; CHECKIZHINX-NEXT:    mv a0, a1
624; CHECKIZHINX-NEXT:  .LBB13_2:
625; CHECKIZHINX-NEXT:    ret
626;
627; CHECKIZFHMIN-LABEL: select_fcmp_une:
628; CHECKIZFHMIN:       # %bb.0:
629; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
630; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
631; CHECKIZFHMIN-NEXT:    feq.s a0, fa4, fa5
632; CHECKIZFHMIN-NEXT:    beqz a0, .LBB13_2
633; CHECKIZFHMIN-NEXT:  # %bb.1:
634; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
635; CHECKIZFHMIN-NEXT:  .LBB13_2:
636; CHECKIZFHMIN-NEXT:    ret
637;
638; CHECKIZHINXMIN-LABEL: select_fcmp_une:
639; CHECKIZHINXMIN:       # %bb.0:
640; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
641; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
642; CHECKIZHINXMIN-NEXT:    feq.s a2, a3, a2
643; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB13_2
644; CHECKIZHINXMIN-NEXT:  # %bb.1:
645; CHECKIZHINXMIN-NEXT:    mv a0, a1
646; CHECKIZHINXMIN-NEXT:  .LBB13_2:
647; CHECKIZHINXMIN-NEXT:    ret
648  %1 = fcmp une half %a, %b
649  %2 = select i1 %1, half %a, half %b
650  ret half %2
651}
652
653define half @select_fcmp_uno(half %a, half %b) nounwind {
654; CHECK-LABEL: select_fcmp_uno:
655; CHECK:       # %bb.0:
656; CHECK-NEXT:    feq.h a0, fa1, fa1
657; CHECK-NEXT:    feq.h a1, fa0, fa0
658; CHECK-NEXT:    and a0, a1, a0
659; CHECK-NEXT:    beqz a0, .LBB14_2
660; CHECK-NEXT:  # %bb.1:
661; CHECK-NEXT:    fmv.h fa0, fa1
662; CHECK-NEXT:  .LBB14_2:
663; CHECK-NEXT:    ret
664;
665; CHECKIZHINX-LABEL: select_fcmp_uno:
666; CHECKIZHINX:       # %bb.0:
667; CHECKIZHINX-NEXT:    feq.h a2, a1, a1
668; CHECKIZHINX-NEXT:    feq.h a3, a0, a0
669; CHECKIZHINX-NEXT:    and a2, a3, a2
670; CHECKIZHINX-NEXT:    beqz a2, .LBB14_2
671; CHECKIZHINX-NEXT:  # %bb.1:
672; CHECKIZHINX-NEXT:    mv a0, a1
673; CHECKIZHINX-NEXT:  .LBB14_2:
674; CHECKIZHINX-NEXT:    ret
675;
676; CHECKIZFHMIN-LABEL: select_fcmp_uno:
677; CHECKIZFHMIN:       # %bb.0:
678; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
679; CHECKIZFHMIN-NEXT:    feq.s a0, fa5, fa5
680; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0
681; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa5
682; CHECKIZFHMIN-NEXT:    and a0, a1, a0
683; CHECKIZFHMIN-NEXT:    beqz a0, .LBB14_2
684; CHECKIZFHMIN-NEXT:  # %bb.1:
685; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
686; CHECKIZFHMIN-NEXT:  .LBB14_2:
687; CHECKIZFHMIN-NEXT:    ret
688;
689; CHECKIZHINXMIN-LABEL: select_fcmp_uno:
690; CHECKIZHINXMIN:       # %bb.0:
691; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1
692; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0
693; CHECKIZHINXMIN-NEXT:    feq.s a2, a2, a2
694; CHECKIZHINXMIN-NEXT:    feq.s a3, a3, a3
695; CHECKIZHINXMIN-NEXT:    and a2, a3, a2
696; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB14_2
697; CHECKIZHINXMIN-NEXT:  # %bb.1:
698; CHECKIZHINXMIN-NEXT:    mv a0, a1
699; CHECKIZHINXMIN-NEXT:  .LBB14_2:
700; CHECKIZHINXMIN-NEXT:    ret
701  %1 = fcmp uno half %a, %b
702  %2 = select i1 %1, half %a, half %b
703  ret half %2
704}
705
706define half @select_fcmp_true(half %a, half %b) nounwind {
707; CHECK-LABEL: select_fcmp_true:
708; CHECK:       # %bb.0:
709; CHECK-NEXT:    ret
710;
711; CHECKIZHINX-LABEL: select_fcmp_true:
712; CHECKIZHINX:       # %bb.0:
713; CHECKIZHINX-NEXT:    ret
714;
715; CHECKIZFHMIN-LABEL: select_fcmp_true:
716; CHECKIZFHMIN:       # %bb.0:
717; CHECKIZFHMIN-NEXT:    ret
718;
719; CHECKIZHINXMIN-LABEL: select_fcmp_true:
720; CHECKIZHINXMIN:       # %bb.0:
721; CHECKIZHINXMIN-NEXT:    ret
722  %1 = fcmp true half %a, %b
723  %2 = select i1 %1, half %a, half %b
724  ret half %2
725}
726
727; Ensure that ISel succeeds for a select+fcmp that has an i32 result type.
728define i32 @i32_select_fcmp_oeq(half %a, half %b, i32 %c, i32 %d) nounwind {
729; CHECK-LABEL: i32_select_fcmp_oeq:
730; CHECK:       # %bb.0:
731; CHECK-NEXT:    feq.h a2, fa0, fa1
732; CHECK-NEXT:    bnez a2, .LBB16_2
733; CHECK-NEXT:  # %bb.1:
734; CHECK-NEXT:    mv a0, a1
735; CHECK-NEXT:  .LBB16_2:
736; CHECK-NEXT:    ret
737;
738; CHECKIZHINX-LABEL: i32_select_fcmp_oeq:
739; CHECKIZHINX:       # %bb.0:
740; CHECKIZHINX-NEXT:    feq.h a1, a0, a1
741; CHECKIZHINX-NEXT:    mv a0, a2
742; CHECKIZHINX-NEXT:    bnez a1, .LBB16_2
743; CHECKIZHINX-NEXT:  # %bb.1:
744; CHECKIZHINX-NEXT:    mv a0, a3
745; CHECKIZHINX-NEXT:  .LBB16_2:
746; CHECKIZHINX-NEXT:    ret
747;
748; CHECKIZFHMIN-LABEL: i32_select_fcmp_oeq:
749; CHECKIZFHMIN:       # %bb.0:
750; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
751; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
752; CHECKIZFHMIN-NEXT:    feq.s a2, fa4, fa5
753; CHECKIZFHMIN-NEXT:    bnez a2, .LBB16_2
754; CHECKIZFHMIN-NEXT:  # %bb.1:
755; CHECKIZFHMIN-NEXT:    mv a0, a1
756; CHECKIZFHMIN-NEXT:  .LBB16_2:
757; CHECKIZFHMIN-NEXT:    ret
758;
759; CHECKIZHINXMIN-LABEL: i32_select_fcmp_oeq:
760; CHECKIZHINXMIN:       # %bb.0:
761; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1
762; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0
763; CHECKIZHINXMIN-NEXT:    feq.s a1, a0, a1
764; CHECKIZHINXMIN-NEXT:    mv a0, a2
765; CHECKIZHINXMIN-NEXT:    bnez a1, .LBB16_2
766; CHECKIZHINXMIN-NEXT:  # %bb.1:
767; CHECKIZHINXMIN-NEXT:    mv a0, a3
768; CHECKIZHINXMIN-NEXT:  .LBB16_2:
769; CHECKIZHINXMIN-NEXT:    ret
770  %1 = fcmp oeq half %a, %b
771  %2 = select i1 %1, i32 %c, i32 %d
772  ret i32 %2
773}
774
775define i32 @select_fcmp_oeq_1_2(half %a, half %b) {
776; CHECK-LABEL: select_fcmp_oeq_1_2:
777; CHECK:       # %bb.0:
778; CHECK-NEXT:    feq.h a0, fa0, fa1
779; CHECK-NEXT:    li a1, 2
780; CHECK-NEXT:    sub a0, a1, a0
781; CHECK-NEXT:    ret
782;
783; CHECKIZHINX-LABEL: select_fcmp_oeq_1_2:
784; CHECKIZHINX:       # %bb.0:
785; CHECKIZHINX-NEXT:    feq.h a0, a0, a1
786; CHECKIZHINX-NEXT:    li a1, 2
787; CHECKIZHINX-NEXT:    sub a0, a1, a0
788; CHECKIZHINX-NEXT:    ret
789;
790; CHECKIZFHMIN-LABEL: select_fcmp_oeq_1_2:
791; CHECKIZFHMIN:       # %bb.0:
792; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
793; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
794; CHECKIZFHMIN-NEXT:    feq.s a0, fa4, fa5
795; CHECKIZFHMIN-NEXT:    li a1, 2
796; CHECKIZFHMIN-NEXT:    sub a0, a1, a0
797; CHECKIZFHMIN-NEXT:    ret
798;
799; CHECKIZHINXMIN-LABEL: select_fcmp_oeq_1_2:
800; CHECKIZHINXMIN:       # %bb.0:
801; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1
802; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0
803; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a1
804; CHECKIZHINXMIN-NEXT:    li a1, 2
805; CHECKIZHINXMIN-NEXT:    sub a0, a1, a0
806; CHECKIZHINXMIN-NEXT:    ret
807  %1 = fcmp fast oeq half %a, %b
808  %2 = select i1 %1, i32 1, i32 2
809  ret i32 %2
810}
811
812define signext i32 @select_fcmp_uge_negone_zero(half %a, half %b) nounwind {
813; CHECK-LABEL: select_fcmp_uge_negone_zero:
814; CHECK:       # %bb.0:
815; CHECK-NEXT:    fle.h a0, fa0, fa1
816; CHECK-NEXT:    addi a0, a0, -1
817; CHECK-NEXT:    ret
818;
819; CHECKIZHINX-LABEL: select_fcmp_uge_negone_zero:
820; CHECKIZHINX:       # %bb.0:
821; CHECKIZHINX-NEXT:    fle.h a0, a0, a1
822; CHECKIZHINX-NEXT:    addi a0, a0, -1
823; CHECKIZHINX-NEXT:    ret
824;
825; CHECKIZFHMIN-LABEL: select_fcmp_uge_negone_zero:
826; CHECKIZFHMIN:       # %bb.0:
827; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
828; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
829; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5
830; CHECKIZFHMIN-NEXT:    addi a0, a0, -1
831; CHECKIZFHMIN-NEXT:    ret
832;
833; CHECKIZHINXMIN-LABEL: select_fcmp_uge_negone_zero:
834; CHECKIZHINXMIN:       # %bb.0:
835; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1
836; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0
837; CHECKIZHINXMIN-NEXT:    fle.s a0, a0, a1
838; CHECKIZHINXMIN-NEXT:    addi a0, a0, -1
839; CHECKIZHINXMIN-NEXT:    ret
840  %1 = fcmp ugt half %a, %b
841  %2 = select i1 %1, i32 -1, i32 0
842  ret i32 %2
843}
844
845define signext i32 @select_fcmp_uge_1_2(half %a, half %b) nounwind {
846; CHECK-LABEL: select_fcmp_uge_1_2:
847; CHECK:       # %bb.0:
848; CHECK-NEXT:    fle.h a0, fa0, fa1
849; CHECK-NEXT:    addi a0, a0, 1
850; CHECK-NEXT:    ret
851;
852; CHECKIZHINX-LABEL: select_fcmp_uge_1_2:
853; CHECKIZHINX:       # %bb.0:
854; CHECKIZHINX-NEXT:    fle.h a0, a0, a1
855; CHECKIZHINX-NEXT:    addi a0, a0, 1
856; CHECKIZHINX-NEXT:    ret
857;
858; CHECKIZFHMIN-LABEL: select_fcmp_uge_1_2:
859; CHECKIZFHMIN:       # %bb.0:
860; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1
861; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0
862; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5
863; CHECKIZFHMIN-NEXT:    addi a0, a0, 1
864; CHECKIZFHMIN-NEXT:    ret
865;
866; CHECKIZHINXMIN-LABEL: select_fcmp_uge_1_2:
867; CHECKIZHINXMIN:       # %bb.0:
868; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1
869; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0
870; CHECKIZHINXMIN-NEXT:    fle.s a0, a0, a1
871; CHECKIZHINXMIN-NEXT:    addi a0, a0, 1
872; CHECKIZHINXMIN-NEXT:    ret
873  %1 = fcmp ugt half %a, %b
874  %2 = select i1 %1, i32 1, i32 2
875  ret i32 %2
876}
877