Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC

Differential Revision: http://reviews.llvm.org/D17571

llvm-svn: 261904
This commit is contained in:
Hongbin Zheng
2016-02-25 17:54:25 +00:00
parent 751337faa7
commit bc53977a0d
22 changed files with 149 additions and 0 deletions

View File

@@ -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();
}