diff --git a/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll b/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll --- a/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll +++ b/llvm/test/CodeGen/RISCV/rvv/half-round-conv.ll @@ -1,8 +1,8 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv32 -mattr=+zfh,+experimental-zvfh,+v -verify-machineinstrs < %s | \ -; RUN: FileCheck %s -check-prefix=RV32 +; RUN: FileCheck %s ; RUN: llc -mtriple=riscv64 -mattr=+zfh,+experimental-zvfh,+v -verify-machineinstrs < %s | \ -; RUN: FileCheck %s -check-prefix=RV64 +; RUN: FileCheck %s ; ================================================================================ ; trunc @@ -11,184 +11,112 @@ declare @llvm.trunc.nxv1f16() define @trunc_nxv1f16_to_si8( %x) { -; RV32-LABEL: trunc_nxv1f16_to_si8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV32-NEXT: vfncvt.rtz.x.f.w v9, v8 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv1f16_to_si8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV64-NEXT: vfncvt.rtz.x.f.w v9, v8 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv1f16_to_ui8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV32-NEXT: vfncvt.rtz.xu.f.w v9, v8 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv1f16_to_ui8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV64-NEXT: vfncvt.rtz.xu.f.w v9, v8 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv1f16_to_si16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vfcvt.rtz.x.f.v v8, v8 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv1f16_to_si16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vfcvt.rtz.x.f.v v8, v8 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv1f16_to_ui16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vfcvt.rtz.xu.f.v v8, v8 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv1f16_to_ui16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vfcvt.rtz.xu.f.v v8, v8 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv1f16_to_si32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vfwcvt.rtz.x.f.v v9, v8 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv1f16_to_si32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vfwcvt.rtz.x.f.v v9, v8 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv1f16_to_ui32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vfwcvt.rtz.xu.f.v v9, v8 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv1f16_to_ui32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vfwcvt.rtz.xu.f.v v9, v8 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv1f16_to_si64: -; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI6_0) -; RV32-NEXT: flh fa5, %lo(.LCPI6_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: vfcvt.rtz.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: ret -; -; RV64-LABEL: trunc_nxv1f16_to_si64: -; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI6_0) -; RV64-NEXT: flh fa5, %lo(.LCPI6_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: vfcvt.rtz.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: ret +; 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) { -; RV32-LABEL: trunc_nxv1f16_to_ui64: -; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI7_0) -; RV32-NEXT: flh fa5, %lo(.LCPI7_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: vfcvt.rtz.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: ret -; -; RV64-LABEL: trunc_nxv1f16_to_ui64: -; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI7_0) -; RV64-NEXT: flh fa5, %lo(.LCPI7_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: vfcvt.rtz.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: ret +; 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 @@ -201,184 +129,112 @@ declare @llvm.trunc.nxv4f16() define @trunc_nxv4f16_to_si8( %x) { -; RV32-LABEL: trunc_nxv4f16_to_si8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV32-NEXT: vfncvt.rtz.x.f.w v9, v8 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv4f16_to_si8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV64-NEXT: vfncvt.rtz.x.f.w v9, v8 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv4f16_to_ui8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV32-NEXT: vfncvt.rtz.xu.f.w v9, v8 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv4f16_to_ui8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV64-NEXT: vfncvt.rtz.xu.f.w v9, v8 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv4f16_to_si16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vfcvt.rtz.x.f.v v8, v8 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv4f16_to_si16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vfcvt.rtz.x.f.v v8, v8 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv4f16_to_ui16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vfcvt.rtz.xu.f.v v8, v8 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv4f16_to_ui16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vfcvt.rtz.xu.f.v v8, v8 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv4f16_to_si32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vfwcvt.rtz.x.f.v v10, v8 -; RV32-NEXT: vmv2r.v v8, v10 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv4f16_to_si32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vfwcvt.rtz.x.f.v v10, v8 -; RV64-NEXT: vmv2r.v v8, v10 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv4f16_to_ui32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vfwcvt.rtz.xu.f.v v10, v8 -; RV32-NEXT: vmv2r.v v8, v10 -; RV32-NEXT: ret -; -; RV64-LABEL: trunc_nxv4f16_to_ui32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vfwcvt.rtz.xu.f.v v10, v8 -; RV64-NEXT: vmv2r.v v8, v10 -; RV64-NEXT: ret +; 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) { -; RV32-LABEL: trunc_nxv4f16_to_si64: -; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI14_0) -; RV32-NEXT: flh fa5, %lo(.LCPI14_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: vfcvt.rtz.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: ret -; -; RV64-LABEL: trunc_nxv4f16_to_si64: -; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI14_0) -; RV64-NEXT: flh fa5, %lo(.LCPI14_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: vfcvt.rtz.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: ret +; 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) { -; RV32-LABEL: trunc_nxv4f16_to_ui64: -; RV32: # %bb.0: -; RV32-NEXT: lui a0, %hi(.LCPI15_0) -; RV32-NEXT: flh fa5, %lo(.LCPI15_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: vfcvt.rtz.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: ret -; -; RV64-LABEL: trunc_nxv4f16_to_ui64: -; RV64: # %bb.0: -; RV64-NEXT: lui a0, %hi(.LCPI15_0) -; RV64-NEXT: flh fa5, %lo(.LCPI15_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: vfcvt.rtz.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: ret +; 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 @@ -391,228 +247,134 @@ declare @llvm.ceil.nxv1f16() define @ceil_nxv1f16_to_si8( %x) { -; RV32-LABEL: ceil_nxv1f16_to_si8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfncvt.x.f.w v9, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv1f16_to_si8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfncvt.x.f.w v9, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv1f16_to_si8: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfncvt.x.f.w v9, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv1f16_to_ui8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfncvt.xu.f.w v9, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv1f16_to_ui8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf8, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfncvt.xu.f.w v9, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv1f16_to_ui8: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfncvt.xu.f.w v9, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv1f16_to_si16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfcvt.x.f.v v8, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv1f16_to_si16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfcvt.x.f.v v8, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv1f16_to_si16: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfcvt.x.f.v v8, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv1f16_to_ui16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfcvt.xu.f.v v8, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv1f16_to_ui16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfcvt.xu.f.v v8, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv1f16_to_ui16: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfcvt.xu.f.v v8, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv1f16_to_si32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfwcvt.x.f.v v9, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv1f16_to_si32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfwcvt.x.f.v v9, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv1f16_to_si32: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfwcvt.x.f.v v9, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv1f16_to_ui32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfwcvt.xu.f.v v9, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv1f16_to_ui32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, mf4, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfwcvt.xu.f.v v9, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv1f16_to_ui32: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfwcvt.xu.f.v v9, v8, v0.t +; 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) { -; 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: fsrm a0 -; 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: 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: fsrm a0 -; 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: ret +; 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 %a = call @llvm.ceil.nxv1f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv1f16_to_ui64( %x) { -; 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: fsrm a0 -; 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: 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: fsrm a0 -; 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: ret +; 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 %a = call @llvm.ceil.nxv1f16( %x) %b = fptoui %a to ret %b @@ -625,228 +387,134 @@ declare @llvm.ceil.nxv4f16() define @ceil_nxv4f16_to_si8( %x) { -; RV32-LABEL: ceil_nxv4f16_to_si8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfncvt.x.f.w v9, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv4f16_to_si8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfncvt.x.f.w v9, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv4f16_to_si8: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfncvt.x.f.w v9, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv4f16_to_ui8: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfncvt.xu.f.w v9, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv1r.v v8, v9 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv4f16_to_ui8: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfncvt.xu.f.w v9, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv1r.v v8, v9 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv4f16_to_ui8: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfncvt.xu.f.w v9, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv4f16_to_si16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfcvt.x.f.v v8, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv4f16_to_si16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfcvt.x.f.v v8, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv4f16_to_si16: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfcvt.x.f.v v8, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv4f16_to_ui16: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfcvt.xu.f.v v8, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv4f16_to_ui16: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfcvt.xu.f.v v8, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv4f16_to_ui16: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfcvt.xu.f.v v8, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv4f16_to_si32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfwcvt.x.f.v v10, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv2r.v v8, v10 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv4f16_to_si32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfwcvt.x.f.v v10, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv2r.v v8, v10 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv4f16_to_si32: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfwcvt.x.f.v v10, v8, v0.t +; 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) { -; RV32-LABEL: ceil_nxv4f16_to_ui32: -; RV32: # %bb.0: -; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vmset.m v0 -; RV32-NEXT: fsrmi a0, 3 -; RV32-NEXT: vfwcvt.xu.f.v v10, v8, v0.t -; RV32-NEXT: fsrm a0 -; RV32-NEXT: vmv2r.v v8, v10 -; RV32-NEXT: ret -; -; RV64-LABEL: ceil_nxv4f16_to_ui32: -; RV64: # %bb.0: -; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vmset.m v0 -; RV64-NEXT: fsrmi a0, 3 -; RV64-NEXT: vfwcvt.xu.f.v v10, v8, v0.t -; RV64-NEXT: fsrm a0 -; RV64-NEXT: vmv2r.v v8, v10 -; RV64-NEXT: ret +; CHECK-LABEL: ceil_nxv4f16_to_ui32: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma +; CHECK-NEXT: vmset.m v0 +; CHECK-NEXT: fsrmi a0, 3 +; CHECK-NEXT: vfwcvt.xu.f.v v10, v8, v0.t +; 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) { -; 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: fsrm a0 -; 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: 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: fsrm a0 -; 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: ret +; 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 %a = call @llvm.ceil.nxv4f16( %x) %b = fptosi %a to ret %b } define @ceil_nxv4f16_to_ui64( %x) { -; 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: fsrm a0 -; 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: 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: fsrm a0 -; 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: ret +; 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 %a = call @llvm.ceil.nxv4f16( %x) %b = fptoui %a to ret %b