diff options
author | Hongbin Zheng <etherzhhb@gmail.com> | 2016-02-25 16:33:26 +0000 |
---|---|---|
committer | Hongbin Zheng <etherzhhb@gmail.com> | 2016-02-25 16:33:26 +0000 |
commit | 2fa386fd6c29d3bc7ac38985e32821cd4b133fb2 (patch) | |
tree | 676cc315bb15f33fad7196e2b37fe20c6a060e83 /llvm/lib/Analysis/RegionInfo.cpp | |
parent | 237197ba632987e109bce87dc49e2d85ebd6d408 (diff) | |
download | bcm5719-llvm-2fa386fd6c29d3bc7ac38985e32821cd4b133fb2.tar.gz bcm5719-llvm-2fa386fd6c29d3bc7ac38985e32821cd4b133fb2.zip |
Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC
Differential Revision: http://reviews.llvm.org/D17571
llvm-svn: 261884
Diffstat (limited to 'llvm/lib/Analysis/RegionInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/RegionInfo.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/RegionInfo.cpp b/llvm/lib/Analysis/RegionInfo.cpp index b4ba5af099f..72b3217dc6f 100644 --- a/llvm/lib/Analysis/RegionInfo.cpp +++ b/llvm/lib/Analysis/RegionInfo.cpp @@ -15,6 +15,7 @@ #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" @@ -180,3 +181,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(); +} |