[llvm] a63eaa5 - [SLP] Avoid repeated visitation in getVectorElementSize(); NFC
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Sun Mar 22 06:34:49 PDT 2020
Author: Nikita Popov
Date: 2020-03-22T14:34:29+01:00
New Revision: a63eaa5449fac237d492bd725a88fabf39881dc2
URL: https://github.com/llvm/llvm-project/commit/a63eaa5449fac237d492bd725a88fabf39881dc2
DIFF: https://github.com/llvm/llvm-project/commit/a63eaa5449fac237d492bd725a88fabf39881dc2.diff
LOG: [SLP] Avoid repeated visitation in getVectorElementSize(); NFC
We need to insert into the Visited set at the same time we insert
into the worklist. Otherwise we may end up pushing the same
instruction to the worklist multiple times, and only adding it to
the visited set later.
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 377aa78730b0..53678bc97d7e 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -5308,8 +5308,10 @@ unsigned BoUpSLP::getVectorElementSize(Value *V) const {
// of memory operations where possible.
SmallVector<Instruction *, 16> Worklist;
SmallPtrSet<Instruction *, 16> Visited;
- if (auto *I = dyn_cast<Instruction>(V))
+ if (auto *I = dyn_cast<Instruction>(V)) {
Worklist.push_back(I);
+ Visited.insert(I);
+ }
// Traverse the expression tree in bottom-up order looking for loads. If we
// encounter an instruction we don't yet handle, we give up.
@@ -5317,7 +5319,6 @@ unsigned BoUpSLP::getVectorElementSize(Value *V) const {
auto FoundUnknownInst = false;
while (!Worklist.empty() && !FoundUnknownInst) {
auto *I = Worklist.pop_back_val();
- Visited.insert(I);
// We should only be looking at scalar instructions here. If the current
// instruction has a vector type, give up.
@@ -5337,7 +5338,7 @@ unsigned BoUpSLP::getVectorElementSize(Value *V) const {
isa<CmpInst>(I) || isa<SelectInst>(I) || isa<BinaryOperator>(I)) {
for (Use &U : I->operands())
if (auto *J = dyn_cast<Instruction>(U.get()))
- if (!Visited.count(J))
+ if (Visited.insert(J).second)
Worklist.push_back(J);
}
More information about the llvm-commits
mailing list