summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/RegionInfo.cpp
diff options
context:
space:
mode:
authorHongbin Zheng <etherzhhb@gmail.com>2016-02-25 16:33:26 +0000
committerHongbin Zheng <etherzhhb@gmail.com>2016-02-25 16:33:26 +0000
commit2fa386fd6c29d3bc7ac38985e32821cd4b133fb2 (patch)
tree676cc315bb15f33fad7196e2b37fe20c6a060e83 /llvm/lib/Analysis/RegionInfo.cpp
parent237197ba632987e109bce87dc49e2d85ebd6d408 (diff)
downloadbcm5719-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.cpp34
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();
+}
OpenPOWER on IntegriCloud