[llvm] [SLP][REVEC] Fix cost model for getBuildVectorCost with FixedVectorType ScalarTy. (PR #110073)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 25 19:47:47 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Han-Kuan Chen (HanKuanChen)
<details>
<summary>Changes</summary>
BoUpSLP::gather always use CreateInsertVector for FixedVectorType ScalarTy.
---
Full diff: https://github.com/llvm/llvm-project/pull/110073.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp (+9-1)
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index b79e964cdb1b6b..82d7de237d5fd4 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -9198,10 +9198,18 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
bool NeedShuffle =
count(VL, *It) > 1 &&
(VL.front() != *It || !all_of(VL.drop_front(), IsaPred<UndefValue>));
- if (!NeedShuffle)
+ if (!NeedShuffle) {
+ if (isa<FixedVectorType>(ScalarTy)) {
+ assert(SLPReVec && "FixedVectorType is not expected.");
+ return TTI.getShuffleCost(
+ TTI::SK_InsertSubvector, VecTy, {}, CostKind,
+ std::distance(VL.begin(), It) * getNumElements(ScalarTy),
+ cast<FixedVectorType>(ScalarTy));
+ }
return TTI.getVectorInstrCost(Instruction::InsertElement, VecTy,
CostKind, std::distance(VL.begin(), It),
PoisonValue::get(VecTy), *It);
+ }
SmallVector<int> ShuffleMask(VL.size(), PoisonMaskElem);
transform(VL, ShuffleMask.begin(), [](Value *V) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/110073
More information about the llvm-commits
mailing list