xref: /llvm-project/llvm/test/CodeGen/RISCV/double-select-icmp.ll (revision 576d81baa5cf1801bae0fd05892be34acde33c6a)
139707c1aSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
239707c1aSCraig Topper
339707c1aSCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
439707c1aSCraig Topper; RUN:   -target-abi=ilp32d | FileCheck %s
539707c1aSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
639707c1aSCraig Topper; RUN:   -target-abi=lp64d | FileCheck %s
78b90f8e0SShao-Ce SUN; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \
88b90f8e0SShao-Ce SUN; RUN:   -target-abi=ilp32 | FileCheck -check-prefixes=RV32ZDINX %s
92dc0fa05SShao-Ce SUN; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
102dc0fa05SShao-Ce SUN; RUN:   -target-abi=lp64 | FileCheck -check-prefixes=RV64ZDINX %s
1139707c1aSCraig Topper
1239707c1aSCraig Topperdefine double @select_icmp_eq(i32 signext %a, i32 signext %b, double %c, double %d) {
1339707c1aSCraig Topper; CHECK-LABEL: select_icmp_eq:
1439707c1aSCraig Topper; CHECK:       # %bb.0:
1539707c1aSCraig Topper; CHECK-NEXT:    beq a0, a1, .LBB0_2
1639707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
1739707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
1839707c1aSCraig Topper; CHECK-NEXT:  .LBB0_2:
1939707c1aSCraig Topper; CHECK-NEXT:    ret
202dc0fa05SShao-Ce SUN;
218b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_eq:
228b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
23*576d81baSCraig Topper; RV32ZDINX-NEXT:    beq a0, a1, .LBB0_2
248b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
25*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
26*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
278b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB0_2:
28*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
29*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
308b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
318b90f8e0SShao-Ce SUN;
322dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_eq:
332dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
342dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    beq a0, a1, .LBB0_2
352dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
362dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
372dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB0_2:
382dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
392dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
4039707c1aSCraig Topper  %1 = icmp eq i32 %a, %b
4139707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
4239707c1aSCraig Topper  ret double %2
4339707c1aSCraig Topper}
4439707c1aSCraig Topper
4539707c1aSCraig Topperdefine double @select_icmp_ne(i32 signext %a, i32 signext %b, double %c, double %d) {
4639707c1aSCraig Topper; CHECK-LABEL: select_icmp_ne:
4739707c1aSCraig Topper; CHECK:       # %bb.0:
4839707c1aSCraig Topper; CHECK-NEXT:    bne a0, a1, .LBB1_2
4939707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
5039707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
5139707c1aSCraig Topper; CHECK-NEXT:  .LBB1_2:
5239707c1aSCraig Topper; CHECK-NEXT:    ret
532dc0fa05SShao-Ce SUN;
548b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_ne:
558b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
56*576d81baSCraig Topper; RV32ZDINX-NEXT:    bne a0, a1, .LBB1_2
578b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
58*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
59*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
608b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB1_2:
61*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
62*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
638b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
648b90f8e0SShao-Ce SUN;
652dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_ne:
662dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
672dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    bne a0, a1, .LBB1_2
682dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
692dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
702dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB1_2:
712dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
722dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
7339707c1aSCraig Topper  %1 = icmp ne i32 %a, %b
7439707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
7539707c1aSCraig Topper  ret double %2
7639707c1aSCraig Topper}
7739707c1aSCraig Topper
7839707c1aSCraig Topperdefine double @select_icmp_ugt(i32 signext %a, i32 signext %b, double %c, double %d) {
7939707c1aSCraig Topper; CHECK-LABEL: select_icmp_ugt:
8039707c1aSCraig Topper; CHECK:       # %bb.0:
8139707c1aSCraig Topper; CHECK-NEXT:    bltu a1, a0, .LBB2_2
8239707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
8339707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
8439707c1aSCraig Topper; CHECK-NEXT:  .LBB2_2:
8539707c1aSCraig Topper; CHECK-NEXT:    ret
862dc0fa05SShao-Ce SUN;
878b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_ugt:
888b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
89*576d81baSCraig Topper; RV32ZDINX-NEXT:    bltu a1, a0, .LBB2_2
908b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
91*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
92*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
938b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB2_2:
94*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
95*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
968b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
978b90f8e0SShao-Ce SUN;
982dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_ugt:
992dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
1002dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    bltu a1, a0, .LBB2_2
1012dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
1022dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
1032dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB2_2:
1042dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
1052dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
10639707c1aSCraig Topper  %1 = icmp ugt i32 %a, %b
10739707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
10839707c1aSCraig Topper  ret double %2
10939707c1aSCraig Topper}
11039707c1aSCraig Topper
11139707c1aSCraig Topperdefine double @select_icmp_uge(i32 signext %a, i32 signext %b, double %c, double %d) {
11239707c1aSCraig Topper; CHECK-LABEL: select_icmp_uge:
11339707c1aSCraig Topper; CHECK:       # %bb.0:
11439707c1aSCraig Topper; CHECK-NEXT:    bgeu a0, a1, .LBB3_2
11539707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
11639707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
11739707c1aSCraig Topper; CHECK-NEXT:  .LBB3_2:
11839707c1aSCraig Topper; CHECK-NEXT:    ret
1192dc0fa05SShao-Ce SUN;
1208b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_uge:
1218b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
122*576d81baSCraig Topper; RV32ZDINX-NEXT:    bgeu a0, a1, .LBB3_2
1238b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
124*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
125*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
1268b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB3_2:
127*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
128*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
1298b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
1308b90f8e0SShao-Ce SUN;
1312dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_uge:
1322dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
1332dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    bgeu a0, a1, .LBB3_2
1342dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
1352dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
1362dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB3_2:
1372dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
1382dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
13939707c1aSCraig Topper  %1 = icmp uge i32 %a, %b
14039707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
14139707c1aSCraig Topper  ret double %2
14239707c1aSCraig Topper}
14339707c1aSCraig Topper
14439707c1aSCraig Topperdefine double @select_icmp_ult(i32 signext %a, i32 signext %b, double %c, double %d) {
14539707c1aSCraig Topper; CHECK-LABEL: select_icmp_ult:
14639707c1aSCraig Topper; CHECK:       # %bb.0:
14739707c1aSCraig Topper; CHECK-NEXT:    bltu a0, a1, .LBB4_2
14839707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
14939707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
15039707c1aSCraig Topper; CHECK-NEXT:  .LBB4_2:
15139707c1aSCraig Topper; CHECK-NEXT:    ret
1522dc0fa05SShao-Ce SUN;
1538b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_ult:
1548b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
155*576d81baSCraig Topper; RV32ZDINX-NEXT:    bltu a0, a1, .LBB4_2
1568b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
157*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
158*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
1598b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB4_2:
160*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
161*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
1628b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
1638b90f8e0SShao-Ce SUN;
1642dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_ult:
1652dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
1662dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    bltu a0, a1, .LBB4_2
1672dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
1682dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
1692dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB4_2:
1702dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
1712dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
17239707c1aSCraig Topper  %1 = icmp ult i32 %a, %b
17339707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
17439707c1aSCraig Topper  ret double %2
17539707c1aSCraig Topper}
17639707c1aSCraig Topper
17739707c1aSCraig Topperdefine double @select_icmp_ule(i32 signext %a, i32 signext %b, double %c, double %d) {
17839707c1aSCraig Topper; CHECK-LABEL: select_icmp_ule:
17939707c1aSCraig Topper; CHECK:       # %bb.0:
18039707c1aSCraig Topper; CHECK-NEXT:    bgeu a1, a0, .LBB5_2
18139707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
18239707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
18339707c1aSCraig Topper; CHECK-NEXT:  .LBB5_2:
18439707c1aSCraig Topper; CHECK-NEXT:    ret
1852dc0fa05SShao-Ce SUN;
1868b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_ule:
1878b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
188*576d81baSCraig Topper; RV32ZDINX-NEXT:    bgeu a1, a0, .LBB5_2
1898b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
190*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
191*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
1928b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB5_2:
193*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
194*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
1958b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
1968b90f8e0SShao-Ce SUN;
1972dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_ule:
1982dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
1992dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    bgeu a1, a0, .LBB5_2
2002dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
2012dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
2022dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB5_2:
2032dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
2042dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
20539707c1aSCraig Topper  %1 = icmp ule i32 %a, %b
20639707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
20739707c1aSCraig Topper  ret double %2
20839707c1aSCraig Topper}
20939707c1aSCraig Topper
21039707c1aSCraig Topperdefine double @select_icmp_sgt(i32 signext %a, i32 signext %b, double %c, double %d) {
21139707c1aSCraig Topper; CHECK-LABEL: select_icmp_sgt:
21239707c1aSCraig Topper; CHECK:       # %bb.0:
21339707c1aSCraig Topper; CHECK-NEXT:    blt a1, a0, .LBB6_2
21439707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
21539707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
21639707c1aSCraig Topper; CHECK-NEXT:  .LBB6_2:
21739707c1aSCraig Topper; CHECK-NEXT:    ret
2182dc0fa05SShao-Ce SUN;
2198b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_sgt:
2208b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
221*576d81baSCraig Topper; RV32ZDINX-NEXT:    blt a1, a0, .LBB6_2
2228b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
223*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
224*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
2258b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB6_2:
226*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
227*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
2288b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
2298b90f8e0SShao-Ce SUN;
2302dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_sgt:
2312dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
2322dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    blt a1, a0, .LBB6_2
2332dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
2342dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
2352dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB6_2:
2362dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
2372dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
23839707c1aSCraig Topper  %1 = icmp sgt i32 %a, %b
23939707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
24039707c1aSCraig Topper  ret double %2
24139707c1aSCraig Topper}
24239707c1aSCraig Topper
24339707c1aSCraig Topperdefine double @select_icmp_sge(i32 signext %a, i32 signext %b, double %c, double %d) {
24439707c1aSCraig Topper; CHECK-LABEL: select_icmp_sge:
24539707c1aSCraig Topper; CHECK:       # %bb.0:
24639707c1aSCraig Topper; CHECK-NEXT:    bge a0, a1, .LBB7_2
24739707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
24839707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
24939707c1aSCraig Topper; CHECK-NEXT:  .LBB7_2:
25039707c1aSCraig Topper; CHECK-NEXT:    ret
2512dc0fa05SShao-Ce SUN;
2528b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_sge:
2538b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
254*576d81baSCraig Topper; RV32ZDINX-NEXT:    bge a0, a1, .LBB7_2
2558b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
256*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
257*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
2588b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB7_2:
259*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
260*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
2618b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
2628b90f8e0SShao-Ce SUN;
2632dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_sge:
2642dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
2652dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    bge a0, a1, .LBB7_2
2662dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
2672dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
2682dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB7_2:
2692dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
2702dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
27139707c1aSCraig Topper  %1 = icmp sge i32 %a, %b
27239707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
27339707c1aSCraig Topper  ret double %2
27439707c1aSCraig Topper}
27539707c1aSCraig Topper
27639707c1aSCraig Topperdefine double @select_icmp_slt(i32 signext %a, i32 signext %b, double %c, double %d) {
27739707c1aSCraig Topper; CHECK-LABEL: select_icmp_slt:
27839707c1aSCraig Topper; CHECK:       # %bb.0:
27939707c1aSCraig Topper; CHECK-NEXT:    blt a0, a1, .LBB8_2
28039707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
28139707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
28239707c1aSCraig Topper; CHECK-NEXT:  .LBB8_2:
28339707c1aSCraig Topper; CHECK-NEXT:    ret
2842dc0fa05SShao-Ce SUN;
2858b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_slt:
2868b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
287*576d81baSCraig Topper; RV32ZDINX-NEXT:    blt a0, a1, .LBB8_2
2888b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
289*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
290*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
2918b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB8_2:
292*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
293*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
2948b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
2958b90f8e0SShao-Ce SUN;
2962dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_slt:
2972dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
2982dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    blt a0, a1, .LBB8_2
2992dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
3002dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
3012dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB8_2:
3022dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
3032dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
30439707c1aSCraig Topper  %1 = icmp slt i32 %a, %b
30539707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
30639707c1aSCraig Topper  ret double %2
30739707c1aSCraig Topper}
30839707c1aSCraig Topper
30939707c1aSCraig Topperdefine double @select_icmp_sle(i32 signext %a, i32 signext %b, double %c, double %d) {
31039707c1aSCraig Topper; CHECK-LABEL: select_icmp_sle:
31139707c1aSCraig Topper; CHECK:       # %bb.0:
31239707c1aSCraig Topper; CHECK-NEXT:    bge a1, a0, .LBB9_2
31339707c1aSCraig Topper; CHECK-NEXT:  # %bb.1:
31439707c1aSCraig Topper; CHECK-NEXT:    fmv.d fa0, fa1
31539707c1aSCraig Topper; CHECK-NEXT:  .LBB9_2:
31639707c1aSCraig Topper; CHECK-NEXT:    ret
3172dc0fa05SShao-Ce SUN;
3188b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: select_icmp_sle:
3198b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0:
320*576d81baSCraig Topper; RV32ZDINX-NEXT:    bge a1, a0, .LBB9_2
3218b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  # %bb.1:
322*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a4
323*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a5
3248b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:  .LBB9_2:
325*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a0, a2
326*576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a1, a3
3278b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
3288b90f8e0SShao-Ce SUN;
3292dc0fa05SShao-Ce SUN; RV64ZDINX-LABEL: select_icmp_sle:
3302dc0fa05SShao-Ce SUN; RV64ZDINX:       # %bb.0:
3312dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    bge a1, a0, .LBB9_2
3322dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  # %bb.1:
3332dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a2, a3
3342dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:  .LBB9_2:
3352dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    mv a0, a2
3362dc0fa05SShao-Ce SUN; RV64ZDINX-NEXT:    ret
33739707c1aSCraig Topper  %1 = icmp sle i32 %a, %b
33839707c1aSCraig Topper  %2 = select i1 %1, double %c, double %d
33939707c1aSCraig Topper  ret double %2
34039707c1aSCraig Topper}
341548fa1d3SLiaoChunyu
342548fa1d3SLiaoChunyudefine double @select_icmp_slt_one(i32 signext %a) {
343548fa1d3SLiaoChunyu; CHECK-LABEL: select_icmp_slt_one:
344548fa1d3SLiaoChunyu; CHECK:       # %bb.0:
345548fa1d3SLiaoChunyu; CHECK-NEXT:    slti a0, a0, 1
346548fa1d3SLiaoChunyu; CHECK-NEXT:    fcvt.d.w fa0, a0
347548fa1d3SLiaoChunyu; CHECK-NEXT:    ret
348548fa1d3SLiaoChunyu;
349548fa1d3SLiaoChunyu; RV32ZDINX-LABEL: select_icmp_slt_one:
350548fa1d3SLiaoChunyu; RV32ZDINX:       # %bb.0:
351548fa1d3SLiaoChunyu; RV32ZDINX-NEXT:    slti a0, a0, 1
352548fa1d3SLiaoChunyu; RV32ZDINX-NEXT:    fcvt.d.w a0, a0
353548fa1d3SLiaoChunyu; RV32ZDINX-NEXT:    ret
354548fa1d3SLiaoChunyu;
355548fa1d3SLiaoChunyu; RV64ZDINX-LABEL: select_icmp_slt_one:
356548fa1d3SLiaoChunyu; RV64ZDINX:       # %bb.0:
357548fa1d3SLiaoChunyu; RV64ZDINX-NEXT:    slti a0, a0, 1
358548fa1d3SLiaoChunyu; RV64ZDINX-NEXT:    fcvt.d.w a0, a0
359548fa1d3SLiaoChunyu; RV64ZDINX-NEXT:    ret
360548fa1d3SLiaoChunyu  %1 = icmp slt i32 %a, 1
361548fa1d3SLiaoChunyu  %2 = select i1 %1, double 1.000000e+00, double 0.000000e+00
362548fa1d3SLiaoChunyu  ret double %2
363548fa1d3SLiaoChunyu}
364548fa1d3SLiaoChunyu
365548fa1d3SLiaoChunyudefine double @select_icmp_sgt_zero(i32 signext %a) {
366548fa1d3SLiaoChunyu; CHECK-LABEL: select_icmp_sgt_zero:
367548fa1d3SLiaoChunyu; CHECK:       # %bb.0:
36812fee611SLiaoChunyu; CHECK-NEXT:    slti a0, a0, 1
369548fa1d3SLiaoChunyu; CHECK-NEXT:    fcvt.d.w fa0, a0
370548fa1d3SLiaoChunyu; CHECK-NEXT:    ret
371548fa1d3SLiaoChunyu;
372548fa1d3SLiaoChunyu; RV32ZDINX-LABEL: select_icmp_sgt_zero:
373548fa1d3SLiaoChunyu; RV32ZDINX:       # %bb.0:
37412fee611SLiaoChunyu; RV32ZDINX-NEXT:    slti a0, a0, 1
375548fa1d3SLiaoChunyu; RV32ZDINX-NEXT:    fcvt.d.w a0, a0
376548fa1d3SLiaoChunyu; RV32ZDINX-NEXT:    ret
377548fa1d3SLiaoChunyu;
378548fa1d3SLiaoChunyu; RV64ZDINX-LABEL: select_icmp_sgt_zero:
379548fa1d3SLiaoChunyu; RV64ZDINX:       # %bb.0:
38012fee611SLiaoChunyu; RV64ZDINX-NEXT:    slti a0, a0, 1
381548fa1d3SLiaoChunyu; RV64ZDINX-NEXT:    fcvt.d.w a0, a0
382548fa1d3SLiaoChunyu; RV64ZDINX-NEXT:    ret
383548fa1d3SLiaoChunyu  %1 = icmp sgt i32 %a, 0
384548fa1d3SLiaoChunyu  %2 = select i1 %1, double 0.000000e+00, double 1.000000e+00
385548fa1d3SLiaoChunyu  ret double %2
386548fa1d3SLiaoChunyu}
387