diff options
Diffstat (limited to 'gnu/llvm/lib/Analysis/RegionInfo.cpp')
| -rw-r--r-- | gnu/llvm/lib/Analysis/RegionInfo.cpp | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/gnu/llvm/lib/Analysis/RegionInfo.cpp b/gnu/llvm/lib/Analysis/RegionInfo.cpp index f59d2673032..6860a3e6395 100644 --- a/gnu/llvm/lib/Analysis/RegionInfo.cpp +++ b/gnu/llvm/lib/Analysis/RegionInfo.cpp @@ -15,12 +15,10 @@ #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/RegionInfoImpl.h" #include "llvm/Analysis/RegionIterator.h" +#include "llvm/IR/PassManager.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" -#include <algorithm> -#include <iterator> -#include <set> #ifndef NDEBUG #include "llvm/Analysis/RegionPrinter.h" #endif @@ -128,8 +126,8 @@ bool RegionInfoPass::runOnFunction(Function &F) { releaseMemory(); auto DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); - auto PDT = &getAnalysis<PostDominatorTree>(); - auto DF = &getAnalysis<DominanceFrontier>(); + auto PDT = &getAnalysis<PostDominatorTreeWrapperPass>().getPostDomTree(); + auto DF = &getAnalysis<DominanceFrontierWrapperPass>().getDominanceFrontier(); RI.recalculate(F, DT, PDT, DF); return false; @@ -146,8 +144,8 @@ void RegionInfoPass::verifyAnalysis() const { void RegionInfoPass::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); AU.addRequiredTransitive<DominatorTreeWrapperPass>(); - AU.addRequired<PostDominatorTree>(); - AU.addRequired<DominanceFrontier>(); + AU.addRequired<PostDominatorTreeWrapperPass>(); + AU.addRequired<DominanceFrontierWrapperPass>(); } void RegionInfoPass::print(raw_ostream &OS, const Module *) const { @@ -155,7 +153,7 @@ void RegionInfoPass::print(raw_ostream &OS, const Module *) const { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void RegionInfoPass::dump() const { +LLVM_DUMP_METHOD void RegionInfoPass::dump() const { RI.dump(); } #endif @@ -165,8 +163,8 @@ char RegionInfoPass::ID = 0; INITIALIZE_PASS_BEGIN(RegionInfoPass, "regions", "Detect single entry single exit regions", true, true) INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) -INITIALIZE_PASS_DEPENDENCY(PostDominatorTree) -INITIALIZE_PASS_DEPENDENCY(DominanceFrontier) +INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass) +INITIALIZE_PASS_DEPENDENCY(DominanceFrontierWrapperPass) INITIALIZE_PASS_END(RegionInfoPass, "regions", "Detect single entry single exit regions", true, true) @@ -180,3 +178,36 @@ namespace llvm { } } +//===----------------------------------------------------------------------===// +// RegionInfoAnalysis implementation +// + +char RegionInfoAnalysis::PassID; + +RegionInfo RegionInfoAnalysis::run(Function &F, AnalysisManager<Function> &AM) { + RegionInfo RI; + auto *DT = &AM.getResult<DominatorTreeAnalysis>(F); + auto *PDT = &AM.getResult<PostDominatorTreeAnalysis>(F); + auto *DF = &AM.getResult<DominanceFrontierAnalysis>(F); + + RI.recalculate(F, DT, PDT, DF); + return RI; +} + +RegionInfoPrinterPass::RegionInfoPrinterPass(raw_ostream &OS) + : OS(OS) {} + +PreservedAnalyses RegionInfoPrinterPass::run(Function &F, + FunctionAnalysisManager &AM) { + OS << "Region Tree for function: " << F.getName() << "\n"; + AM.getResult<RegionInfoAnalysis>(F).print(OS); + + return PreservedAnalyses::all(); +} + +PreservedAnalyses RegionInfoVerifierPass::run(Function &F, + AnalysisManager<Function> &AM) { + AM.getResult<RegionInfoAnalysis>(F).verifyAnalysis(); + + return PreservedAnalyses::all(); +} |
