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 | |
parent | 751337faa75179b57a315887f9dc6d8166eb0776 (diff) | |
download | bcm5719-llvm-bc53977a0decc0c25d15faccedd81e39da8320cf.tar.gz bcm5719-llvm-bc53977a0decc0c25d15faccedd81e39da8320cf.zip |
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')
-rw-r--r-- | llvm/lib/Analysis/RegionInfo.cpp | 34 | ||||
-rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 1 | ||||
-rw-r--r-- | llvm/lib/Passes/PassRegistry.def | 3 |
3 files changed, 38 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(); +} diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 7d0fe7e681b..93daad7eca0 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -26,6 +26,7 @@ #include "llvm/Analysis/LazyCallGraph.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/PostDominators.h" +#include "llvm/Analysis/RegionInfo.h" #include "llvm/Analysis/ScalarEvolution.h" #include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h" #include "llvm/Analysis/ScopedNoAliasAA.h" diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index 51d9310745e..a7e2b90577c 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -60,6 +60,7 @@ FUNCTION_ANALYSIS("domtree", DominatorTreeAnalysis()) FUNCTION_ANALYSIS("postdomtree", PostDominatorTreeAnalysis()) FUNCTION_ANALYSIS("domfrontier", DominanceFrontierAnalysis()) FUNCTION_ANALYSIS("loops", LoopAnalysis()) +FUNCTION_ANALYSIS("regions", RegionInfoAnalysis()) FUNCTION_ANALYSIS("no-op-function", NoOpFunctionAnalysis()) FUNCTION_ANALYSIS("scalar-evolution", ScalarEvolutionAnalysis()) FUNCTION_ANALYSIS("targetlibinfo", TargetLibraryAnalysis()) @@ -94,11 +95,13 @@ FUNCTION_PASS("print<domtree>", DominatorTreePrinterPass(dbgs())) FUNCTION_PASS("print<postdomtree>", PostDominatorTreePrinterPass(dbgs())) FUNCTION_PASS("print<domfrontier>", DominanceFrontierPrinterPass(dbgs())) FUNCTION_PASS("print<loops>", LoopPrinterPass(dbgs())) +FUNCTION_PASS("print<regions>", RegionInfoPrinterPass(dbgs())) FUNCTION_PASS("print<scalar-evolution>", ScalarEvolutionPrinterPass(dbgs())) FUNCTION_PASS("simplify-cfg", SimplifyCFGPass()) FUNCTION_PASS("sroa", SROA()) FUNCTION_PASS("verify", VerifierPass()) FUNCTION_PASS("verify<domtree>", DominatorTreeVerifierPass()) +FUNCTION_PASS("verify<regions>", RegionInfoVerifierPass()) #undef FUNCTION_PASS #ifndef LOOP_ANALYSIS |