X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAnalysis%2FCGSCCPassManager.cpp;h=4a03002e510b38bdbe19e0d5d3130767bc563794;hb=5d8fcb9d71041be14fe962efeaf7a9fc6bae8267;hp=9a3ebea1c402c70a0eb4f24525d3bd1d8e5d5026;hpb=5b12a2f70388b0578ed4acf885bbca008aaa2cd9;p=oota-llvm.git diff --git a/lib/Analysis/CGSCCPassManager.cpp b/lib/Analysis/CGSCCPassManager.cpp index 9a3ebea1c40..4a03002e510 100644 --- a/lib/Analysis/CGSCCPassManager.cpp +++ b/lib/Analysis/CGSCCPassManager.cpp @@ -13,119 +13,6 @@ using namespace llvm; -static cl::opt -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) { - auto &P = lookupPass(PassID); - if (DebugPM) - dbgs() << "Running CGSCC analysis: " << P.name() << "\n"; - CGSCCAnalysisResultListT &ResultList = CGSCCAnalysisResultLists[&C]; - ResultList.emplace_back(PassID, P.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; - - if (DebugPM) - dbgs() << "Invalidating CGSCC analysis: " << lookupPass(PassID).name() - << "\n"; - CGSCCAnalysisResultLists[&C].erase(RI->second); -} - -void CGSCCAnalysisManager::invalidateImpl(LazyCallGraph::SCC &C, - const PreservedAnalyses &PA) { - // Short circuit for a common case of all analyses being preserved. - if (PA.areAllPreserved()) - return; - - if (DebugPM) - dbgs() << "Invalidating all non-preserved analyses for SCC: " << C.getName() - << "\n"; - - // Clear all the invalidated results associated specifically with this - // function. - SmallVector InvalidatedPassIDs; - CGSCCAnalysisResultListT &ResultsList = CGSCCAnalysisResultLists[&C]; - for (CGSCCAnalysisResultListT::iterator I = ResultsList.begin(), - E = ResultsList.end(); - I != E;) - if (I->second->invalidate(C, PA)) { - if (DebugPM) - dbgs() << "Invalidating CGSCC analysis: " << lookupPass(I->first).name() - << "\n"; - - 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