diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h index 2b9be43eadb7a..1514677390725 100644 --- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h +++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h @@ -1773,6 +1773,18 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase { } } + if (ICA.getID() == Intrinsic::vp_select || + ICA.getID() == Intrinsic::vp_merge) { + TTI::OperandValueInfo OpInfoX, OpInfoY; + if (!ICA.isTypeBasedOnly()) { + OpInfoX = TTI::getOperandInfo(ICA.getArgs()[0]); + OpInfoY = TTI::getOperandInfo(ICA.getArgs()[1]); + } + return getCmpSelInstrCost( + Instruction::Select, ICA.getReturnType(), ICA.getArgTypes()[0], + CmpInst::BAD_ICMP_PREDICATE, CostKind, OpInfoX, OpInfoY); + } + std::optional FID = VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID()); if (FID) { diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp index 67a51c12b508e..9d9e473678670 100644 --- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp @@ -1512,17 +1512,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA, return Cost * LT.first; break; } - case Intrinsic::vp_select: { - Intrinsic::ID IID = ICA.getID(); - std::optional FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID); - assert(FOp.has_value()); - return getCmpSelInstrCost(*FOp, ICA.getReturnType(), ICA.getArgTypes()[0], - CmpInst::BAD_ICMP_PREDICATE, CostKind); - } - case Intrinsic::vp_merge: - return getCmpSelInstrCost(Instruction::Select, ICA.getReturnType(), - ICA.getArgTypes()[0], CmpInst::BAD_ICMP_PREDICATE, - CostKind); case Intrinsic::experimental_vp_splat: { auto LT = getTypeLegalizationCost(RetTy); // TODO: Lower i1 experimental_vp_splat