[llvm] [RISCV] Use VP's interfaces to reconstruct cast/cmp/binop cost. NFC (PR #115978)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 12 18:37:26 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: LiqinWeng (LiqinWeng)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/115978.diff
1 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp (+29-59)
``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
index 6344bc4664d3b6..fdf362e8ec686e 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
@@ -1104,65 +1104,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
return Cost * LT.first;
break;
}
- // vp integer arithmetic ops.
- case Intrinsic::vp_add:
- case Intrinsic::vp_and:
- case Intrinsic::vp_ashr:
- case Intrinsic::vp_lshr:
- case Intrinsic::vp_mul:
- case Intrinsic::vp_or:
- case Intrinsic::vp_sdiv:
- case Intrinsic::vp_shl:
- case Intrinsic::vp_srem:
- case Intrinsic::vp_sub:
- case Intrinsic::vp_udiv:
- case Intrinsic::vp_urem:
- case Intrinsic::vp_xor:
- // vp float arithmetic ops.
- case Intrinsic::vp_fadd:
- case Intrinsic::vp_fsub:
- case Intrinsic::vp_fmul:
- case Intrinsic::vp_fdiv:
- case Intrinsic::vp_frem: {
- std::optional<unsigned> FOp =
- VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
- assert(FOp.has_value());
- return getArithmeticInstrCost(*FOp, ICA.getReturnType(), CostKind);
- break;
- }
- // vp int cast ops.
- case Intrinsic::vp_trunc:
- case Intrinsic::vp_zext:
- case Intrinsic::vp_sext:
- // vp float cast ops.
- case Intrinsic::vp_fptoui:
- case Intrinsic::vp_fptosi:
- case Intrinsic::vp_uitofp:
- case Intrinsic::vp_sitofp:
- case Intrinsic::vp_fptrunc:
- case Intrinsic::vp_fpext: {
- std::optional<unsigned> FOp =
- VPIntrinsic::getFunctionalOpcodeForVP(ICA.getID());
- assert(FOp.has_value() && !ICA.getArgTypes().empty());
- return getCastInstrCost(*FOp, RetTy, ICA.getArgTypes()[0],
- TTI::CastContextHint::None, CostKind);
- break;
- }
-
- // vp compare
- case Intrinsic::vp_icmp:
- case Intrinsic::vp_fcmp: {
- 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())
- break;
-
- assert(FOp);
- auto *UI = cast<VPCmpIntrinsic>(ICA.getInst());
- return getCmpSelInstrCost(*FOp, ICA.getArgTypes()[0], ICA.getReturnType(),
- UI->getPredicate(), CostKind);
- }
// vp load/store
case Intrinsic::vp_load:
case Intrinsic::vp_store: {
@@ -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());
+ return getCastInstrCost(*FOp, RetTy, ICA.getArgTypes()[0],
+ TTI::CastContextHint::None, CostKind);
+ }
+
if (ST->hasVInstructions() && RetTy->isVectorTy()) {
if (auto LT = getTypeLegalizationCost(RetTy);
LT.second.isVector()) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/115978
More information about the llvm-commits
mailing list