diff options
author | Adam Nemet <anemet@apple.com> | 2016-07-18 16:29:21 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2016-07-18 16:29:21 +0000 |
commit | 79ac42a5c99135ed6ecf8c011471d42ec5269f6c (patch) | |
tree | 8ab2ecba0ea4f98b783bd8b827fe33852bd8650c /llvm/lib/Analysis/OptimizationDiagnosticInfo.cpp | |
parent | 3beef418734bbde545fe3d7f2e7048d8cb0d319f (diff) | |
download | llvm-79ac42a5c99135ed6ecf8c011471d42ec5269f6c.zip llvm-79ac42a5c99135ed6ecf8c011471d42ec5269f6c.tar.gz llvm-79ac42a5c99135ed6ecf8c011471d42ec5269f6c.tar.bz2 |
[OptRemarkEmitter] Port to new PM
Summary:
The main goal is to able to start using the new OptRemarkEmitter
analysis from the LoopVectorizer. Since the vectorizer was recently
converted to the new PM, it makes sense to convert this analysis as
well.
This pass is currently tested through the LoopDistribution pass, so I am
also porting LoopDistribution to get coverage for this analysis with the
new PM.
Reviewers: davidxl, silvas
Subscribers: llvm-commits, mzolotukhin
Differential Revision: https://reviews.llvm.org/D22436
llvm-svn: 275810
Diffstat (limited to 'llvm/lib/Analysis/OptimizationDiagnosticInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/OptimizationDiagnosticInfo.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/llvm/lib/Analysis/OptimizationDiagnosticInfo.cpp b/llvm/lib/Analysis/OptimizationDiagnosticInfo.cpp index 9a22633..e979ba2 100644 --- a/llvm/lib/Analysis/OptimizationDiagnosticInfo.cpp +++ b/llvm/lib/Analysis/OptimizationDiagnosticInfo.cpp @@ -20,10 +20,6 @@ using namespace llvm; -OptimizationRemarkEmitter::OptimizationRemarkEmitter() : FunctionPass(ID) { - initializeOptimizationRemarkEmitterPass(*PassRegistry::getPassRegistry()); -} - Optional<uint64_t> OptimizationRemarkEmitter::computeHotness(Value *V) { if (!BFI) return None; @@ -43,27 +39,50 @@ void OptimizationRemarkEmitter::emitOptimizationRemarkMissed( emitOptimizationRemarkMissed(PassName, L->getStartLoc(), L->getHeader(), Msg); } -bool OptimizationRemarkEmitter::runOnFunction(Function &Fn) { - F = &Fn; +OptimizationRemarkEmitterWrapperPass::OptimizationRemarkEmitterWrapperPass() + : FunctionPass(ID) { + initializeOptimizationRemarkEmitterWrapperPassPass( + *PassRegistry::getPassRegistry()); +} + +bool OptimizationRemarkEmitterWrapperPass::runOnFunction(Function &Fn) { + BlockFrequencyInfo *BFI; if (Fn.getContext().getDiagnosticHotnessRequested()) BFI = &getAnalysis<LazyBlockFrequencyInfoPass>().getBFI(); else BFI = nullptr; + ORE = llvm::make_unique<OptimizationRemarkEmitter>(&Fn, BFI); return false; } -void OptimizationRemarkEmitter::getAnalysisUsage(AnalysisUsage &AU) const { +void OptimizationRemarkEmitterWrapperPass::getAnalysisUsage( + AnalysisUsage &AU) const { LazyBlockFrequencyInfoPass::getLazyBFIAnalysisUsage(AU); AU.setPreservesAll(); } -char OptimizationRemarkEmitter::ID = 0; +char OptimizationRemarkEmitterAnalysis::PassID; + +OptimizationRemarkEmitter +OptimizationRemarkEmitterAnalysis::run(Function &F, AnalysisManager<Function> &AM) { + BlockFrequencyInfo *BFI; + + if (F.getContext().getDiagnosticHotnessRequested()) + BFI = &AM.getResult<BlockFrequencyAnalysis>(F); + else + BFI = nullptr; + + return OptimizationRemarkEmitter(&F, BFI); +} + +char OptimizationRemarkEmitterWrapperPass::ID = 0; static const char ore_name[] = "Optimization Remark Emitter"; #define ORE_NAME "opt-remark-emitter" -INITIALIZE_PASS_BEGIN(OptimizationRemarkEmitter, ORE_NAME, ore_name, false, - true) +INITIALIZE_PASS_BEGIN(OptimizationRemarkEmitterWrapperPass, ORE_NAME, ore_name, + false, true) INITIALIZE_PASS_DEPENDENCY(LazyBFIPass) -INITIALIZE_PASS_END(OptimizationRemarkEmitter, ORE_NAME, ore_name, false, true) +INITIALIZE_PASS_END(OptimizationRemarkEmitterWrapperPass, ORE_NAME, ore_name, + false, true) |