Use more caching when computing non-local dependence. This makes bzip2 not
use up the entire 32-bit address space.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40596 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp
index 4bd8771..02b0af6 100644
--- a/lib/Analysis/MemoryDependenceAnalysis.cpp
+++ b/lib/Analysis/MemoryDependenceAnalysis.cpp
@@ -129,6 +129,8 @@
if (!inserted && !predOnStack)
resp.insert(std::make_pair(block, None));
+ else if (inserted && predOnStack)
+ resp.insert(std::make_pair(block, NonLocal));
return inserted;
}
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp
index ab6c913..fee0eed 100644
--- a/lib/Transforms/Scalar/GVN.cpp
+++ b/lib/Transforms/Scalar/GVN.cpp
@@ -752,7 +752,9 @@
I != E; ++I)
if (I->second == MemoryDependenceAnalysis::None) {
return false;
- } else if (StoreInst* S = dyn_cast<StoreInst>(I->second)) {
+ } else if (I->second == MemoryDependenceAnalysis::NonLocal) {
+ continue;
+ }else if (StoreInst* S = dyn_cast<StoreInst>(I->second)) {
if (S->getPointerOperand() == L->getPointerOperand())
repl.insert(std::make_pair(I->first, S->getOperand(0)));
else