[llvm] d8d4c99 - [SLP][NFC]Improve performance of isGatherShuffledEntry() function, NFC.
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 17 14:11:50 PDT 2023
Author: Alexey Bataev
Date: 2023-07-17T14:08:56-07:00
New Revision: d8d4c996855beed83b4d7b8a09fed455de77b665
URL: https://github.com/llvm/llvm-project/commit/d8d4c996855beed83b4d7b8a09fed455de77b665
DIFF: https://github.com/llvm/llvm-project/commit/d8d4c996855beed83b4d7b8a09fed455de77b665.diff
LOG: [SLP][NFC]Improve performance of isGatherShuffledEntry() function, NFC.
Transformed if checks to asserts and simplified some more code to
improve compile time.
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 5249071fcfc844..d67aeaac5667af 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -8659,17 +8659,19 @@ BoUpSLP::isGatherShuffledEntry(const TreeEntry *TE, ArrayRef<Value *> VL,
for (const TreeEntry *TEPtr : ValueToGatherNodes.find(V)->second) {
if (TEPtr == TE)
continue;
- if (!any_of(TEPtr->Scalars, [&GatheredScalars](Value *V) {
- return GatheredScalars.contains(V);
- }))
- continue;
+ assert(any_of(TEPtr->Scalars,
+ [&](Value *V) { return GatheredScalars.contains(V); }) &&
+ "Must contain at least single gathered value.");
assert(TEPtr->UserTreeIndices.size() == 1 &&
"Expected only single user of the gather node.");
- Instruction &EntryUserInst =
- getLastInstructionInBundle(TEPtr->UserTreeIndices.front().UserTE);
PHINode *EntryPHI =
dyn_cast<PHINode>(TEPtr->UserTreeIndices.front().UserTE->getMainOp());
- if (&UserInst == &EntryUserInst && !EntryPHI) {
+ Instruction *EntryUserInst =
+ EntryPHI ? nullptr
+ : &getLastInstructionInBundle(
+ TEPtr->UserTreeIndices.front().UserTE);
+ if (&UserInst == EntryUserInst) {
+ assert(!EntryPHI && "Unexpected phi node entry.");
// If 2 gathers are operands of the same entry, compare operands
// indices, use the earlier one as the base.
if (TE->UserTreeIndices.front().UserTE ==
@@ -8680,18 +8682,18 @@ BoUpSLP::isGatherShuffledEntry(const TreeEntry *TE, ArrayRef<Value *> VL,
}
// Check if the user node of the TE comes after user node of EntryPtr,
// otherwise EntryPtr depends on TE.
- auto *EntryI = EntryPHI
- ? EntryPHI
- ->getIncomingBlock(
- TEPtr->UserTreeIndices.front().EdgeIdx)
- ->getTerminator()
- : &EntryUserInst;
- if (!CheckOrdering(EntryI) &&
- (ParentBB != EntryI->getParent() ||
- TE->UserTreeIndices.front().UserTE !=
- TEPtr->UserTreeIndices.front().UserTE ||
+ auto *EntryI =
+ EntryPHI
+ ? EntryPHI
+ ->getIncomingBlock(TEPtr->UserTreeIndices.front().EdgeIdx)
+ ->getTerminator()
+ : EntryUserInst;
+ if ((ParentBB != EntryI->getParent() ||
TE->UserTreeIndices.front().EdgeIdx <
- TEPtr->UserTreeIndices.front().EdgeIdx))
+ TEPtr->UserTreeIndices.front().EdgeIdx ||
+ TE->UserTreeIndices.front().UserTE !=
+ TEPtr->UserTreeIndices.front().UserTE) &&
+ !CheckOrdering(EntryI))
continue;
VToTEs.insert(TEPtr);
}
More information about the llvm-commits
mailing list