[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / RISCV / half-select-fcmp.ll
blobd92dcb9eac4c6151acddf8cfcc6204d0e14573f4
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
19 define 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
25 ; CHECKIZHINX-LABEL: select_fcmp_false:
26 ; CHECKIZHINX:       # %bb.0:
27 ; CHECKIZHINX-NEXT:    mv a0, a1
28 ; CHECKIZHINX-NEXT:    ret
30 ; CHECKIZFHMIN-LABEL: select_fcmp_false:
31 ; CHECKIZFHMIN:       # %bb.0:
32 ; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1
33 ; CHECKIZFHMIN-NEXT:    ret
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
44 define 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
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
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
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
89 define 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
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
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
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
134 define 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
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
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
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
179 define 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
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
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
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
224 define 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
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
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
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
269 define 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
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
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
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
322 define 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
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
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
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
375 define 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
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
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
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
428 define 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
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
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
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
473 define 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
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
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
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
518 define 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
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
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
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
563 define 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
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
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
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
608 define 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
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
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
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
653 define 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
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
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
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
706 define half @select_fcmp_true(half %a, half %b) nounwind {
707 ; CHECK-LABEL: select_fcmp_true:
708 ; CHECK:       # %bb.0:
709 ; CHECK-NEXT:    ret
711 ; CHECKIZHINX-LABEL: select_fcmp_true:
712 ; CHECKIZHINX:       # %bb.0:
713 ; CHECKIZHINX-NEXT:    ret
715 ; CHECKIZFHMIN-LABEL: select_fcmp_true:
716 ; CHECKIZFHMIN:       # %bb.0:
717 ; CHECKIZFHMIN-NEXT:    ret
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
727 ; Ensure that ISel succeeds for a select+fcmp that has an i32 result type.
728 define 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
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
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
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
775 define 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
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
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
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
812 define 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
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
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
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
845 define 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
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
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
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