diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2016-12-27 19:33:04 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2016-12-27 19:33:04 +0000 |
commit | e14524ca30735e5e9aeee8ac3173f37ec5ed68f8 (patch) | |
tree | 43cb1e41f0463b4ba8f2b1705b7fb3c508902630 /llvm/lib/Analysis/MemoryDependenceAnalysis.cpp | |
parent | c9ed5146320c8896136acb0d81955f77d2632207 (diff) | |
download | llvm-e14524ca30735e5e9aeee8ac3173f37ec5ed68f8.zip llvm-e14524ca30735e5e9aeee8ac3173f37ec5ed68f8.tar.gz llvm-e14524ca30735e5e9aeee8ac3173f37ec5ed68f8.tar.bz2 |
[PM] Teach MemDep to invalidate its result object when its cached
analysis handles become invalid.
Add a test case for its invalidation logic.
llvm-svn: 290620
Diffstat (limited to 'llvm/lib/Analysis/MemoryDependenceAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/MemoryDependenceAnalysis.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp index 647b1de..74621f5 100644 --- a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -1683,6 +1683,24 @@ void MemoryDependenceWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequiredTransitive<TargetLibraryInfoWrapperPass>(); } +bool MemoryDependenceResults::invalidate(Function &F, const PreservedAnalyses &PA, + FunctionAnalysisManager::Invalidator &Inv) { + // Check whether our analysis is preserved. + auto PAC = PA.getChecker<MemoryDependenceAnalysis>(); + if (!PAC.preserved() && !PAC.preservedSet<AllAnalysesOn<Function>>()) + // If not, give up now. + return true; + + // Check whether the analyses we depend on became invalid for any reason. + if (Inv.invalidate<AAManager>(F, PA) || + Inv.invalidate<AssumptionAnalysis>(F, PA) || + Inv.invalidate<DominatorTreeAnalysis>(F, PA)) + return true; + + // Otherwise this analysis result remains valid. + return false; +} + unsigned MemoryDependenceResults::getDefaultBlockScanLimit() const { return BlockScanLimit; } |