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