diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 22c61eb20885b..612ccb4cc15c3 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -13493,6 +13493,7 @@ static SDValue performMemPairCombine(SDNode *N, // (fp_to_int (ffloor X)) -> fcvt X, rdn // (fp_to_int (fceil X)) -> fcvt X, rup // (fp_to_int (fround X)) -> fcvt X, rmm +// (fp_to_int (frint X)) -> fcvt X static SDValue performFP_TO_INTCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI, const RISCVSubtarget &Subtarget) { @@ -13516,10 +13517,7 @@ static SDValue performFP_TO_INTCombine(SDNode *N, RISCVFPRndMode::RoundingMode FRM = matchRoundingOp(Src.getOpcode()); // If the result is invalid, we didn't find a foldable instruction. - // If the result is dynamic, then we found an frint which we don't yet - // support. It will cause 7 to be written to the FRM CSR for vector. - // FIXME: We could support this by using VFCVT_X_F_VL/VFCVT_XU_F_VL below. - if (FRM == RISCVFPRndMode::Invalid || FRM == RISCVFPRndMode::DYN) + if (FRM == RISCVFPRndMode::Invalid) return SDValue(); SDLoc DL(N); @@ -13558,6 +13556,10 @@ static SDValue performFP_TO_INTCombine(SDNode *N, unsigned Opc = IsSigned ? RISCVISD::VFCVT_RTZ_X_F_VL : RISCVISD::VFCVT_RTZ_XU_F_VL; FpToInt = DAG.getNode(Opc, DL, ContainerVT, XVal, Mask, VL); + } else if (FRM == RISCVFPRndMode::DYN) { + unsigned Opc = + IsSigned ? RISCVISD::VFCVT_X_F_VL : RISCVISD::VFCVT_XU_F_VL; + FpToInt = DAG.getNode(Opc, DL, ContainerVT, XVal, Mask, VL); } else { unsigned Opc = IsSigned ? RISCVISD::VFCVT_RM_X_F_VL : RISCVISD::VFCVT_RM_XU_F_VL; diff --git a/llvm/test/CodeGen/RISCV/rvv/double-round-conv.ll b/llvm/test/CodeGen/RISCV/rvv/double-round-conv.ll index 2ff0b21cd251e..ee9ad097b442b 100644 --- a/llvm/test/CodeGen/RISCV/rvv/double-round-conv.ll +++ b/llvm/test/CodeGen/RISCV/rvv/double-round-conv.ll @@ -1209,33 +1209,15 @@ define @rint_nxv1f64_to_ui16( %x) { define @rint_nxv1f64_to_si32( %x) { ; RV32-LABEL: rint_nxv1f64_to_si32: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI36_0) -; RV32-NEXT: fld fa5, %lo(.LCPI36_0)(a0) -; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV32-NEXT: vfabs.v v9, v8 -; RV32-NEXT: vmflt.vf v0, v9, fa5 -; RV32-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, mf2, ta, ma -; RV32-NEXT: vfncvt.rtz.x.f.w v9, v8 +; RV32-NEXT: vsetvli a0, zero, e32, mf2, ta, ma +; RV32-NEXT: vfncvt.x.f.w v9, v8 ; RV32-NEXT: vmv1r.v v8, v9 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv1f64_to_si32: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI36_0) -; RV64-NEXT: fld fa5, %lo(.LCPI36_0)(a0) -; RV64-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV64-NEXT: vfabs.v v9, v8 -; RV64-NEXT: vmflt.vf v0, v9, fa5 -; RV64-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, mf2, ta, ma -; RV64-NEXT: vfncvt.rtz.x.f.w v9, v8 +; RV64-NEXT: vsetvli a0, zero, e32, mf2, ta, ma +; RV64-NEXT: vfncvt.x.f.w v9, v8 ; RV64-NEXT: vmv1r.v v8, v9 ; RV64-NEXT: ret %a = call @llvm.rint.nxv1f64( %x) @@ -1246,33 +1228,15 @@ define @rint_nxv1f64_to_si32( %x) { define @rint_nxv1f64_to_ui32( %x) { ; RV32-LABEL: rint_nxv1f64_to_ui32: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI37_0) -; RV32-NEXT: fld fa5, %lo(.LCPI37_0)(a0) -; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV32-NEXT: vfabs.v v9, v8 -; RV32-NEXT: vmflt.vf v0, v9, fa5 -; RV32-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, mf2, ta, ma -; RV32-NEXT: vfncvt.rtz.xu.f.w v9, v8 +; RV32-NEXT: vsetvli a0, zero, e32, mf2, ta, ma +; RV32-NEXT: vfncvt.xu.f.w v9, v8 ; RV32-NEXT: vmv1r.v v8, v9 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv1f64_to_ui32: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI37_0) -; RV64-NEXT: fld fa5, %lo(.LCPI37_0)(a0) -; RV64-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV64-NEXT: vfabs.v v9, v8 -; RV64-NEXT: vmflt.vf v0, v9, fa5 -; RV64-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, mf2, ta, ma -; RV64-NEXT: vfncvt.rtz.xu.f.w v9, v8 +; RV64-NEXT: vsetvli a0, zero, e32, mf2, ta, ma +; RV64-NEXT: vfncvt.xu.f.w v9, v8 ; RV64-NEXT: vmv1r.v v8, v9 ; RV64-NEXT: ret %a = call @llvm.rint.nxv1f64( %x) @@ -1283,30 +1247,14 @@ define @rint_nxv1f64_to_ui32( %x) { define @rint_nxv1f64_to_si64( %x) { ; RV32-LABEL: rint_nxv1f64_to_si64: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI38_0) -; RV32-NEXT: fld fa5, %lo(.LCPI38_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV32-NEXT: vfabs.v v9, v8 -; RV32-NEXT: vmflt.vf v0, v9, fa5 -; RV32-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV32-NEXT: vfcvt.rtz.x.f.v v8, v8 +; RV32-NEXT: vfcvt.x.f.v v8, v8 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv1f64_to_si64: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI38_0) -; RV64-NEXT: fld fa5, %lo(.LCPI38_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV64-NEXT: vfabs.v v9, v8 -; RV64-NEXT: vmflt.vf v0, v9, fa5 -; RV64-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV64-NEXT: vfcvt.rtz.x.f.v v8, v8 +; RV64-NEXT: vfcvt.x.f.v v8, v8 ; RV64-NEXT: ret %a = call @llvm.rint.nxv1f64( %x) %b = fptosi %a to @@ -1316,30 +1264,14 @@ define @rint_nxv1f64_to_si64( %x) { define @rint_nxv1f64_to_ui64( %x) { ; RV32-LABEL: rint_nxv1f64_to_ui64: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI39_0) -; RV32-NEXT: fld fa5, %lo(.LCPI39_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV32-NEXT: vfabs.v v9, v8 -; RV32-NEXT: vmflt.vf v0, v9, fa5 -; RV32-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV32-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; RV32-NEXT: vfcvt.xu.f.v v8, v8 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv1f64_to_ui64: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI39_0) -; RV64-NEXT: fld fa5, %lo(.LCPI39_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e64, m1, ta, ma -; RV64-NEXT: vfabs.v v9, v8 -; RV64-NEXT: vmflt.vf v0, v9, fa5 -; RV64-NEXT: vfcvt.x.f.v v9, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v9, v9, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m1, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; RV64-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; RV64-NEXT: vfcvt.xu.f.v v8, v8 ; RV64-NEXT: ret %a = call @llvm.rint.nxv1f64( %x) %b = fptoui %a to @@ -1519,33 +1451,15 @@ define @rint_nxv4f64_to_ui16( %x) { define @rint_nxv4f64_to_si32( %x) { ; RV32-LABEL: rint_nxv4f64_to_si32: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI44_0) -; RV32-NEXT: fld fa5, %lo(.LCPI44_0)(a0) -; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV32-NEXT: vfabs.v v12, v8 -; RV32-NEXT: vmflt.vf v0, v12, fa5 -; RV32-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; RV32-NEXT: vfncvt.rtz.x.f.w v12, v8 +; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma +; RV32-NEXT: vfncvt.x.f.w v12, v8 ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f64_to_si32: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI44_0) -; RV64-NEXT: fld fa5, %lo(.LCPI44_0)(a0) -; RV64-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV64-NEXT: vfabs.v v12, v8 -; RV64-NEXT: vmflt.vf v0, v12, fa5 -; RV64-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; RV64-NEXT: vfncvt.rtz.x.f.w v12, v8 +; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma +; RV64-NEXT: vfncvt.x.f.w v12, v8 ; RV64-NEXT: vmv.v.v v8, v12 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f64( %x) @@ -1556,33 +1470,15 @@ define @rint_nxv4f64_to_si32( %x) { define @rint_nxv4f64_to_ui32( %x) { ; RV32-LABEL: rint_nxv4f64_to_ui32: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI45_0) -; RV32-NEXT: fld fa5, %lo(.LCPI45_0)(a0) -; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV32-NEXT: vfabs.v v12, v8 -; RV32-NEXT: vmflt.vf v0, v12, fa5 -; RV32-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; RV32-NEXT: vfncvt.rtz.xu.f.w v12, v8 +; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma +; RV32-NEXT: vfncvt.xu.f.w v12, v8 ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f64_to_ui32: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI45_0) -; RV64-NEXT: fld fa5, %lo(.LCPI45_0)(a0) -; RV64-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV64-NEXT: vfabs.v v12, v8 -; RV64-NEXT: vmflt.vf v0, v12, fa5 -; RV64-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; RV64-NEXT: vfncvt.rtz.xu.f.w v12, v8 +; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma +; RV64-NEXT: vfncvt.xu.f.w v12, v8 ; RV64-NEXT: vmv.v.v v8, v12 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f64( %x) @@ -1593,30 +1489,14 @@ define @rint_nxv4f64_to_ui32( %x) { define @rint_nxv4f64_to_si64( %x) { ; RV32-LABEL: rint_nxv4f64_to_si64: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI46_0) -; RV32-NEXT: fld fa5, %lo(.LCPI46_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV32-NEXT: vfabs.v v12, v8 -; RV32-NEXT: vmflt.vf v0, v12, fa5 -; RV32-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV32-NEXT: vfcvt.rtz.x.f.v v8, v8 +; RV32-NEXT: vfcvt.x.f.v v8, v8 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f64_to_si64: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI46_0) -; RV64-NEXT: fld fa5, %lo(.LCPI46_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV64-NEXT: vfabs.v v12, v8 -; RV64-NEXT: vmflt.vf v0, v12, fa5 -; RV64-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV64-NEXT: vfcvt.rtz.x.f.v v8, v8 +; RV64-NEXT: vfcvt.x.f.v v8, v8 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f64( %x) %b = fptosi %a to @@ -1626,30 +1506,14 @@ define @rint_nxv4f64_to_si64( %x) { define @rint_nxv4f64_to_ui64( %x) { ; RV32-LABEL: rint_nxv4f64_to_ui64: ; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI47_0) -; RV32-NEXT: fld fa5, %lo(.LCPI47_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV32-NEXT: vfabs.v v12, v8 -; RV32-NEXT: vmflt.vf v0, v12, fa5 -; RV32-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV32-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; RV32-NEXT: vfcvt.xu.f.v v8, v8 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f64_to_ui64: ; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI47_0) -; RV64-NEXT: fld fa5, %lo(.LCPI47_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV64-NEXT: vfabs.v v12, v8 -; RV64-NEXT: vmflt.vf v0, v12, fa5 -; RV64-NEXT: vfcvt.x.f.v v12, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v12, v12, v0.t -; RV64-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v12, v8, v0.t -; RV64-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; RV64-NEXT: vfcvt.xu.f.v v8, v8 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f64( %x) %b = fptoui %a to diff --git a/llvm/test/CodeGen/RISCV/rvv/float-round-conv.ll b/llvm/test/CodeGen/RISCV/rvv/float-round-conv.ll index 46b1dd9d2b46d..9dcb6d211cb91 100644 --- a/llvm/test/CodeGen/RISCV/rvv/float-round-conv.ll +++ b/llvm/test/CodeGen/RISCV/rvv/float-round-conv.ll @@ -931,33 +931,15 @@ define @rint_nxv4f32_to_ui8( %x) { define @rint_nxv4f32_to_si16( %x) { ; RV32-LABEL: rint_nxv4f32_to_si16: ; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV32-NEXT: vfabs.v v10, v8 -; RV32-NEXT: lui a0, 307200 -; RV32-NEXT: fmv.w.x fa5, a0 -; RV32-NEXT: vmflt.vf v0, v10, fa5 -; RV32-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV32-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; RV32-NEXT: vfncvt.rtz.x.f.w v10, v8 +; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; RV32-NEXT: vfncvt.x.f.w v10, v8 ; RV32-NEXT: vmv.v.v v8, v10 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f32_to_si16: ; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vfabs.v v10, v8 -; RV64-NEXT: lui a0, 307200 -; RV64-NEXT: fmv.w.x fa5, a0 -; RV64-NEXT: vmflt.vf v0, v10, fa5 -; RV64-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV64-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; RV64-NEXT: vfncvt.rtz.x.f.w v10, v8 +; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; RV64-NEXT: vfncvt.x.f.w v10, v8 ; RV64-NEXT: vmv.v.v v8, v10 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f32( %x) @@ -968,33 +950,15 @@ define @rint_nxv4f32_to_si16( %x) { define @rint_nxv4f32_to_ui16( %x) { ; RV32-LABEL: rint_nxv4f32_to_ui16: ; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV32-NEXT: vfabs.v v10, v8 -; RV32-NEXT: lui a0, 307200 -; RV32-NEXT: fmv.w.x fa5, a0 -; RV32-NEXT: vmflt.vf v0, v10, fa5 -; RV32-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV32-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; RV32-NEXT: vfncvt.rtz.xu.f.w v10, v8 +; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; RV32-NEXT: vfncvt.xu.f.w v10, v8 ; RV32-NEXT: vmv.v.v v8, v10 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f32_to_ui16: ; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vfabs.v v10, v8 -; RV64-NEXT: lui a0, 307200 -; RV64-NEXT: fmv.w.x fa5, a0 -; RV64-NEXT: vmflt.vf v0, v10, fa5 -; RV64-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV64-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; RV64-NEXT: vfncvt.rtz.xu.f.w v10, v8 +; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; RV64-NEXT: vfncvt.xu.f.w v10, v8 ; RV64-NEXT: vmv.v.v v8, v10 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f32( %x) @@ -1006,29 +970,13 @@ define @rint_nxv4f32_to_si32( %x) { ; RV32-LABEL: rint_nxv4f32_to_si32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV32-NEXT: vfabs.v v10, v8 -; RV32-NEXT: lui a0, 307200 -; RV32-NEXT: fmv.w.x fa5, a0 -; RV32-NEXT: vmflt.vf v0, v10, fa5 -; RV32-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV32-NEXT: vfcvt.rtz.x.f.v v8, v8 +; RV32-NEXT: vfcvt.x.f.v v8, v8 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f32_to_si32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vfabs.v v10, v8 -; RV64-NEXT: lui a0, 307200 -; RV64-NEXT: fmv.w.x fa5, a0 -; RV64-NEXT: vmflt.vf v0, v10, fa5 -; RV64-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV64-NEXT: vfcvt.rtz.x.f.v v8, v8 +; RV64-NEXT: vfcvt.x.f.v v8, v8 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f32( %x) %b = fptosi %a to @@ -1039,29 +987,13 @@ define @rint_nxv4f32_to_ui32( %x) { ; RV32-LABEL: rint_nxv4f32_to_ui32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV32-NEXT: vfabs.v v10, v8 -; RV32-NEXT: lui a0, 307200 -; RV32-NEXT: fmv.w.x fa5, a0 -; RV32-NEXT: vmflt.vf v0, v10, fa5 -; RV32-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV32-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; RV32-NEXT: vfcvt.xu.f.v v8, v8 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f32_to_ui32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vfabs.v v10, v8 -; RV64-NEXT: lui a0, 307200 -; RV64-NEXT: fmv.w.x fa5, a0 -; RV64-NEXT: vmflt.vf v0, v10, fa5 -; RV64-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV64-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; RV64-NEXT: vfcvt.xu.f.v v8, v8 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f32( %x) %b = fptoui %a to @@ -1072,30 +1004,14 @@ define @rint_nxv4f32_to_si64( %x) { ; RV32-LABEL: rint_nxv4f32_to_si64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV32-NEXT: vfabs.v v10, v8 -; RV32-NEXT: lui a0, 307200 -; RV32-NEXT: fmv.w.x fa5, a0 -; RV32-NEXT: vmflt.vf v0, v10, fa5 -; RV32-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV32-NEXT: vfwcvt.rtz.x.f.v v12, v8 +; RV32-NEXT: vfwcvt.x.f.v v12, v8 ; RV32-NEXT: vmv4r.v v8, v12 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f32_to_si64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vfabs.v v10, v8 -; RV64-NEXT: lui a0, 307200 -; RV64-NEXT: fmv.w.x fa5, a0 -; RV64-NEXT: vmflt.vf v0, v10, fa5 -; RV64-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV64-NEXT: vfwcvt.rtz.x.f.v v12, v8 +; RV64-NEXT: vfwcvt.x.f.v v12, v8 ; RV64-NEXT: vmv4r.v v8, v12 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f32( %x) @@ -1107,30 +1023,14 @@ define @rint_nxv4f32_to_ui64( %x) { ; RV32-LABEL: rint_nxv4f32_to_ui64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV32-NEXT: vfabs.v v10, v8 -; RV32-NEXT: lui a0, 307200 -; RV32-NEXT: fmv.w.x fa5, a0 -; RV32-NEXT: vmflt.vf v0, v10, fa5 -; RV32-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV32-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV32-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV32-NEXT: vfwcvt.rtz.xu.f.v v12, v8 +; RV32-NEXT: vfwcvt.xu.f.v v12, v8 ; RV32-NEXT: vmv4r.v v8, v12 ; RV32-NEXT: ret ; ; RV64-LABEL: rint_nxv4f32_to_ui64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vfabs.v v10, v8 -; RV64-NEXT: lui a0, 307200 -; RV64-NEXT: fmv.w.x fa5, a0 -; RV64-NEXT: vmflt.vf v0, v10, fa5 -; RV64-NEXT: vfcvt.x.f.v v10, v8, v0.t -; RV64-NEXT: vfcvt.f.x.v v10, v10, v0.t -; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64-NEXT: vfsgnj.vv v8, v10, v8, v0.t -; RV64-NEXT: vfwcvt.rtz.xu.f.v v12, v8 +; RV64-NEXT: vfwcvt.xu.f.v v12, v8 ; RV64-NEXT: vmv4r.v v8, v12 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f32( %x) diff --git a/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll b/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll index 2e960209f9ed3..6de62214ccc46 100644 --- a/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll +++ b/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll @@ -653,17 +653,8 @@ declare @llvm.rint.nxv1f16() define @rint_nxv1f16_to_si8( %x) { ; CHECK-LABEL: rint_nxv1f16_to_si8: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI32_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI32_0)(a0) -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma -; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 +; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma +; CHECK-NEXT: vfncvt.x.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) @@ -674,17 +665,8 @@ define @rint_nxv1f16_to_si8( %x) { define @rint_nxv1f16_to_ui8( %x) { ; CHECK-LABEL: rint_nxv1f16_to_ui8: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI33_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI33_0)(a0) -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma -; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 +; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma +; CHECK-NEXT: vfncvt.xu.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) @@ -695,16 +677,8 @@ define @rint_nxv1f16_to_ui8( %x) { define @rint_nxv1f16_to_si16( %x) { ; CHECK-LABEL: rint_nxv1f16_to_si16: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI34_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI34_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 +; CHECK-NEXT: vfcvt.x.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptosi %a to @@ -714,16 +688,8 @@ define @rint_nxv1f16_to_si16( %x) { define @rint_nxv1f16_to_ui16( %x) { ; CHECK-LABEL: rint_nxv1f16_to_ui16: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI35_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI35_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; CHECK-NEXT: vfcvt.xu.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptoui %a to @@ -733,16 +699,8 @@ define @rint_nxv1f16_to_ui16( %x) { define @rint_nxv1f16_to_si32( %x) { ; CHECK-LABEL: rint_nxv1f16_to_si32: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI36_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI36_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 +; CHECK-NEXT: vfwcvt.x.f.v v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) @@ -753,16 +711,8 @@ define @rint_nxv1f16_to_si32( %x) { define @rint_nxv1f16_to_ui32( %x) { ; CHECK-LABEL: rint_nxv1f16_to_ui32: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI37_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI37_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 +; CHECK-NEXT: vfwcvt.xu.f.v v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) @@ -889,17 +839,8 @@ declare @llvm.rint.nxv4f16() define @rint_nxv4f16_to_si8( %x) { ; CHECK-LABEL: rint_nxv4f16_to_si8: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI40_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI40_0)(a0) -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma -; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 +; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma +; CHECK-NEXT: vfncvt.x.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) @@ -910,17 +851,8 @@ define @rint_nxv4f16_to_si8( %x) { define @rint_nxv4f16_to_ui8( %x) { ; CHECK-LABEL: rint_nxv4f16_to_ui8: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI41_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI41_0)(a0) -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma -; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 +; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma +; CHECK-NEXT: vfncvt.xu.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) @@ -931,16 +863,8 @@ define @rint_nxv4f16_to_ui8( %x) { define @rint_nxv4f16_to_si16( %x) { ; CHECK-LABEL: rint_nxv4f16_to_si16: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI42_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI42_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 +; CHECK-NEXT: vfcvt.x.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptosi %a to @@ -950,16 +874,8 @@ define @rint_nxv4f16_to_si16( %x) { define @rint_nxv4f16_to_ui16( %x) { ; CHECK-LABEL: rint_nxv4f16_to_ui16: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI43_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI43_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 +; CHECK-NEXT: vfcvt.xu.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptoui %a to @@ -969,16 +885,8 @@ define @rint_nxv4f16_to_ui16( %x) { define @rint_nxv4f16_to_si32( %x) { ; CHECK-LABEL: rint_nxv4f16_to_si32: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI44_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI44_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfwcvt.rtz.x.f.v v10, v8 +; CHECK-NEXT: vfwcvt.x.f.v v10, v8 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) @@ -989,16 +897,8 @@ define @rint_nxv4f16_to_si32( %x) { define @rint_nxv4f16_to_ui32( %x) { ; CHECK-LABEL: rint_nxv4f16_to_ui32: ; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, %hi(.LCPI45_0) -; CHECK-NEXT: flh fa5, %lo(.LCPI45_0)(a0) ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; CHECK-NEXT: vfabs.v v9, v8 -; CHECK-NEXT: vmflt.vf v0, v9, fa5 -; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t -; CHECK-NEXT: vfcvt.f.x.v v9, v9, v0.t -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vfsgnj.vv v8, v9, v8, v0.t -; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8 +; CHECK-NEXT: vfwcvt.xu.f.v v10, v8 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x)