xref: /llvm-project/llvm/test/CodeGen/RISCV/float-select-icmp.ll (revision 12fee611ca533231f12c0b6518bfc525c893f238)
139707c1aSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
239707c1aSCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs < %s \
339707c1aSCraig Topper; RUN:   -target-abi=ilp32f | FileCheck %s
439707c1aSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs < %s \
539707c1aSCraig Topper; RUN:   -target-abi=lp64f | FileCheck %s
6fe558efeSShao-Ce SUN; RUN: llc -mtriple=riscv32 -mattr=+zfinx -verify-machineinstrs < %s \
7fe558efeSShao-Ce SUN; RUN:   -target-abi=ilp32 | FileCheck --check-prefix=CHECKZFINX %s
8fe558efeSShao-Ce SUN; RUN: llc -mtriple=riscv64 -mattr=+zfinx -verify-machineinstrs < %s \
9fe558efeSShao-Ce SUN; RUN:   -target-abi=lp64 | FileCheck --check-prefix=CHECKZFINX %s
1039707c1aSCraig Topper
1139707c1aSCraig Topperdefine float @select_icmp_eq(i32 signext %a, i32 signext %b, float %c, float %d) {
1239707c1aSCraig Topper; CHECK-LABEL: select_icmp_eq:
1339707c1aSCraig Topper; CHECK:       # %bb.0:
1439707c1aSCraig Topper; CHECK-NEXT:    beq a0, a1, .LBB0_2
1539707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
1639707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
1739707c1aSCraig Topper; CHECK-NEXT:  .LBB0_2:
1839707c1aSCraig Topper; CHECK-NEXT:    ret
19fe558efeSShao-Ce SUN;
20fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_eq:
21fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
22fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    beq a0, a1, .LBB0_2
23fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
24fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
25fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB0_2:
26fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
27fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
2839707c1aSCraig Topper  %1 = icmp eq i32 %a, %b
2939707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
3039707c1aSCraig Topper  ret float %2
3139707c1aSCraig Topper}
3239707c1aSCraig Topper
3339707c1aSCraig Topperdefine float @select_icmp_ne(i32 signext %a, i32 signext %b, float %c, float %d) {
3439707c1aSCraig Topper; CHECK-LABEL: select_icmp_ne:
3539707c1aSCraig Topper; CHECK:       # %bb.0:
3639707c1aSCraig Topper; CHECK-NEXT:    bne a0, a1, .LBB1_2
3739707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
3839707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
3939707c1aSCraig Topper; CHECK-NEXT:  .LBB1_2:
4039707c1aSCraig Topper; CHECK-NEXT:    ret
41fe558efeSShao-Ce SUN;
42fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_ne:
43fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
44fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    bne a0, a1, .LBB1_2
45fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
46fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
47fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB1_2:
48fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
49fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
5039707c1aSCraig Topper  %1 = icmp ne i32 %a, %b
5139707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
5239707c1aSCraig Topper  ret float %2
5339707c1aSCraig Topper}
5439707c1aSCraig Topper
5539707c1aSCraig Topperdefine float @select_icmp_ugt(i32 signext %a, i32 signext %b, float %c, float %d) {
5639707c1aSCraig Topper; CHECK-LABEL: select_icmp_ugt:
5739707c1aSCraig Topper; CHECK:       # %bb.0:
5839707c1aSCraig Topper; CHECK-NEXT:    bltu a1, a0, .LBB2_2
5939707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
6039707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
6139707c1aSCraig Topper; CHECK-NEXT:  .LBB2_2:
6239707c1aSCraig Topper; CHECK-NEXT:    ret
63fe558efeSShao-Ce SUN;
64fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_ugt:
65fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
66fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    bltu a1, a0, .LBB2_2
67fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
68fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
69fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB2_2:
70fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
71fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
7239707c1aSCraig Topper  %1 = icmp ugt i32 %a, %b
7339707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
7439707c1aSCraig Topper  ret float %2
7539707c1aSCraig Topper}
7639707c1aSCraig Topper
7739707c1aSCraig Topperdefine float @select_icmp_uge(i32 signext %a, i32 signext %b, float %c, float %d) {
7839707c1aSCraig Topper; CHECK-LABEL: select_icmp_uge:
7939707c1aSCraig Topper; CHECK:       # %bb.0:
8039707c1aSCraig Topper; CHECK-NEXT:    bgeu a0, a1, .LBB3_2
8139707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
8239707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
8339707c1aSCraig Topper; CHECK-NEXT:  .LBB3_2:
8439707c1aSCraig Topper; CHECK-NEXT:    ret
85fe558efeSShao-Ce SUN;
86fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_uge:
87fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
88fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    bgeu a0, a1, .LBB3_2
89fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
90fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
91fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB3_2:
92fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
93fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
9439707c1aSCraig Topper  %1 = icmp uge i32 %a, %b
9539707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
9639707c1aSCraig Topper  ret float %2
9739707c1aSCraig Topper}
9839707c1aSCraig Topper
9939707c1aSCraig Topperdefine float @select_icmp_ult(i32 signext %a, i32 signext %b, float %c, float %d) {
10039707c1aSCraig Topper; CHECK-LABEL: select_icmp_ult:
10139707c1aSCraig Topper; CHECK:       # %bb.0:
10239707c1aSCraig Topper; CHECK-NEXT:    bltu a0, a1, .LBB4_2
10339707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
10439707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
10539707c1aSCraig Topper; CHECK-NEXT:  .LBB4_2:
10639707c1aSCraig Topper; CHECK-NEXT:    ret
107fe558efeSShao-Ce SUN;
108fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_ult:
109fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
110fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    bltu a0, a1, .LBB4_2
111fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
112fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
113fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB4_2:
114fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
115fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
11639707c1aSCraig Topper  %1 = icmp ult i32 %a, %b
11739707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
11839707c1aSCraig Topper  ret float %2
11939707c1aSCraig Topper}
12039707c1aSCraig Topper
12139707c1aSCraig Topperdefine float @select_icmp_ule(i32 signext %a, i32 signext %b, float %c, float %d) {
12239707c1aSCraig Topper; CHECK-LABEL: select_icmp_ule:
12339707c1aSCraig Topper; CHECK:       # %bb.0:
12439707c1aSCraig Topper; CHECK-NEXT:    bgeu a1, a0, .LBB5_2
12539707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
12639707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
12739707c1aSCraig Topper; CHECK-NEXT:  .LBB5_2:
12839707c1aSCraig Topper; CHECK-NEXT:    ret
129fe558efeSShao-Ce SUN;
130fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_ule:
131fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
132fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    bgeu a1, a0, .LBB5_2
133fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
134fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
135fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB5_2:
136fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
137fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
13839707c1aSCraig Topper  %1 = icmp ule i32 %a, %b
13939707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
14039707c1aSCraig Topper  ret float %2
14139707c1aSCraig Topper}
14239707c1aSCraig Topper
14339707c1aSCraig Topperdefine float @select_icmp_sgt(i32 signext %a, i32 signext %b, float %c, float %d) {
14439707c1aSCraig Topper; CHECK-LABEL: select_icmp_sgt:
14539707c1aSCraig Topper; CHECK:       # %bb.0:
14639707c1aSCraig Topper; CHECK-NEXT:    blt a1, a0, .LBB6_2
14739707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
14839707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
14939707c1aSCraig Topper; CHECK-NEXT:  .LBB6_2:
15039707c1aSCraig Topper; CHECK-NEXT:    ret
151fe558efeSShao-Ce SUN;
152fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_sgt:
153fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
154fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    blt a1, a0, .LBB6_2
155fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
156fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
157fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB6_2:
158fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
159fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
16039707c1aSCraig Topper  %1 = icmp sgt i32 %a, %b
16139707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
16239707c1aSCraig Topper  ret float %2
16339707c1aSCraig Topper}
16439707c1aSCraig Topper
16539707c1aSCraig Topperdefine float @select_icmp_sge(i32 signext %a, i32 signext %b, float %c, float %d) {
16639707c1aSCraig Topper; CHECK-LABEL: select_icmp_sge:
16739707c1aSCraig Topper; CHECK:       # %bb.0:
16839707c1aSCraig Topper; CHECK-NEXT:    bge a0, a1, .LBB7_2
16939707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
17039707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
17139707c1aSCraig Topper; CHECK-NEXT:  .LBB7_2:
17239707c1aSCraig Topper; CHECK-NEXT:    ret
173fe558efeSShao-Ce SUN;
174fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_sge:
175fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
176fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    bge a0, a1, .LBB7_2
177fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
178fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
179fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB7_2:
180fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
181fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
18239707c1aSCraig Topper  %1 = icmp sge i32 %a, %b
18339707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
18439707c1aSCraig Topper  ret float %2
18539707c1aSCraig Topper}
18639707c1aSCraig Topper
18739707c1aSCraig Topperdefine float @select_icmp_slt(i32 signext %a, i32 signext %b, float %c, float %d) {
18839707c1aSCraig Topper; CHECK-LABEL: select_icmp_slt:
18939707c1aSCraig Topper; CHECK:       # %bb.0:
19039707c1aSCraig Topper; CHECK-NEXT:    blt a0, a1, .LBB8_2
19139707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
19239707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
19339707c1aSCraig Topper; CHECK-NEXT:  .LBB8_2:
19439707c1aSCraig Topper; CHECK-NEXT:    ret
195fe558efeSShao-Ce SUN;
196fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_slt:
197fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
198fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    blt a0, a1, .LBB8_2
199fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
200fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
201fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB8_2:
202fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
203fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
20439707c1aSCraig Topper  %1 = icmp slt i32 %a, %b
20539707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
20639707c1aSCraig Topper  ret float %2
20739707c1aSCraig Topper}
20839707c1aSCraig Topper
20939707c1aSCraig Topperdefine float @select_icmp_sle(i32 signext %a, i32 signext %b, float %c, float %d) {
21039707c1aSCraig Topper; CHECK-LABEL: select_icmp_sle:
21139707c1aSCraig Topper; CHECK:       # %bb.0:
21239707c1aSCraig Topper; CHECK-NEXT:    bge a1, a0, .LBB9_2
21339707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
21439707c1aSCraig Topper; CHECK-NEXT:    fmv.s fa0, fa1
21539707c1aSCraig Topper; CHECK-NEXT:  .LBB9_2:
21639707c1aSCraig Topper; CHECK-NEXT:    ret
217fe558efeSShao-Ce SUN;
218fe558efeSShao-Ce SUN; CHECKZFINX-LABEL: select_icmp_sle:
219fe558efeSShao-Ce SUN; CHECKZFINX:       # %bb.0:
220fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    bge a1, a0, .LBB9_2
221fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  # %bb.1:
222fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a2, a3
223fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:  .LBB9_2:
224fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    mv a0, a2
225fe558efeSShao-Ce SUN; CHECKZFINX-NEXT:    ret
22639707c1aSCraig Topper  %1 = icmp sle i32 %a, %b
22739707c1aSCraig Topper  %2 = select i1 %1, float %c, float %d
22839707c1aSCraig Topper  ret float %2
22939707c1aSCraig Topper}
230548fa1d3SLiaoChunyu
231548fa1d3SLiaoChunyudefine float @select_icmp_slt_one(i32 signext %a) {
232548fa1d3SLiaoChunyu; CHECK-LABEL: select_icmp_slt_one:
233548fa1d3SLiaoChunyu; CHECK:       # %bb.0:
234548fa1d3SLiaoChunyu; CHECK-NEXT:    slti a0, a0, 1
235548fa1d3SLiaoChunyu; CHECK-NEXT:    fcvt.s.w fa0, a0
236548fa1d3SLiaoChunyu; CHECK-NEXT:    ret
237548fa1d3SLiaoChunyu;
238548fa1d3SLiaoChunyu; CHECKZFINX-LABEL: select_icmp_slt_one:
239548fa1d3SLiaoChunyu; CHECKZFINX:       # %bb.0:
240548fa1d3SLiaoChunyu; CHECKZFINX-NEXT:    slti a0, a0, 1
241548fa1d3SLiaoChunyu; CHECKZFINX-NEXT:    fcvt.s.w a0, a0
242548fa1d3SLiaoChunyu; CHECKZFINX-NEXT:    ret
243548fa1d3SLiaoChunyu  %1 = icmp slt i32 %a, 1
244548fa1d3SLiaoChunyu  %2 = select i1 %1, float 1.000000e+00, float 0.000000e+00
245548fa1d3SLiaoChunyu  ret float %2
246548fa1d3SLiaoChunyu}
247548fa1d3SLiaoChunyu
248548fa1d3SLiaoChunyudefine float @select_icmp_sgt_zero(i32 signext %a) {
249548fa1d3SLiaoChunyu; CHECK-LABEL: select_icmp_sgt_zero:
250548fa1d3SLiaoChunyu; CHECK:       # %bb.0:
251*12fee611SLiaoChunyu; CHECK-NEXT:    slti a0, a0, 1
252548fa1d3SLiaoChunyu; CHECK-NEXT:    fcvt.s.w fa0, a0
253548fa1d3SLiaoChunyu; CHECK-NEXT:    ret
254548fa1d3SLiaoChunyu;
255548fa1d3SLiaoChunyu; CHECKZFINX-LABEL: select_icmp_sgt_zero:
256548fa1d3SLiaoChunyu; CHECKZFINX:       # %bb.0:
257*12fee611SLiaoChunyu; CHECKZFINX-NEXT:    slti a0, a0, 1
258548fa1d3SLiaoChunyu; CHECKZFINX-NEXT:    fcvt.s.w a0, a0
259548fa1d3SLiaoChunyu; CHECKZFINX-NEXT:    ret
260548fa1d3SLiaoChunyu  %1 = icmp sgt i32 %a, 0
261548fa1d3SLiaoChunyu  %2 = select i1 %1, float 0.000000e+00, float 1.000000e+00
262548fa1d3SLiaoChunyu  ret float %2
263548fa1d3SLiaoChunyu}
264