From b6c93170e69f3c6d8220e5c0d9a52cd2d0b3e3a5 Mon Sep 17 00:00:00 2001 From: LiqinWeng Date: Tue, 26 Nov 2024 20:24:51 +0800 Subject: [PATCH 1/2] [TTI][RISCV] Deduplicate type-based VP costing of vpReduction Refered to: #115983 --- llvm/include/llvm/CodeGen/BasicTTIImpl.h | 32 +++++++++++++++++++ .../Target/RISCV/RISCVTargetTransformInfo.cpp | 31 ------------------ 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h index 98cbb4886642b..21c1f98c78fe7 100644 --- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h +++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h @@ -1647,6 +1647,38 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase { UI->getPredicate(), CostKind); } } + if (VPReductionIntrinsic::isVPReduction(ICA.getID())) { + std::optional RedID = + VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID()); + assert(RedID.has_value()); + switch (ICA.getID()) { + case Intrinsic::vp_reduce_add: + case Intrinsic::vp_reduce_fadd: + case Intrinsic::vp_reduce_mul: + case Intrinsic::vp_reduce_fmul: + case Intrinsic::vp_reduce_and: + case Intrinsic::vp_reduce_or: + case Intrinsic::vp_reduce_xor: { + unsigned RedOp = getArithmeticReductionInstruction(*RedID); + return thisT()->getArithmeticReductionCost( + RedOp, cast(ICA.getArgTypes()[1]), ICA.getFlags(), + CostKind); + } + case Intrinsic::vp_reduce_smax: + case Intrinsic::vp_reduce_smin: + case Intrinsic::vp_reduce_umax: + case Intrinsic::vp_reduce_umin: + case Intrinsic::vp_reduce_fmax: + case Intrinsic::vp_reduce_fmaximum: + case Intrinsic::vp_reduce_fmin: + case Intrinsic::vp_reduce_fminimum: { + Intrinsic::ID MinMaxID = getMinMaxReductionIntrinsicOp(*RedID); + return thisT()->getMinMaxReductionCost( + MinMaxID, cast(ICA.getArgTypes()[1]), + ICA.getFlags(), CostKind); + } + } + } } std::optional FID = diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp index 8f0ef69258b16..bbded57bb92ab 100644 --- a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp @@ -1144,37 +1144,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA, : RISCV::VMV_V_X, LT.second, CostKind); } - case Intrinsic::vp_reduce_add: - case Intrinsic::vp_reduce_fadd: - case Intrinsic::vp_reduce_mul: - case Intrinsic::vp_reduce_fmul: - case Intrinsic::vp_reduce_and: - case Intrinsic::vp_reduce_or: - case Intrinsic::vp_reduce_xor: { - std::optional RedID = - VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID()); - assert(RedID.has_value()); - unsigned RedOp = getArithmeticReductionInstruction(*RedID); - return getArithmeticReductionCost(RedOp, - cast(ICA.getArgTypes()[1]), - ICA.getFlags(), CostKind); - } - case Intrinsic::vp_reduce_smax: - case Intrinsic::vp_reduce_smin: - case Intrinsic::vp_reduce_umax: - case Intrinsic::vp_reduce_umin: - case Intrinsic::vp_reduce_fmax: - case Intrinsic::vp_reduce_fmaximum: - case Intrinsic::vp_reduce_fmin: - case Intrinsic::vp_reduce_fminimum: { - std::optional RedID = - VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID()); - assert(RedID.has_value()); - Intrinsic::ID MinMaxID = getMinMaxReductionIntrinsicOp(*RedID); - return getMinMaxReductionCost(MinMaxID, - cast(ICA.getArgTypes()[1]), - ICA.getFlags(), CostKind); - } } if (ST->hasVInstructions() && RetTy->isVectorTy()) { From bb33f53fdb9f6bc357cb5ea66ccda0c3b9cd1f6f Mon Sep 17 00:00:00 2001 From: LiqinWeng Date: Fri, 29 Nov 2024 10:18:19 +0800 Subject: [PATCH 2/2] Remove duplicate VPReduction's cost --- llvm/include/llvm/CodeGen/BasicTTIImpl.h | 32 ------------------------ 1 file changed, 32 deletions(-) diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h index 21c1f98c78fe7..98cbb4886642b 100644 --- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h +++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h @@ -1647,38 +1647,6 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase { UI->getPredicate(), CostKind); } } - if (VPReductionIntrinsic::isVPReduction(ICA.getID())) { - std::optional RedID = - VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID()); - assert(RedID.has_value()); - switch (ICA.getID()) { - case Intrinsic::vp_reduce_add: - case Intrinsic::vp_reduce_fadd: - case Intrinsic::vp_reduce_mul: - case Intrinsic::vp_reduce_fmul: - case Intrinsic::vp_reduce_and: - case Intrinsic::vp_reduce_or: - case Intrinsic::vp_reduce_xor: { - unsigned RedOp = getArithmeticReductionInstruction(*RedID); - return thisT()->getArithmeticReductionCost( - RedOp, cast(ICA.getArgTypes()[1]), ICA.getFlags(), - CostKind); - } - case Intrinsic::vp_reduce_smax: - case Intrinsic::vp_reduce_smin: - case Intrinsic::vp_reduce_umax: - case Intrinsic::vp_reduce_umin: - case Intrinsic::vp_reduce_fmax: - case Intrinsic::vp_reduce_fmaximum: - case Intrinsic::vp_reduce_fmin: - case Intrinsic::vp_reduce_fminimum: { - Intrinsic::ID MinMaxID = getMinMaxReductionIntrinsicOp(*RedID); - return thisT()->getMinMaxReductionCost( - MinMaxID, cast(ICA.getArgTypes()[1]), - ICA.getFlags(), CostKind); - } - } - } } std::optional FID =