diff --git a/llvm/include/llvm/IR/IntrinsicsRISCV.td b/llvm/include/llvm/IR/IntrinsicsRISCV.td --- a/llvm/include/llvm/IR/IntrinsicsRISCV.td +++ b/llvm/include/llvm/IR/IntrinsicsRISCV.td @@ -733,6 +733,13 @@ defm vmsof : RISCVMaskUnaryMOut; defm vmsif : RISCVMaskUnaryMOut; + defm vfcvt_xu_f_v : RISCVConversion; + defm vfcvt_x_f_v : RISCVConversion; + defm vfcvt_rtz_xu_f_v : RISCVConversion; + defm vfcvt_rtz_x_f_v : RISCVConversion; + defm vfcvt_f_xu_v : RISCVConversion; + defm vfcvt_f_x_v : RISCVConversion; + defm vfwcvt_f_xu_v : RISCVConversion; defm vfwcvt_f_x_v : RISCVConversion; defm vfwcvt_xu_f_v : RISCVConversion; diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -1190,6 +1190,11 @@ } } +multiclass VPseudoConversionV_V { + foreach m = MxList.m in + defm _V : VPseudoConversion; +} + multiclass VPseudoConversionW_V { foreach m = MxList.m[0-5] in defm _V : VPseudoConversion; @@ -2093,6 +2098,32 @@ } } +multiclass VPatConversionVI_VF +{ + foreach fvti = AllFloatVectors in + { + defvar ivti = GetIntVTypeInfo.Vti; + + defm : VPatConversion; + } +} + +multiclass VPatConversionVF_VI +{ + foreach fvti = AllFloatVectors in + { + defvar ivti = GetIntVTypeInfo.Vti; + + defm : VPatConversion; + } +} + multiclass VPatConversionWI_VF { foreach fvtiToFWti = AllWidenableFloatVectors in { @@ -2492,6 +2523,16 @@ /*Constraint =*/"", /*IsFloat=*/true>; //===----------------------------------------------------------------------===// +// 14.17. Single-Width Floating-Point/Integer Type-Convert Instructions +//===----------------------------------------------------------------------===// +defm PseudoVFCVT_XU_F : VPseudoConversionV_V; +defm PseudoVFCVT_X_F : VPseudoConversionV_V; +defm PseudoVFCVT_RTZ_XU_F : VPseudoConversionV_V; +defm PseudoVFCVT_RTZ_X_F : VPseudoConversionV_V; +defm PseudoVFCVT_F_XU : VPseudoConversionV_V; +defm PseudoVFCVT_F_X : VPseudoConversionV_V; + +//===----------------------------------------------------------------------===// // 14.18. Widening Floating-Point/Integer Type-Convert Instructions //===----------------------------------------------------------------------===// defm PseudoVFWCVT_XU_F : VPseudoConversionW_V; @@ -3047,6 +3088,16 @@ /*CarryOut = */0, /*vtilist=*/AllFloatVectors>; //===----------------------------------------------------------------------===// +// 14.17. Single-Width Floating-Point/Integer Type-Convert Instructions +//===----------------------------------------------------------------------===// +defm "" : VPatConversionVI_VF<"int_riscv_vfcvt_xu_f_v", "PseudoVFCVT_XU_F">; +defm "" : VPatConversionVI_VF<"int_riscv_vfcvt_rtz_xu_f_v", "PseudoVFCVT_RTZ_XU_F">; +defm "" : VPatConversionVI_VF<"int_riscv_vfcvt_x_f_v", "PseudoVFCVT_X_F">; +defm "" : VPatConversionVI_VF<"int_riscv_vfcvt_rtz_x_f_v", "PseudoVFCVT_RTZ_X_F">; +defm "" : VPatConversionVF_VI<"int_riscv_vfcvt_f_x_v", "PseudoVFCVT_F_X">; +defm "" : VPatConversionVF_VI<"int_riscv_vfcvt_f_xu_v", "PseudoVFCVT_F_XU">; + +//===----------------------------------------------------------------------===// // 14.18. Widening Floating-Point/Integer Type-Convert Instructions //===----------------------------------------------------------------------===// defm "" : VPatConversionWI_VF<"int_riscv_vfwcvt_xu_f_v", "PseudoVFWCVT_XU_F">; diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-x-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-x-rv32.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-x-rv32.ll @@ -0,0 +1,397 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.f.x.v.nxv1f16.nxv1i16( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv1f16_nxv1i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv1f16.nxv1i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv1f16.nxv1i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv1f16_nxv1i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv1f16.nxv1i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv2f16.nxv2i16( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv2f16_nxv2i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv2f16.nxv2i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv2f16.nxv2i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv2f16_nxv2i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv2f16.nxv2i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv4f16.nxv4i16( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv4f16_nxv4i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv4f16.nxv4i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv4f16.nxv4i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv4f16_nxv4i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv4f16.nxv4i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv8f16.nxv8i16( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv8f16_nxv8i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv8f16.nxv8i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv8f16.nxv8i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv8f16_nxv8i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv8f16.nxv8i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv16f16.nxv16i16( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv16f16_nxv16i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv16f16.nxv16i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv16f16.nxv16i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv16f16_nxv16i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv16f16.nxv16i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv32f16.nxv32i16( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv32f16_nxv32i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv32f16.nxv32i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv32f16.nxv32i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv32f16_nxv32i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv32f16.nxv32i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv1f32.nxv1i32( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv1f32_nxv1i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv1f32.nxv1i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv1f32.nxv1i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv1f32_nxv1i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv1f32.nxv1i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv2f32.nxv2i32( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv2f32_nxv2i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv2f32.nxv2i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv2f32.nxv2i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv2f32_nxv2i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv2f32.nxv2i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv4f32.nxv4i32( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv4f32_nxv4i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv4f32.nxv4i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv4f32.nxv4i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv4f32_nxv4i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv4f32.nxv4i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv8f32.nxv8i32( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv8f32_nxv8i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv8f32.nxv8i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv8f32.nxv8i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv8f32_nxv8i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv8f32.nxv8i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv16f32.nxv16i32( + , + i32); + +define @intrinsic_vfcvt_f.x.v_nxv16f32_nxv16i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv16f32.nxv16i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv16f32.nxv16i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.x.v_nxv16f32_nxv16i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv16f32.nxv16i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-x-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-x-rv64.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-x-rv64.ll @@ -0,0 +1,541 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.f.x.v.nxv1f16.nxv1i16( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv1f16_nxv1i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv1f16.nxv1i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv1f16.nxv1i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv1f16_nxv1i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv1f16.nxv1i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv2f16.nxv2i16( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv2f16_nxv2i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv2f16.nxv2i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv2f16.nxv2i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv2f16_nxv2i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv2f16.nxv2i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv4f16.nxv4i16( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv4f16_nxv4i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv4f16.nxv4i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv4f16.nxv4i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv4f16_nxv4i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv4f16.nxv4i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv8f16.nxv8i16( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv8f16_nxv8i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv8f16.nxv8i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv8f16.nxv8i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv8f16_nxv8i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv8f16.nxv8i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv16f16.nxv16i16( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv16f16_nxv16i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv16f16.nxv16i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv16f16.nxv16i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv16f16_nxv16i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv16f16.nxv16i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv32f16.nxv32i16( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv32f16_nxv32i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv32f16.nxv32i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv32f16.nxv32i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv32f16_nxv32i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv32f16.nxv32i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv1f32.nxv1i32( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv1f32_nxv1i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv1f32.nxv1i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv1f32.nxv1i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv1f32_nxv1i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv1f32.nxv1i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv2f32.nxv2i32( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv2f32_nxv2i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv2f32.nxv2i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv2f32.nxv2i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv2f32_nxv2i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv2f32.nxv2i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv4f32.nxv4i32( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv4f32_nxv4i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv4f32.nxv4i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv4f32.nxv4i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv4f32_nxv4i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv4f32.nxv4i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv8f32.nxv8i32( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv8f32_nxv8i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv8f32.nxv8i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv8f32.nxv8i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv8f32_nxv8i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv8f32.nxv8i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv16f32.nxv16i32( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv16f32_nxv16i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv16f32.nxv16i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv16f32.nxv16i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv16f32_nxv16i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv16f32.nxv16i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv1f64.nxv1i64( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv1f64_nxv1i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv1f64_nxv1i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv1f64.nxv1i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv1f64.nxv1i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv1f64_nxv1i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv1f64_nxv1i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv1f64.nxv1i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv2f64.nxv2i64( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv2f64_nxv2i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv2f64_nxv2i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv2f64.nxv2i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv2f64.nxv2i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv2f64_nxv2i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv2f64_nxv2i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv2f64.nxv2i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv4f64.nxv4i64( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv4f64_nxv4i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv4f64_nxv4i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv4f64.nxv4i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv4f64.nxv4i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv4f64_nxv4i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv4f64_nxv4i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv4f64.nxv4i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.nxv8f64.nxv8i64( + , + i64); + +define @intrinsic_vfcvt_f.x.v_nxv8f64_nxv8i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.x.v_nxv8f64_nxv8i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,ta,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.x.v.nxv8f64.nxv8i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.x.v.mask.nxv8f64.nxv8i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.x.v_nxv8f64_nxv8i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.x.v_nxv8f64_nxv8i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,tu,mu +; CHECK: vfcvt.f.x.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.x.v.mask.nxv8f64.nxv8i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-xu-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-xu-rv32.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-xu-rv32.ll @@ -0,0 +1,397 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.f.xu.v.nxv1f16.nxv1i16( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv1f16_nxv1i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv1f16.nxv1i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f16.nxv1i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv1f16_nxv1i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f16.nxv1i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv2f16.nxv2i16( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv2f16_nxv2i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv2f16.nxv2i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f16.nxv2i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv2f16_nxv2i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f16.nxv2i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv4f16.nxv4i16( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv4f16_nxv4i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv4f16.nxv4i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f16.nxv4i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv4f16_nxv4i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f16.nxv4i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv8f16.nxv8i16( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv8f16_nxv8i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv8f16.nxv8i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f16.nxv8i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv8f16_nxv8i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f16.nxv8i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv16f16.nxv16i16( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv16f16_nxv16i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv16f16.nxv16i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f16.nxv16i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv16f16_nxv16i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f16.nxv16i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv32f16.nxv32i16( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv32f16_nxv32i16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv32f16.nxv32i16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv32f16.nxv32i16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv32f16_nxv32i16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv32f16.nxv32i16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv1f32.nxv1i32( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv1f32_nxv1i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv1f32.nxv1i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f32.nxv1i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv1f32_nxv1i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f32.nxv1i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv2f32.nxv2i32( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv2f32_nxv2i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv2f32.nxv2i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f32.nxv2i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv2f32_nxv2i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f32.nxv2i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv4f32.nxv4i32( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv4f32_nxv4i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv4f32.nxv4i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f32.nxv4i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv4f32_nxv4i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f32.nxv4i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv8f32.nxv8i32( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv8f32_nxv8i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv8f32.nxv8i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f32.nxv8i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv8f32_nxv8i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f32.nxv8i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv16f32.nxv16i32( + , + i32); + +define @intrinsic_vfcvt_f.xu.v_nxv16f32_nxv16i32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv16f32.nxv16i32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f32.nxv16i32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv16f32_nxv16i32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f32.nxv16i32( + %0, + %1, + %2, + i32 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-xu-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-xu-rv64.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-f-xu-rv64.ll @@ -0,0 +1,541 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.f.xu.v.nxv1f16.nxv1i16( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv1f16_nxv1i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv1f16.nxv1i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f16.nxv1i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv1f16_nxv1i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv1f16_nxv1i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f16.nxv1i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv2f16.nxv2i16( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv2f16_nxv2i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv2f16.nxv2i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f16.nxv2i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv2f16_nxv2i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv2f16_nxv2i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f16.nxv2i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv4f16.nxv4i16( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv4f16_nxv4i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv4f16.nxv4i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f16.nxv4i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv4f16_nxv4i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv4f16_nxv4i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f16.nxv4i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv8f16.nxv8i16( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv8f16_nxv8i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv8f16.nxv8i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f16.nxv8i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv8f16_nxv8i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv8f16_nxv8i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f16.nxv8i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv16f16.nxv16i16( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv16f16_nxv16i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv16f16.nxv16i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f16.nxv16i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv16f16_nxv16i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv16f16_nxv16i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f16.nxv16i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv32f16.nxv32i16( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv32f16_nxv32i16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv32f16.nxv32i16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv32f16.nxv32i16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv32f16_nxv32i16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv32f16_nxv32i16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv32f16.nxv32i16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv1f32.nxv1i32( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv1f32_nxv1i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv1f32.nxv1i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f32.nxv1i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv1f32_nxv1i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv1f32_nxv1i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f32.nxv1i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv2f32.nxv2i32( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv2f32_nxv2i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv2f32.nxv2i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f32.nxv2i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv2f32_nxv2i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv2f32_nxv2i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f32.nxv2i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv4f32.nxv4i32( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv4f32_nxv4i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv4f32.nxv4i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f32.nxv4i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv4f32_nxv4i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv4f32_nxv4i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f32.nxv4i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv8f32.nxv8i32( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv8f32_nxv8i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv8f32.nxv8i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f32.nxv8i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv8f32_nxv8i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv8f32_nxv8i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f32.nxv8i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv16f32.nxv16i32( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv16f32_nxv16i32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv16f32.nxv16i32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f32.nxv16i32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv16f32_nxv16i32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv16f32_nxv16i32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv16f32.nxv16i32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv1f64.nxv1i64( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv1f64_nxv1i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv1f64_nxv1i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv1f64.nxv1i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f64.nxv1i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv1f64_nxv1i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv1f64_nxv1i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv1f64.nxv1i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv2f64.nxv2i64( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv2f64_nxv2i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv2f64_nxv2i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv2f64.nxv2i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f64.nxv2i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv2f64_nxv2i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv2f64_nxv2i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv2f64.nxv2i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv4f64.nxv4i64( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv4f64_nxv4i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv4f64_nxv4i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv4f64.nxv4i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f64.nxv4i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv4f64_nxv4i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv4f64_nxv4i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv4f64.nxv4i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.nxv8f64.nxv8i64( + , + i64); + +define @intrinsic_vfcvt_f.xu.v_nxv8f64_nxv8i64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_f.xu.v_nxv8f64_nxv8i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,ta,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.f.xu.v.nxv8f64.nxv8i64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f64.nxv8i64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_f.xu.v_nxv8f64_nxv8i64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_f.xu.v_nxv8f64_nxv8i64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,tu,mu +; CHECK: vfcvt.f.xu.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.f.xu.v.mask.nxv8f64.nxv8i64( + %0, + %1, + %2, + i64 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-x-f-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-x-f-rv32.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-x-f-rv32.ll @@ -0,0 +1,397 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i16.nxv1f16( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv1i16_nxv1f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i16.nxv1f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i16_nxv1f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i16.nxv2f16( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv2i16_nxv2f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i16.nxv2f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i16_nxv2f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i16.nxv4f16( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv4i16_nxv4f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i16.nxv4f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i16_nxv4f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i16.nxv8f16( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv8i16_nxv8f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i16.nxv8f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i16_nxv8f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i16.nxv16f16( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv16i16_nxv16f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i16.nxv16f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i16_nxv16f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv32i16.nxv32f16( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv32i16_nxv32f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv32i16.nxv32f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv32i16_nxv32f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i32.nxv1f32( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv1i32_nxv1f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i32.nxv1f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i32_nxv1f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i32.nxv2f32( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv2i32_nxv2f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i32.nxv2f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i32_nxv2f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i32.nxv4f32( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv4i32_nxv4f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i32.nxv4f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i32_nxv4f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i32.nxv8f32( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv8i32_nxv8f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i32.nxv8f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i32_nxv8f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i32.nxv16f32( + , + i32); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv16i32_nxv16f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i32.nxv16f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i32_nxv16f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-x-f-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-x-f-rv64.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-x-f-rv64.ll @@ -0,0 +1,541 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i16.nxv1f16( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv1i16_nxv1f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i16.nxv1f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i16_nxv1f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i16.nxv2f16( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv2i16_nxv2f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i16.nxv2f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i16_nxv2f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i16.nxv4f16( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv4i16_nxv4f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i16.nxv4f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i16_nxv4f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i16.nxv8f16( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv8i16_nxv8f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i16.nxv8f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i16_nxv8f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i16.nxv16f16( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv16i16_nxv16f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i16.nxv16f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i16_nxv16f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv32i16.nxv32f16( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv32i16_nxv32f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv32i16.nxv32f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv32i16_nxv32f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i32.nxv1f32( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv1i32_nxv1f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i32.nxv1f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i32_nxv1f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i32.nxv2f32( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv2i32_nxv2f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i32.nxv2f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i32_nxv2f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i32.nxv4f32( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv4i32_nxv4f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i32.nxv4f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i32_nxv4f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i32.nxv8f32( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv8i32_nxv8f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i32.nxv8f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i32_nxv8f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i32.nxv16f32( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv16i32_nxv16f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv16i32.nxv16f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i32_nxv16f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i64.nxv1f64( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv1i64_nxv1f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv1i64.nxv1f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i64.nxv1f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i64_nxv1f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv1i64.nxv1f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i64.nxv2f64( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv2i64_nxv2f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv2i64.nxv2f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i64.nxv2f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i64_nxv2f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv2i64.nxv2f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i64.nxv4f64( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv4i64_nxv4f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv4i64.nxv4f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i64.nxv4f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i64_nxv4f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv4i64.nxv4f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i64.nxv8f64( + , + i64); + +define @intrinsic_vfcvt_rtz.x.f.v_nxv8i64_nxv8f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.x.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,ta,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.nxv8i64.nxv8f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i64.nxv8f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i64_nxv8f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.x.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,tu,mu +; CHECK: vfcvt.rtz.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.x.f.v.mask.nxv8i64.nxv8f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-xu-f-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-xu-f-rv32.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-xu-f-rv32.ll @@ -0,0 +1,397 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i16.nxv1f16( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv1i16_nxv1f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i16.nxv1f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i16_nxv1f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i16.nxv2f16( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv2i16_nxv2f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i16.nxv2f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i16_nxv2f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i16.nxv4f16( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv4i16_nxv4f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i16.nxv4f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i16_nxv4f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i16.nxv8f16( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv8i16_nxv8f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i16.nxv8f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i16_nxv8f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i16.nxv16f16( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv16i16_nxv16f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i16.nxv16f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i16_nxv16f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv32i16.nxv32f16( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv32i16_nxv32f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv32i16.nxv32f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv32i16_nxv32f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i32.nxv1f32( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv1i32_nxv1f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i32.nxv1f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i32_nxv1f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i32.nxv2f32( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv2i32_nxv2f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i32.nxv2f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i32_nxv2f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i32.nxv4f32( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv4i32_nxv4f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i32.nxv4f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i32_nxv4f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i32.nxv8f32( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv8i32_nxv8f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i32.nxv8f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i32_nxv8f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i32.nxv16f32( + , + i32); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv16i32_nxv16f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i32.nxv16f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i32_nxv16f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-xu-f-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-xu-f-rv64.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-rtz-xu-f-rv64.ll @@ -0,0 +1,541 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i16.nxv1f16( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv1i16_nxv1f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i16.nxv1f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i16_nxv1f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i16.nxv2f16( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv2i16_nxv2f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i16.nxv2f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i16_nxv2f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i16.nxv4f16( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv4i16_nxv4f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i16.nxv4f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i16_nxv4f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i16.nxv8f16( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv8i16_nxv8f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i16.nxv8f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i16_nxv8f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i16.nxv16f16( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv16i16_nxv16f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i16.nxv16f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i16_nxv16f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv32i16.nxv32f16( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv32i16_nxv32f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv32i16.nxv32f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv32i16_nxv32f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i32.nxv1f32( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv1i32_nxv1f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i32.nxv1f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i32_nxv1f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i32.nxv2f32( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv2i32_nxv2f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i32.nxv2f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i32_nxv2f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i32.nxv4f32( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv4i32_nxv4f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i32.nxv4f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i32_nxv4f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i32.nxv8f32( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv8i32_nxv8f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i32.nxv8f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i32_nxv8f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i32.nxv16f32( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv16i32_nxv16f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv16i32.nxv16f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i32_nxv16f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i64.nxv1f64( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv1i64_nxv1f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv1i64.nxv1f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i64.nxv1f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i64_nxv1f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv1i64.nxv1f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i64.nxv2f64( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv2i64_nxv2f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv2i64.nxv2f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i64.nxv2f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i64_nxv2f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv2i64.nxv2f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i64.nxv4f64( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv4i64_nxv4f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv4i64.nxv4f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i64.nxv4f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i64_nxv4f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv4i64.nxv4f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i64.nxv8f64( + , + i64); + +define @intrinsic_vfcvt_rtz.xu.f.v_nxv8i64_nxv8f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_rtz.xu.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,ta,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.nxv8i64.nxv8f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i64.nxv8f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i64_nxv8f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_rtz.xu.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,tu,mu +; CHECK: vfcvt.rtz.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.rtz.xu.f.v.mask.nxv8i64.nxv8f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-x-f-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-x-f-rv32.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-x-f-rv32.ll @@ -0,0 +1,397 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.x.f.v.nxv1i16.nxv1f16( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv1i16_nxv1f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv1i16.nxv1f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv1i16_nxv1f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv2i16.nxv2f16( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv2i16_nxv2f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv2i16.nxv2f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv2i16_nxv2f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv4i16.nxv4f16( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv4i16_nxv4f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv4i16.nxv4f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv4i16_nxv4f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv8i16.nxv8f16( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv8i16_nxv8f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv8i16.nxv8f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv8i16_nxv8f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv16i16.nxv16f16( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv16i16_nxv16f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv16i16.nxv16f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv16i16_nxv16f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv32i16.nxv32f16( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv32i16_nxv32f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv32i16.nxv32f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv32i16_nxv32f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv1i32.nxv1f32( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv1i32_nxv1f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv1i32.nxv1f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv1i32_nxv1f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv2i32.nxv2f32( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv2i32_nxv2f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv2i32.nxv2f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv2i32_nxv2f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv4i32.nxv4f32( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv4i32_nxv4f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv4i32.nxv4f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv4i32_nxv4f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv8i32.nxv8f32( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv8i32_nxv8f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv8i32.nxv8f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv8i32_nxv8f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv16i32.nxv16f32( + , + i32); + +define @intrinsic_vfcvt_x.f.v_nxv16i32_nxv16f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv16i32.nxv16f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_x.f.v_nxv16i32_nxv16f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-x-f-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-x-f-rv64.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-x-f-rv64.ll @@ -0,0 +1,541 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.x.f.v.nxv1i16.nxv1f16( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv1i16_nxv1f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv1i16.nxv1f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv1i16_nxv1f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv2i16.nxv2f16( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv2i16_nxv2f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv2i16.nxv2f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv2i16_nxv2f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv4i16.nxv4f16( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv4i16_nxv4f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv4i16.nxv4f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv4i16_nxv4f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv8i16.nxv8f16( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv8i16_nxv8f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv8i16.nxv8f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv8i16_nxv8f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv16i16.nxv16f16( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv16i16_nxv16f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv16i16.nxv16f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv16i16_nxv16f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv32i16.nxv32f16( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv32i16_nxv32f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv32i16.nxv32f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv32i16_nxv32f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv1i32.nxv1f32( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv1i32_nxv1f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv1i32.nxv1f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv1i32_nxv1f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv2i32.nxv2f32( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv2i32_nxv2f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv2i32.nxv2f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv2i32_nxv2f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv4i32.nxv4f32( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv4i32_nxv4f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv4i32.nxv4f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv4i32_nxv4f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv8i32.nxv8f32( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv8i32_nxv8f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv8i32.nxv8f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv8i32_nxv8f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv16i32.nxv16f32( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv16i32_nxv16f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv16i32.nxv16f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv16i32_nxv16f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv1i64.nxv1f64( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv1i64_nxv1f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv1i64.nxv1f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv1i64.nxv1f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv1i64_nxv1f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv1i64.nxv1f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv2i64.nxv2f64( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv2i64_nxv2f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv2i64.nxv2f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv2i64.nxv2f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv2i64_nxv2f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv2i64.nxv2f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv4i64.nxv4f64( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv4i64_nxv4f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv4i64.nxv4f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv4i64.nxv4f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv4i64_nxv4f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv4i64.nxv4f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.nxv8i64.nxv8f64( + , + i64); + +define @intrinsic_vfcvt_x.f.v_nxv8i64_nxv8f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_x.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,ta,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.x.f.v.nxv8i64.nxv8f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.x.f.v.mask.nxv8i64.nxv8f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_x.f.v_nxv8i64_nxv8f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_x.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,tu,mu +; CHECK: vfcvt.x.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.x.f.v.mask.nxv8i64.nxv8f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-xu-f-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-xu-f-rv32.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-xu-f-rv32.ll @@ -0,0 +1,397 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.xu.f.v.nxv1i16.nxv1f16( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv1i16_nxv1f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv1i16.nxv1f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv1i16_nxv1f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv2i16.nxv2f16( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv2i16_nxv2f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv2i16.nxv2f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv2i16_nxv2f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv4i16.nxv4f16( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv4i16_nxv4f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv4i16.nxv4f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv4i16_nxv4f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv8i16.nxv8f16( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv8i16_nxv8f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv8i16.nxv8f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv8i16_nxv8f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv16i16.nxv16f16( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv16i16_nxv16f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv16i16.nxv16f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv16i16_nxv16f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv32i16.nxv32f16( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv32i16_nxv32f16( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv32i16.nxv32f16( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv32i16_nxv32f16( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv1i32.nxv1f32( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv1i32_nxv1f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv1i32.nxv1f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv1i32_nxv1f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv2i32.nxv2f32( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv2i32_nxv2f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv2i32.nxv2f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv2i32_nxv2f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv4i32.nxv4f32( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv4i32_nxv4f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv4i32.nxv4f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv4i32_nxv4f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv8i32.nxv8f32( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv8i32_nxv8f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv8i32.nxv8f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv8i32_nxv8f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv16i32.nxv16f32( + , + i32); + +define @intrinsic_vfcvt_xu.f.v_nxv16i32_nxv16f32( %0, i32 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv16i32.nxv16f32( + %0, + i32 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i32); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv16i32_nxv16f32( %0, %1, %2, i32 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i32 %3) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcvt-xu-f-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vfcvt-xu-f-rv64.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vfcvt-xu-f-rv64.ll @@ -0,0 +1,541 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d,+experimental-zfh -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vfcvt.xu.f.v.nxv1i16.nxv1f16( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv1i16_nxv1f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv1i16.nxv1f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i16.nxv1f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv1i16_nxv1f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv1i16_nxv1f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf4,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i16.nxv1f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv2i16.nxv2f16( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv2i16_nxv2f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv2i16.nxv2f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i16.nxv2f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv2i16_nxv2f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv2i16_nxv2f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,mf2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i16.nxv2f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv4i16.nxv4f16( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv4i16_nxv4f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv4i16.nxv4f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i16.nxv4f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv4i16_nxv4f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv4i16_nxv4f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m1,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i16.nxv4f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv8i16.nxv8f16( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv8i16_nxv8f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv8i16.nxv8f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i16.nxv8f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv8i16_nxv8f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv8i16_nxv8f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i16.nxv8f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv16i16.nxv16f16( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv16i16_nxv16f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv16i16.nxv16f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i16.nxv16f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv16i16_nxv16f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv16i16_nxv16f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m4,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i16.nxv16f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv32i16.nxv32f16( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv32i16_nxv32f16( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv32i16.nxv32f16( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv32i16.nxv32f16( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv32i16_nxv32f16( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv32i16_nxv32f16 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e16,m8,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv32i16.nxv32f16( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv1i32.nxv1f32( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv1i32_nxv1f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv1i32.nxv1f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i32.nxv1f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv1i32_nxv1f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv1i32_nxv1f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,mf2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i32.nxv1f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv2i32.nxv2f32( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv2i32_nxv2f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv2i32.nxv2f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i32.nxv2f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv2i32_nxv2f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv2i32_nxv2f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m1,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i32.nxv2f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv4i32.nxv4f32( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv4i32_nxv4f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv4i32.nxv4f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i32.nxv4f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv4i32_nxv4f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv4i32_nxv4f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i32.nxv4f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv8i32.nxv8f32( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv8i32_nxv8f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv8i32.nxv8f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i32.nxv8f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv8i32_nxv8f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv8i32_nxv8f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m4,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i32.nxv8f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv16i32.nxv16f32( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv16i32_nxv16f32( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv16i32.nxv16f32( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i32.nxv16f32( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv16i32_nxv16f32( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv16i32_nxv16f32 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e32,m8,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv16i32.nxv16f32( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv1i64.nxv1f64( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv1i64_nxv1f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv1i64.nxv1f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i64.nxv1f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv1i64_nxv1f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv1i64_nxv1f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m1,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv1i64.nxv1f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv2i64.nxv2f64( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv2i64_nxv2f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv2i64.nxv2f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i64.nxv2f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv2i64_nxv2f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv2i64_nxv2f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m2,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv2i64.nxv2f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv4i64.nxv4f64( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv4i64_nxv4f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv4i64.nxv4f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i64.nxv4f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv4i64_nxv4f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv4i64_nxv4f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m4,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv4i64.nxv4f64( + %0, + %1, + %2, + i64 %3) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.nxv8i64.nxv8f64( + , + i64); + +define @intrinsic_vfcvt_xu.f.v_nxv8i64_nxv8f64( %0, i64 %1) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_xu.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,ta,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vfcvt.xu.f.v.nxv8i64.nxv8f64( + %0, + i64 %1) + + ret %a +} + +declare @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i64.nxv8f64( + , + , + , + i64); + +define @intrinsic_vfcvt_mask_xu.f.v_nxv8i64_nxv8f64( %0, %1, %2, i64 %3) nounwind { +entry: +; CHECK-LABEL: intrinsic_vfcvt_mask_xu.f.v_nxv8i64_nxv8f64 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e64,m8,tu,mu +; CHECK: vfcvt.xu.f.v {{v[0-9]+}}, {{v[0-9]+}}, v0.t + %a = call @llvm.riscv.vfcvt.xu.f.v.mask.nxv8i64.nxv8f64( + %0, + %1, + %2, + i64 %3) + + ret %a +}