diff options
author | Hongbin Zheng <etherzhhb@gmail.com> | 2016-02-25 17:54:25 +0000 |
---|---|---|
committer | Hongbin Zheng <etherzhhb@gmail.com> | 2016-02-25 17:54:25 +0000 |
commit | bc53977a0decc0c25d15faccedd81e39da8320cf (patch) | |
tree | 3635c57cc4f607e923252260946e641f5635cff4 /llvm/lib/Analysis/RegionInfo.cpp | |
parent | 751337faa75179b57a315887f9dc6d8166eb0776 (diff) | |
download | llvm-bc53977a0decc0c25d15faccedd81e39da8320cf.zip llvm-bc53977a0decc0c25d15faccedd81e39da8320cf.tar.gz llvm-bc53977a0decc0c25d15faccedd81e39da8320cf.tar.bz2 |
Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC
Differential Revision: http://reviews.llvm.org/D17571
llvm-svn: 261904
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 b4ba5af..72b3217 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(); +} |