[llvm] [TTI][RISCV] Deduplicate type-based VP costing of VPReduction (PR #117708)

via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 28 18:19:36 PST 2024


https://github.com/LiqinWeng updated https://github.com/llvm/llvm-project/pull/117708

>From b6c93170e69f3c6d8220e5c0d9a52cd2d0b3e3a5 Mon Sep 17 00:00:00 2001
From: LiqinWeng <liqin.weng at spacemit.com>
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 98cbb4886642bf..21c1f98c78fe7c 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -1647,6 +1647,38 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
                                                UI->getPredicate(), CostKind);
           }
         }
+        if (VPReductionIntrinsic::isVPReduction(ICA.getID())) {
+          std::optional<Intrinsic::ID> 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<VectorType>(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<VectorType>(ICA.getArgTypes()[1]),
+                ICA.getFlags(), CostKind);
+          }
+          }
+        }
       }
 
       std::optional<Intrinsic::ID> FID =
diff --git a/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp b/llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp
index 8f0ef69258b165..bbded57bb92ab0 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<Intrinsic::ID> RedID =
-        VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID());
-    assert(RedID.has_value());
-    unsigned RedOp = getArithmeticReductionInstruction(*RedID);
-    return getArithmeticReductionCost(RedOp,
-                                      cast<VectorType>(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<Intrinsic::ID> RedID =
-        VPIntrinsic::getFunctionalIntrinsicIDForVP(ICA.getID());
-    assert(RedID.has_value());
-    Intrinsic::ID MinMaxID = getMinMaxReductionIntrinsicOp(*RedID);
-    return getMinMaxReductionCost(MinMaxID,
-                                  cast<VectorType>(ICA.getArgTypes()[1]),
-                                  ICA.getFlags(), CostKind);
-  }
   }
 
   if (ST->hasVInstructions() && RetTy->isVectorTy()) {

>From bb33f53fdb9f6bc357cb5ea66ccda0c3b9cd1f6f Mon Sep 17 00:00:00 2001
From: LiqinWeng <liqin.weng at spacemit.com>
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 21c1f98c78fe7c..98cbb4886642bf 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -1647,38 +1647,6 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
                                                UI->getPredicate(), CostKind);
           }
         }
-        if (VPReductionIntrinsic::isVPReduction(ICA.getID())) {
-          std::optional<Intrinsic::ID> 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<VectorType>(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<VectorType>(ICA.getArgTypes()[1]),
-                ICA.getFlags(), CostKind);
-          }
-          }
-        }
       }
 
       std::optional<Intrinsic::ID> FID =



More information about the llvm-commits mailing list