diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-10-07 22:21:02 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-10-07 22:21:02 +0000 |
commit | a5937bbfd19e61d651a58b0f0ffeef68457902a5 (patch) | |
tree | 89900f2c77818128c031816dfe2a5154ee1ef592 /lib/Analysis/AnalysisContext.cpp | |
parent | ec2ec1f20322076717c3865b196f7a1c95d883a4 (diff) |
Remove AnalysisContext::getLiveVariables(), and introduce a templatized mechanism to lazily create analyses that are attached to AnalysisContext objects.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141425 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/AnalysisContext.cpp')
-rw-r--r-- | lib/Analysis/AnalysisContext.cpp | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/lib/Analysis/AnalysisContext.cpp b/lib/Analysis/AnalysisContext.cpp index 200183a027..3dd194b8e8 100644 --- a/lib/Analysis/AnalysisContext.cpp +++ b/lib/Analysis/AnalysisContext.cpp @@ -30,6 +30,8 @@ using namespace clang; +typedef llvm::DenseMap<const void *, ManagedAnalysis *> ManagedAnalysisMap; + AnalysisContext::AnalysisContext(const Decl *d, idx::TranslationUnit *tu, const CFG::BuildOptions &buildOptions) @@ -38,7 +40,8 @@ AnalysisContext::AnalysisContext(const Decl *d, forcedBlkExprs(0), builtCFG(false), builtCompleteCFG(false), - ReferencedBlockVars(0) + ReferencedBlockVars(0), + ManagedAnalyses(0) { cfgBuildOptions.forcedBlkExprs = &forcedBlkExprs; } @@ -49,7 +52,8 @@ AnalysisContext::AnalysisContext(const Decl *d, forcedBlkExprs(0), builtCFG(false), builtCompleteCFG(false), - ReferencedBlockVars(0) + ReferencedBlockVars(0), + ManagedAnalyses(0) { cfgBuildOptions.forcedBlkExprs = &forcedBlkExprs; } @@ -176,18 +180,6 @@ PseudoConstantAnalysis *AnalysisContext::getPseudoConstantAnalysis() { return PCA.get(); } -LiveVariables *AnalysisContext::getLiveVariables() { - if (!liveness) - liveness.reset(LiveVariables::computeLiveness(*this)); - return liveness.get(); -} - -LiveVariables *AnalysisContext::getRelaxedLiveVariables() { - if (!relaxedLiveness) - relaxedLiveness.reset(LiveVariables::computeLiveness(*this, false)); - return relaxedLiveness.get(); -} - AnalysisContext *AnalysisContextManager::getContext(const Decl *D, idx::TranslationUnit *TU) { AnalysisContext *&AC = Contexts[D]; @@ -395,13 +387,29 @@ AnalysisContext::getReferencedBlockVars(const BlockDecl *BD) { return std::make_pair(V->begin(), V->end()); } +ManagedAnalysis *&AnalysisContext::getAnalysisImpl(const void *tag) { + if (!ManagedAnalyses) + ManagedAnalyses = new ManagedAnalysisMap(); + ManagedAnalysisMap *M = (ManagedAnalysisMap*) ManagedAnalyses; + return (*M)[tag]; +} + //===----------------------------------------------------------------------===// // Cleanup. //===----------------------------------------------------------------------===// +ManagedAnalysis::~ManagedAnalysis() {} + AnalysisContext::~AnalysisContext() { delete forcedBlkExprs; delete ReferencedBlockVars; + // Release the managed analyses. + if (ManagedAnalyses) { + ManagedAnalysisMap *M = (ManagedAnalysisMap*) ManagedAnalyses; + for (ManagedAnalysisMap::iterator I = M->begin(), E = M->end(); I!=E; ++I) + delete I->second; + delete M; + } } AnalysisContextManager::~AnalysisContextManager() { |