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

via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 26 04:27:33 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-risc-v

Author: LiqinWeng (LiqinWeng)

<details>
<summary>Changes</summary>

Refered to: #<!-- -->115983

---
Full diff: https://github.com/llvm/llvm-project/pull/117708.diff


2 Files Affected:

- (modified) llvm/include/llvm/CodeGen/BasicTTIImpl.h (+32) 
- (modified) llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp (-31) 


``````````diff
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()) {

``````````

</details>


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


More information about the llvm-commits mailing list