Skip to content

Commit

Permalink
Reapply "[DemandedBits] Use SetVector for Worklist"
Browse files Browse the repository at this point in the history
DemandedBits currently uses a simple vector for the worklist, which
means that instructions may be inserted multiple times into it.
Especially in combination with the deep lattice, this may cause
instructions too be recomputed very often. To avoid this, switch
to a SetVector.

Reapplying with a smaller number of inline elements in the
SmallSetVector, to avoid running into the SmallDenseMap issue
described in D56455.

Differential Revision: https://reviews.llvm.org/D56362

llvm-svn: 350997
  • Loading branch information
nikic committed Jan 12, 2019
1 parent 6a4d2d6 commit 5f393eb
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions llvm/lib/Analysis/DemandedBits.cpp
Expand Up @@ -21,8 +21,7 @@

#include "llvm/Analysis/DemandedBits.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/ValueTracking.h"
Expand Down Expand Up @@ -315,7 +314,7 @@ void DemandedBits::performAnalysis() {
AliveBits.clear();
DeadUses.clear();

SmallVector<Instruction*, 128> Worklist;
SmallSetVector<Instruction*, 16> Worklist;

// Collect the set of "root" instructions that are known live.
for (Instruction &I : instructions(F)) {
Expand All @@ -330,7 +329,7 @@ void DemandedBits::performAnalysis() {
Type *T = I.getType();
if (T->isIntOrIntVectorTy()) {
if (AliveBits.try_emplace(&I, T->getScalarSizeInBits(), 0).second)
Worklist.push_back(&I);
Worklist.insert(&I);

continue;
}
Expand All @@ -341,7 +340,7 @@ void DemandedBits::performAnalysis() {
Type *T = J->getType();
if (T->isIntOrIntVectorTy())
AliveBits[J] = APInt::getAllOnesValue(T->getScalarSizeInBits());
Worklist.push_back(J);
Worklist.insert(J);
}
}
// To save memory, we don't add I to the Visited set here. Instead, we
Expand Down Expand Up @@ -412,11 +411,11 @@ void DemandedBits::performAnalysis() {
APInt ABNew = AB | ABPrev;
if (ABNew != ABPrev || ABI == AliveBits.end()) {
AliveBits[I] = std::move(ABNew);
Worklist.push_back(I);
Worklist.insert(I);
}
}
} else if (I && !Visited.count(I)) {
Worklist.push_back(I);
Worklist.insert(I);
}
}
}
Expand Down

0 comments on commit 5f393eb

Please sign in to comment.