[llvm] ce94173 - [SLP] Skip a DenseSet<unsigned> -> bit vector conversion. NFCI.
Benjamin Kramer via llvm-commits
llvm-commits at lists.llvm.org
Sat Feb 5 16:11:37 PST 2022
Author: Benjamin Kramer
Date: 2022-02-06T00:57:47+01:00
New Revision: ce9417348e449aa93be82d57d87eadf7e5670708
URL: https://github.com/llvm/llvm-project/commit/ce9417348e449aa93be82d57d87eadf7e5670708
DIFF: https://github.com/llvm/llvm-project/commit/ce9417348e449aa93be82d57d87eadf7e5670708.diff
LOG: [SLP] Skip a DenseSet<unsigned> -> bit vector conversion. NFCI.
Added:
Modified:
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 7370144a582a5..d8ab6c8dd527a 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -1940,7 +1940,7 @@ class BoUpSLP {
/// NeedToShuffle is true, need to add a cost of reshuffling some of the
/// vector elements.
InstructionCost getGatherCost(FixedVectorType *Ty,
- const DenseSet<unsigned> &ShuffledIndices,
+ const APInt &ShuffledIndices,
bool NeedToShuffle) const;
/// Checks if the gathered \p VL can be represented as shuffle(s) of previous
@@ -6215,17 +6215,11 @@ BoUpSLP::isGatherShuffledEntry(const TreeEntry *TE, SmallVectorImpl<int> &Mask,
return None;
}
-InstructionCost
-BoUpSLP::getGatherCost(FixedVectorType *Ty,
- const DenseSet<unsigned> &ShuffledIndices,
- bool NeedToShuffle) const {
- unsigned NumElts = Ty->getNumElements();
- APInt DemandedElts = APInt::getZero(NumElts);
- for (unsigned I = 0; I < NumElts; ++I)
- if (!ShuffledIndices.count(I))
- DemandedElts.setBit(I);
+InstructionCost BoUpSLP::getGatherCost(FixedVectorType *Ty,
+ const APInt &ShuffledIndices,
+ bool NeedToShuffle) const {
InstructionCost Cost =
- TTI->getScalarizationOverhead(Ty, DemandedElts, /*Insert*/ true,
+ TTI->getScalarizationOverhead(Ty, ~ShuffledIndices, /*Insert*/ true,
/*Extract*/ false);
if (NeedToShuffle)
Cost += TTI->getShuffleCost(TargetTransformInfo::SK_PermuteSingleSrc, Ty);
@@ -6242,19 +6236,19 @@ InstructionCost BoUpSLP::getGatherCost(ArrayRef<Value *> VL) const {
// Find the cost of inserting/extracting values from the vector.
// Check if the same elements are inserted several times and count them as
// shuffle candidates.
- DenseSet<unsigned> ShuffledElements;
+ APInt ShuffledElements = APInt::getZero(VL.size());
DenseSet<Value *> UniqueElements;
// Iterate in reverse order to consider insert elements with the high cost.
for (unsigned I = VL.size(); I > 0; --I) {
unsigned Idx = I - 1;
// No need to shuffle duplicates for constants.
if (isConstant(VL[Idx])) {
- ShuffledElements.insert(Idx);
+ ShuffledElements.setBit(Idx);
continue;
}
if (!UniqueElements.insert(VL[Idx]).second) {
DuplicateNonConst = true;
- ShuffledElements.insert(Idx);
+ ShuffledElements.setBit(Idx);
}
}
return getGatherCost(VecTy, ShuffledElements, DuplicateNonConst);
More information about the llvm-commits
mailing list