diff options
author | Stephen Hines <srhines@google.com> | 2015-04-01 18:49:24 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-04-01 18:49:26 +0000 |
commit | 3fa16bd6062e23bcdb82ed4dd965674792e6b761 (patch) | |
tree | 9348fc507292f7e8715d22d64ce5a32131b4f875 /lib/Analysis/CGSCCPassManager.cpp | |
parent | beed47390a60f6f0c77532b3d3f76bb47ef49423 (diff) | |
parent | ebe69fe11e48d322045d5949c83283927a0d790b (diff) | |
download | external_llvm-3fa16bd6062e23bcdb82ed4dd965674792e6b761.zip external_llvm-3fa16bd6062e23bcdb82ed4dd965674792e6b761.tar.gz external_llvm-3fa16bd6062e23bcdb82ed4dd965674792e6b761.tar.bz2 |
Merge "Update aosp/master LLVM for rebase to r230699."
Diffstat (limited to 'lib/Analysis/CGSCCPassManager.cpp')
-rw-r--r-- | lib/Analysis/CGSCCPassManager.cpp | 103 |
1 files changed, 4 insertions, 99 deletions
diff --git a/lib/Analysis/CGSCCPassManager.cpp b/lib/Analysis/CGSCCPassManager.cpp index 5d1d8a9..4a03002 100644 --- a/lib/Analysis/CGSCCPassManager.cpp +++ b/lib/Analysis/CGSCCPassManager.cpp @@ -13,105 +13,10 @@ using namespace llvm; -static cl::opt<bool> -DebugPM("debug-cgscc-pass-manager", cl::Hidden, - cl::desc("Print CGSCC pass management debugging information")); - -PreservedAnalyses CGSCCPassManager::run(LazyCallGraph::SCC *C, - CGSCCAnalysisManager *AM) { - PreservedAnalyses PA = PreservedAnalyses::all(); - - if (DebugPM) - dbgs() << "Starting CGSCC pass manager run.\n"; - - for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { - if (DebugPM) - dbgs() << "Running CGSCC pass: " << Passes[Idx]->name() << "\n"; - - PreservedAnalyses PassPA = Passes[Idx]->run(C, AM); - if (AM) - AM->invalidate(C, PassPA); - PA.intersect(std::move(PassPA)); - } - - if (DebugPM) - dbgs() << "Finished CGSCC pass manager run.\n"; - - return PA; -} - -bool CGSCCAnalysisManager::empty() const { - assert(CGSCCAnalysisResults.empty() == CGSCCAnalysisResultLists.empty() && - "The storage and index of analysis results disagree on how many there " - "are!"); - return CGSCCAnalysisResults.empty(); -} - -void CGSCCAnalysisManager::clear() { - CGSCCAnalysisResults.clear(); - CGSCCAnalysisResultLists.clear(); -} - -CGSCCAnalysisManager::ResultConceptT & -CGSCCAnalysisManager::getResultImpl(void *PassID, LazyCallGraph::SCC *C) { - CGSCCAnalysisResultMapT::iterator RI; - bool Inserted; - std::tie(RI, Inserted) = CGSCCAnalysisResults.insert(std::make_pair( - std::make_pair(PassID, C), CGSCCAnalysisResultListT::iterator())); - - // If we don't have a cached result for this function, look up the pass and - // run it to produce a result, which we then add to the cache. - if (Inserted) { - CGSCCAnalysisResultListT &ResultList = CGSCCAnalysisResultLists[C]; - ResultList.emplace_back(PassID, lookupPass(PassID).run(C, this)); - RI->second = std::prev(ResultList.end()); - } - - return *RI->second->second; -} - -CGSCCAnalysisManager::ResultConceptT * -CGSCCAnalysisManager::getCachedResultImpl(void *PassID, - LazyCallGraph::SCC *C) const { - CGSCCAnalysisResultMapT::const_iterator RI = - CGSCCAnalysisResults.find(std::make_pair(PassID, C)); - return RI == CGSCCAnalysisResults.end() ? nullptr : &*RI->second->second; -} - -void CGSCCAnalysisManager::invalidateImpl(void *PassID, LazyCallGraph::SCC *C) { - CGSCCAnalysisResultMapT::iterator RI = - CGSCCAnalysisResults.find(std::make_pair(PassID, C)); - if (RI == CGSCCAnalysisResults.end()) - return; - - CGSCCAnalysisResultLists[C].erase(RI->second); -} - -void CGSCCAnalysisManager::invalidateImpl(LazyCallGraph::SCC *C, - const PreservedAnalyses &PA) { - // Clear all the invalidated results associated specifically with this - // function. - SmallVector<void *, 8> InvalidatedPassIDs; - CGSCCAnalysisResultListT &ResultsList = CGSCCAnalysisResultLists[C]; - for (CGSCCAnalysisResultListT::iterator I = ResultsList.begin(), - E = ResultsList.end(); - I != E;) - if (I->second->invalidate(C, PA)) { - InvalidatedPassIDs.push_back(I->first); - I = ResultsList.erase(I); - } else { - ++I; - } - while (!InvalidatedPassIDs.empty()) - CGSCCAnalysisResults.erase( - std::make_pair(InvalidatedPassIDs.pop_back_val(), C)); - CGSCCAnalysisResultLists.erase(C); -} - char CGSCCAnalysisManagerModuleProxy::PassID; CGSCCAnalysisManagerModuleProxy::Result -CGSCCAnalysisManagerModuleProxy::run(Module *M) { +CGSCCAnalysisManagerModuleProxy::run(Module &M) { assert(CGAM->empty() && "CGSCC analyses ran prior to the module proxy!"); return Result(*CGAM); } @@ -123,7 +28,7 @@ CGSCCAnalysisManagerModuleProxy::Result::~Result() { } bool CGSCCAnalysisManagerModuleProxy::Result::invalidate( - Module *M, const PreservedAnalyses &PA) { + Module &M, const PreservedAnalyses &PA) { // If this proxy isn't marked as preserved, then we can't even invalidate // individual CGSCC analyses, there may be an invalid set of SCC objects in // the cache making it impossible to incrementally preserve them. @@ -140,7 +45,7 @@ char ModuleAnalysisManagerCGSCCProxy::PassID; char FunctionAnalysisManagerCGSCCProxy::PassID; FunctionAnalysisManagerCGSCCProxy::Result -FunctionAnalysisManagerCGSCCProxy::run(LazyCallGraph::SCC *C) { +FunctionAnalysisManagerCGSCCProxy::run(LazyCallGraph::SCC &C) { assert(FAM->empty() && "Function analyses ran prior to the CGSCC proxy!"); return Result(*FAM); } @@ -152,7 +57,7 @@ FunctionAnalysisManagerCGSCCProxy::Result::~Result() { } bool FunctionAnalysisManagerCGSCCProxy::Result::invalidate( - LazyCallGraph::SCC *C, const PreservedAnalyses &PA) { + LazyCallGraph::SCC &C, const PreservedAnalyses &PA) { // If this proxy isn't marked as preserved, then we can't even invalidate // individual function analyses, there may be an invalid set of Function // objects in the cache making it impossible to incrementally preserve them. |