diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2015-01-13 11:13:56 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2015-01-13 11:13:56 +0000 |
commit | 816702ffe00a9bf60704d1c992f55203ca39c55c (patch) | |
tree | a9435a1c60ebeb5025389cfc7f90e42913e29ead /llvm/lib/IR/PassManager.cpp | |
parent | cdcb580d4e7760b7fd2b85fd647c7e5c3478ee99 (diff) | |
download | bcm5719-llvm-816702ffe00a9bf60704d1c992f55203ca39c55c.tar.gz bcm5719-llvm-816702ffe00a9bf60704d1c992f55203ca39c55c.zip |
[PM] Refactor the new pass manager to use a single template to implement
the generic functionality of the pass managers themselves.
In the new infrastructure, the pass "manager" isn't actually interesting
at all. It just pipelines a single chunk of IR through N passes. We
don't need to know anything about the IR or the passes to do this really
and we can replace the 3 implementations of the exact same functionality
with a single generic PassManager template, complementing the single
generic AnalysisManager template.
I've left typedefs in place to give convenient names to the various
obvious instantiations of the template.
With this, I think I've nuked almost all of the redundant logic in the
managers, and I think the overall design is actually simpler for having
single templates that clearly indicate there is no special logic here.
The logging is made somewhat more annoying by this change, but I don't
think the difference is worth having heavy-weight traits to help log
things.
llvm-svn: 225783
Diffstat (limited to 'llvm/lib/IR/PassManager.cpp')
-rw-r--r-- | llvm/lib/IR/PassManager.cpp | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/llvm/lib/IR/PassManager.cpp b/llvm/lib/IR/PassManager.cpp index 91533cc175a..3e6efb70260 100644 --- a/llvm/lib/IR/PassManager.cpp +++ b/llvm/lib/IR/PassManager.cpp @@ -18,73 +18,6 @@ cl::opt<bool> llvm::detail::DebugPM( "debug-pass-manager", cl::Hidden, cl::desc("Print pass management debugging information")); -PreservedAnalyses ModulePassManager::run(Module &M, ModuleAnalysisManager *AM) { - PreservedAnalyses PA = PreservedAnalyses::all(); - - if (DebugPM) - dbgs() << "Starting module pass manager run.\n"; - - for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { - if (DebugPM) - dbgs() << "Running module pass: " << Passes[Idx]->name() << "\n"; - - PreservedAnalyses PassPA = Passes[Idx]->run(M, AM); - - // If we have an active analysis manager at this level we want to ensure we - // update it as each pass runs and potentially invalidates analyses. We - // also update the preserved set of analyses based on what analyses we have - // already handled the invalidation for here and don't need to invalidate - // when finished. - if (AM) - PassPA = AM->invalidate(M, std::move(PassPA)); - - // Finally, we intersect the final preserved analyses to compute the - // aggregate preserved set for this pass manager. - PA.intersect(std::move(PassPA)); - - M.getContext().yield(); - } - - if (DebugPM) - dbgs() << "Finished module pass manager run.\n"; - - return PA; -} - -PreservedAnalyses FunctionPassManager::run(Function &F, - FunctionAnalysisManager *AM) { - PreservedAnalyses PA = PreservedAnalyses::all(); - - if (DebugPM) - dbgs() << "Starting function pass manager run.\n"; - - for (unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx) { - if (DebugPM) - dbgs() << "Running function pass: " << Passes[Idx]->name() << "\n"; - - PreservedAnalyses PassPA = Passes[Idx]->run(F, AM); - - // If we have an active analysis manager at this level we want to ensure we - // update it as each pass runs and potentially invalidates analyses. We - // also update the preserved set of analyses based on what analyses we have - // already handled the invalidation for here and don't need to invalidate - // when finished. - if (AM) - PassPA = AM->invalidate(F, std::move(PassPA)); - - // Finally, we intersect the final preserved analyses to compute the - // aggregate preserved set for this pass manager. - PA.intersect(std::move(PassPA)); - - F.getContext().yield(); - } - - if (DebugPM) - dbgs() << "Finished function pass manager run.\n"; - - return PA; -} - char FunctionAnalysisManagerModuleProxy::PassID; FunctionAnalysisManagerModuleProxy::Result |