Change MemDep::getNonLocalDependency to return its results as
a smallvector instead of a DenseMap. This speeds up GVN by 5%
on 403.gcc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60255 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp
index a6cc993..1522dba 100644
--- a/lib/Transforms/Scalar/GVN.cpp
+++ b/lib/Transforms/Scalar/GVN.cpp
@@ -495,11 +495,11 @@
}
- DenseMap<BasicBlock*, MemDepResult> deps;
+ SmallVector<std::pair<BasicBlock*, MemDepResult>, 32> deps;
MD->getNonLocalDependency(C, deps);
CallInst* cdep = 0;
- for (DenseMap<BasicBlock*, MemDepResult>
+ for (SmallVector<std::pair<BasicBlock*, MemDepResult>, 32>
::iterator I = deps.begin(), E = deps.end(); I != E; ++I) {
if (I->second.isNone()) {
valueNumbering.insert(std::make_pair(V, nextValueNumber));
@@ -871,7 +871,7 @@
MemoryDependenceAnalysis& MD = getAnalysis<MemoryDependenceAnalysis>();
// Find the non-local dependencies of the load
- DenseMap<BasicBlock*, MemDepResult> deps;
+ SmallVector<std::pair<BasicBlock*, MemDepResult>, 32> deps;
MD.getNonLocalDependency(L, deps);
// If we had to process more than one hundred blocks to find the
@@ -885,8 +885,8 @@
DenseMap<BasicBlock*, Value*> repl;
// Filter out useless results (non-locals, etc)
- for (DenseMap<BasicBlock*, MemDepResult>::iterator I = deps.begin(),
- E = deps.end(); I != E; ++I) {
+ for (SmallVector<std::pair<BasicBlock*, MemDepResult>, 32>::iterator
+ I = deps.begin(), E = deps.end(); I != E; ++I) {
if (I->second.isNone()) {
repl[I->first] = UndefValue::get(L->getType());
continue;