diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index cb9ffabc41236..738aa535dec95 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -8500,6 +8500,9 @@ SDValue RISCVTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, return DAG.getNode(RISCVISD::VMERGE_VL, DL, VT, SelectCond, SplattedVal, Vec, DAG.getUNDEF(VT), VL); } + case Intrinsic::riscv_vfmv_s_f: + return DAG.getNode(RISCVISD::VFMV_S_F_VL, DL, Op.getSimpleValueType(), + Op.getOperand(1), Op.getOperand(2), Op.getOperand(3)); // EGS * EEW >= 128 bits case Intrinsic::riscv_vaesdf_vv: case Intrinsic::riscv_vaesdf_vs: diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index fcb18b67623e7..f2ae04ec4773e 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -7415,32 +7415,6 @@ foreach vti = AllIntegerVectors in { // vmv.s.x is handled with a custom node in RISCVInstrInfoVVLPatterns.td } -//===----------------------------------------------------------------------===// -// 16.2. Floating-Point Scalar Move Instructions -//===----------------------------------------------------------------------===// - -foreach fvti = AllFloatVectors in { - let Predicates = GetVTypePredicates.Predicates in { - def : Pat<(fvti.Vector (int_riscv_vfmv_s_f (fvti.Vector fvti.RegClass:$rs1), - (fvti.Scalar fvti.ScalarRegClass:$rs2), VLOpFrag)), - (!cast("PseudoVFMV_S_"#fvti.ScalarSuffix#"_" # - fvti.LMul.MX) - (fvti.Vector $rs1), - (fvti.Scalar fvti.ScalarRegClass:$rs2), - GPR:$vl, fvti.Log2SEW)>; - - def : Pat<(fvti.Vector (int_riscv_vfmv_s_f (fvti.Vector fvti.RegClass:$rs1), - (fvti.Scalar (fpimm0)), VLOpFrag)), - (!cast("PseudoVMV_S_X_" # fvti.LMul.MX) - (fvti.Vector $rs1), (XLenVT X0), GPR:$vl, fvti.Log2SEW)>; - - def : Pat<(fvti.Vector (int_riscv_vfmv_s_f (fvti.Vector fvti.RegClass:$rs1), - (fvti.Scalar (SelectFPImm (XLenVT GPR:$imm))), VLOpFrag)), - (!cast("PseudoVMV_S_X_" # fvti.LMul.MX) - (fvti.Vector $rs1), GPR:$imm, GPR:$vl, fvti.Log2SEW)>; - } -} - //===----------------------------------------------------------------------===// // 16.3. Vector Slide Instructions //===----------------------------------------------------------------------===// diff --git a/llvm/test/CodeGen/RISCV/rvv/vfmv.s.f.ll b/llvm/test/CodeGen/RISCV/rvv/vfmv.s.f.ll index 4fdc7f2c774f5..01d2eac99d0c0 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vfmv.s.f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfmv.s.f.ll @@ -48,7 +48,7 @@ declare @llvm.riscv.vfmv.s.f.nxv8f16(, ha define @intrinsic_vfmv.s.f_f_nxv8f16( %0, half %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv8f16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -61,7 +61,7 @@ declare @llvm.riscv.vfmv.s.f.nxv16f16(, define @intrinsic_vfmv.s.f_f_nxv16f16( %0, half %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv16f16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -74,7 +74,7 @@ declare @llvm.riscv.vfmv.s.f.nxv32f16(, define @intrinsic_vfmv.s.f_f_nxv32f16( %0, half %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv32f16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -113,7 +113,7 @@ declare @llvm.riscv.vfmv.s.f.nxv4f32(, define @intrinsic_vfmv.s.f_f_nxv4f32( %0, float %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv4f32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -126,7 +126,7 @@ declare @llvm.riscv.vfmv.s.f.nxv8f32(, define @intrinsic_vfmv.s.f_f_nxv8f32( %0, float %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv8f32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -139,7 +139,7 @@ declare @llvm.riscv.vfmv.s.f.nxv16f32( @intrinsic_vfmv.s.f_f_nxv16f32( %0, float %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv16f32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -165,7 +165,7 @@ declare @llvm.riscv.vfmv.s.f.nxv2f64( define @intrinsic_vfmv.s.f_f_nxv2f64( %0, double %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv2f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -178,7 +178,7 @@ declare @llvm.riscv.vfmv.s.f.nxv4f64( define @intrinsic_vfmv.s.f_f_nxv4f64( %0, double %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv4f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -191,7 +191,7 @@ declare @llvm.riscv.vfmv.s.f.nxv8f64( define @intrinsic_vfmv.s.f_f_nxv8f64( %0, double %1, iXLen %2) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv8f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma ; CHECK-NEXT: vfmv.s.f v8, fa0 ; CHECK-NEXT: ret entry: @@ -235,7 +235,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv8f16( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv8f16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -246,7 +246,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv16f16( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv16f16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -257,7 +257,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv32f16( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv32f16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -290,7 +290,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv4f32( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv4f32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -301,7 +301,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv8f32( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv8f32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -312,7 +312,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv16f32( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv16f32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -334,7 +334,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv2f64( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv2f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -345,7 +345,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv4f64( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv4f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: @@ -356,7 +356,7 @@ entry: define @intrinsic_vfmv.s.f_f_zero_nxv8f64( %0, iXLen %1) nounwind { ; CHECK-LABEL: intrinsic_vfmv.s.f_f_zero_nxv8f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma +; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma ; CHECK-NEXT: vmv.s.x v8, zero ; CHECK-NEXT: ret entry: