mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
Reapply "[DemandedBits] Use SetVector for Worklist"
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
This commit is contained in:
parent
80cf764e04
commit
3247e0488e
@ -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"
|
||||
@ -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)) {
|
||||
@ -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;
|
||||
}
|
||||
@ -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
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user