; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv32 -mattr=+zfh,+zvfh,+v -verify-machineinstrs < %s | \ ; RUN: FileCheck %s ; RUN: llc -mtriple=riscv64 -mattr=+zfh,+zvfh,+v -verify-machineinstrs < %s | \ ; RUN: FileCheck %s ; ================================================================================ ; trunc ; ================================================================================ declare @llvm.trunc.nxv1f16() define @trunc_nxv1f16_to_si8( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_si8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv1f16_to_ui8( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_ui8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptoui %a to ret %b } define @trunc_nxv1f16_to_si16( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_si16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv1f16_to_ui16( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_ui16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptoui %a to ret %b } define @trunc_nxv1f16_to_si32( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_si32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv1f16_to_ui32( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_ui32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptoui %a to ret %b } define @trunc_nxv1f16_to_si64( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_si64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI6_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI6_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.rtz.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.f.f.v v9, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv1f16_to_ui64( %x) { ; CHECK-LABEL: trunc_nxv1f16_to_ui64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI7_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI7_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.rtz.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.f.f.v v9, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv1f16( %x) %b = fptoui %a to ret %b } ; ================================================================================ ; trunc ; ================================================================================ declare @llvm.trunc.nxv4f16() define @trunc_nxv4f16_to_si8( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_si8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma ; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv4f16_to_ui8( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_ui8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma ; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptoui %a to ret %b } define @trunc_nxv4f16_to_si16( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_si16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv4f16_to_ui16( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_ui16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptoui %a to ret %b } define @trunc_nxv4f16_to_si32( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_si32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v10, v8 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv4f16_to_ui32( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_ui32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptoui %a to ret %b } define @trunc_nxv4f16_to_si64( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_si64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI14_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI14_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.rtz.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.f.f.v v12, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v12 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptosi %a to ret %b } define @trunc_nxv4f16_to_ui64( %x) { ; CHECK-LABEL: trunc_nxv4f16_to_ui64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI15_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI15_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.rtz.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.f.f.v v12, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v12 ; CHECK-NEXT: ret %a = call @llvm.trunc.nxv4f16( %x) %b = fptoui %a to ret %b } ; ================================================================================ ; ceil ; ================================================================================ declare @llvm.ceil.nxv1f16() define @ceil_nxv1f16_to_si8( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_si8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfncvt.x.f.w v9, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv1f16_to_ui8( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_ui8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfncvt.xu.f.w v9, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptoui %a to ret %b } define @ceil_nxv1f16_to_si16( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_si16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.x.f.v v8, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv1f16_to_ui16( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_ui16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.xu.f.v v8, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptoui %a to ret %b } define @ceil_nxv1f16_to_si32( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_si32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfwcvt.x.f.v v9, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv1f16_to_ui32( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_ui32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfwcvt.xu.f.v v9, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptoui %a to ret %b } define @ceil_nxv1f16_to_si64( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_si64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI22_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI22_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: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t ; CHECK-NEXT: fsrm a0 ; 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.f.f.v v9, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9 ; CHECK-NEXT: ret ; RV32-LABEL: ceil_nxv1f16_to_si64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI22_0) ; RV32-NEXT: flh fa5, %lo(.LCPI22_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v9, v8 ; RV32-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV32-NEXT: vfwcvt.rtz.x.f.v v8, v9 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: ceil_nxv1f16_to_si64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI22_0) ; RV64-NEXT: flh fa5, %lo(.LCPI22_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v9, v8 ; RV64-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV64-NEXT: vfwcvt.rtz.x.f.v v8, v9 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv1f16_to_ui64( %x) { ; CHECK-LABEL: ceil_nxv1f16_to_ui64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI23_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI23_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: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t ; CHECK-NEXT: fsrm a0 ; 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.f.f.v v9, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9 ; CHECK-NEXT: ret ; RV32-LABEL: ceil_nxv1f16_to_ui64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI23_0) ; RV32-NEXT: flh fa5, %lo(.LCPI23_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v9, v8 ; RV32-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV32-NEXT: vfwcvt.rtz.xu.f.v v8, v9 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: ceil_nxv1f16_to_ui64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI23_0) ; RV64-NEXT: flh fa5, %lo(.LCPI23_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v9, v8 ; RV64-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV64-NEXT: vfwcvt.rtz.xu.f.v v8, v9 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.ceil.nxv1f16( %x) %b = fptoui %a to ret %b } ; ================================================================================ ; ceil ; ================================================================================ declare @llvm.ceil.nxv4f16() define @ceil_nxv4f16_to_si8( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_si8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfncvt.x.f.w v9, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv4f16_to_ui8( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_ui8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfncvt.xu.f.w v9, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptoui %a to ret %b } define @ceil_nxv4f16_to_si16( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_si16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.x.f.v v8, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv4f16_to_ui16( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_ui16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.xu.f.v v8, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptoui %a to ret %b } define @ceil_nxv4f16_to_si32( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_si32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfwcvt.x.f.v v10, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv4f16_to_ui32( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_ui32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 3 ; CHECK-NEXT: vfwcvt.xu.f.v v10, v8 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptoui %a to ret %b } define @ceil_nxv4f16_to_si64( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_si64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI30_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI30_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: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t ; CHECK-NEXT: fsrm a0 ; 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.f.f.v v12, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v12 ; CHECK-NEXT: ret ; RV32-LABEL: ceil_nxv4f16_to_si64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI30_0) ; RV32-NEXT: flh fa5, %lo(.LCPI30_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v12, v8 ; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV32-NEXT: vfwcvt.rtz.x.f.v v8, v12 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: ceil_nxv4f16_to_si64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI30_0) ; RV64-NEXT: flh fa5, %lo(.LCPI30_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v12, v8 ; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV64-NEXT: vfwcvt.rtz.x.f.v v8, v12 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv4f16_to_ui64( %x) { ; CHECK-LABEL: ceil_nxv4f16_to_ui64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI31_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI31_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: fsrmi a0, 3 ; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t ; CHECK-NEXT: fsrm a0 ; 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.f.f.v v12, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v12 ; CHECK-NEXT: ret ; RV32-LABEL: ceil_nxv4f16_to_ui64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI31_0) ; RV32-NEXT: flh fa5, %lo(.LCPI31_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v12, v8 ; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV32-NEXT: vfwcvt.rtz.xu.f.v v8, v12 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: ceil_nxv4f16_to_ui64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI31_0) ; RV64-NEXT: flh fa5, %lo(.LCPI31_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v12, v8 ; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV64-NEXT: vfwcvt.rtz.xu.f.v v8, v12 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.ceil.nxv4f16( %x) %b = fptoui %a to ret %b } ; ================================================================================ ; rint ; ================================================================================ declare @llvm.rint.nxv1f16() define @rint_nxv1f16_to_si8( %x) { ; CHECK-LABEL: rint_nxv1f16_to_si8: ; CHECK: # %bb.0: ; 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) %b = fptosi %a to ret %b } define @rint_nxv1f16_to_ui8( %x) { ; CHECK-LABEL: rint_nxv1f16_to_ui8: ; CHECK: # %bb.0: ; 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) %b = fptoui %a to ret %b } define @rint_nxv1f16_to_si16( %x) { ; CHECK-LABEL: rint_nxv1f16_to_si16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfcvt.x.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptosi %a to ret %b } define @rint_nxv1f16_to_ui16( %x) { ; CHECK-LABEL: rint_nxv1f16_to_ui16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfcvt.xu.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptoui %a to ret %b } define @rint_nxv1f16_to_si32( %x) { ; CHECK-LABEL: rint_nxv1f16_to_si32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfwcvt.x.f.v v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptosi %a to ret %b } define @rint_nxv1f16_to_ui32( %x) { ; CHECK-LABEL: rint_nxv1f16_to_ui32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; CHECK-NEXT: vfwcvt.xu.f.v v9, v8 ; CHECK-NEXT: vmv1r.v v8, v9 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptoui %a to ret %b } define @rint_nxv1f16_to_si64( %x) { ; CHECK-LABEL: rint_nxv1f16_to_si64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI38_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI38_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.f.f.v v9, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9 ; CHECK-NEXT: ret ; RV32-LABEL: rint_nxv1f16_to_si64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI22_0) ; RV32-NEXT: flh fa5, %lo(.LCPI22_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v9, v8 ; RV32-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV32-NEXT: vfwcvt.rtz.x.f.v v8, v9 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: rint_nxv1f16_to_si64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI22_0) ; RV64-NEXT: flh fa5, %lo(.LCPI22_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v9, v8 ; RV64-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV64-NEXT: vfwcvt.rtz.x.f.v v8, v9 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptosi %a to ret %b } define @rint_nxv1f16_to_ui64( %x) { ; CHECK-LABEL: rint_nxv1f16_to_ui64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI39_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI39_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.f.f.v v9, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9 ; CHECK-NEXT: ret ; RV32-LABEL: rint_nxv1f16_to_ui64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI23_0) ; RV32-NEXT: flh fa5, %lo(.LCPI23_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v9, v8 ; RV32-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV32-NEXT: vfwcvt.rtz.xu.f.v v8, v9 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: rint_nxv1f16_to_ui64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI23_0) ; RV64-NEXT: flh fa5, %lo(.LCPI23_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, mf4, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v9, v8 ; RV64-NEXT: vsetvli zero, zero, e32, mf2, ta, ma ; RV64-NEXT: vfwcvt.rtz.xu.f.v v8, v9 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.rint.nxv1f16( %x) %b = fptoui %a to ret %b } ; ================================================================================ ; rint ; ================================================================================ declare @llvm.rint.nxv4f16() define @rint_nxv4f16_to_si8( %x) { ; CHECK-LABEL: rint_nxv4f16_to_si8: ; CHECK: # %bb.0: ; 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) %b = fptosi %a to ret %b } define @rint_nxv4f16_to_ui8( %x) { ; CHECK-LABEL: rint_nxv4f16_to_ui8: ; CHECK: # %bb.0: ; 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) %b = fptoui %a to ret %b } define @rint_nxv4f16_to_si16( %x) { ; CHECK-LABEL: rint_nxv4f16_to_si16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfcvt.x.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptosi %a to ret %b } define @rint_nxv4f16_to_ui16( %x) { ; CHECK-LABEL: rint_nxv4f16_to_ui16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfcvt.xu.f.v v8, v8 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptoui %a to ret %b } define @rint_nxv4f16_to_si32( %x) { ; CHECK-LABEL: rint_nxv4f16_to_si32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfwcvt.x.f.v v10, v8 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptosi %a to ret %b } define @rint_nxv4f16_to_ui32( %x) { ; CHECK-LABEL: rint_nxv4f16_to_ui32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; CHECK-NEXT: vfwcvt.xu.f.v v10, v8 ; CHECK-NEXT: vmv2r.v v8, v10 ; CHECK-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptoui %a to ret %b } define @rint_nxv4f16_to_si64( %x) { ; CHECK-LABEL: rint_nxv4f16_to_si64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI46_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI46_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.f.f.v v12, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v12 ; CHECK-NEXT: ret ; RV32-LABEL: rint_nxv4f16_to_si64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI30_0) ; RV32-NEXT: flh fa5, %lo(.LCPI30_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v12, v8 ; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV32-NEXT: vfwcvt.rtz.x.f.v v8, v12 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: rint_nxv4f16_to_si64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI30_0) ; RV64-NEXT: flh fa5, %lo(.LCPI30_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v12, v8 ; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV64-NEXT: vfwcvt.rtz.x.f.v v8, v12 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptosi %a to ret %b } define @rint_nxv4f16_to_ui64( %x) { ; CHECK-LABEL: rint_nxv4f16_to_ui64: ; CHECK: # %bb.0: ; CHECK-NEXT: lui a0, %hi(.LCPI47_0) ; CHECK-NEXT: flh fa5, %lo(.LCPI47_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.f.f.v v12, v8 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v12 ; CHECK-NEXT: ret ; RV32-LABEL: rint_nxv4f16_to_ui64: ; RV32: # %bb.0: ; RV32-NEXT: lui a0, %hi(.LCPI31_0) ; RV32-NEXT: flh fa5, %lo(.LCPI31_0)(a0) ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV32-NEXT: vfabs.v v9, v8 ; RV32-NEXT: vmflt.vf v0, v9, fa5 ; RV32-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV32-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV32-NEXT: vfwcvt.f.f.v v12, v8 ; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV32-NEXT: vfwcvt.rtz.xu.f.v v8, v12 ; RV32-NEXT: fsrm a0 ; RV32-NEXT: ret ; RV64-LABEL: rint_nxv4f16_to_ui64: ; RV64: # %bb.0: ; RV64-NEXT: lui a0, %hi(.LCPI31_0) ; RV64-NEXT: flh fa5, %lo(.LCPI31_0)(a0) ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma ; RV64-NEXT: vfabs.v v9, v8 ; RV64-NEXT: vmflt.vf v0, v9, fa5 ; RV64-NEXT: fsrmi a0, 3 ; 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, e16, m1, ta, mu ; RV64-NEXT: vfsgnj.vv v8, v9, v8, v0.t ; RV64-NEXT: vfwcvt.f.f.v v12, v8 ; RV64-NEXT: vsetvli zero, zero, e32, m2, ta, ma ; RV64-NEXT: vfwcvt.rtz.xu.f.v v8, v12 ; RV64-NEXT: fsrm a0 ; RV64-NEXT: ret %a = call @llvm.rint.nxv4f16( %x) %b = fptoui %a to ret %b }