[llvm] [RISCV] Use VP's interfaces to reconstruct cast/cmp/binop cost. NFC (PR #115978)
Elvis Wang via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 12 19:04:52 PST 2024
================
@@ -1193,6 +1134,35 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
CostKind);
}
+ if (VPBinOpIntrinsic::isVPBinOp(ICA.getID())) {
+ std::optional<unsigned> FOp =
+ VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
+ assert(FOp.has_value());
+ return getArithmeticInstrCost(*FOp, ICA.getReturnType(), CostKind);
+ }
+
+ // vp cmp ops
+ if (VPCmpIntrinsic::isVPCmp(ICA.getID())) {
+ Intrinsic::ID IID = ICA.getID();
+ std::optional<unsigned> FOp = VPIntrinsic::getFunctionalOpcodeForVP(IID);
+ // We can only handle vp_cmp intrinsics with underlying instructions.
+ if (ICA.getInst()) {
+ assert(FOp);
+ auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
+ return getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0], ICA.getReturnType(),
+ UI->getPredicate(), CostKind);
+ }
+ }
+
+ // vp cast ops
+ if (VPCastIntrinsic::isVPCast(ICA.getID())) {
+ std::optional<unsigned> FOp =
+ VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
+ assert(FOp.has_value() && !ICA.getArgTypes().empty());
----------------
ElvisWang123 wrote:
LGTM.
nit: We could remove the assertion of `FOp.has_value()` since it already checked in the `isVPCast()`.
https://github.com/llvm/llvm-project/pull/115978
More information about the llvm-commits
mailing list