diff options
author | Adam Nemet <anemet@apple.com> | 2017-02-14 17:21:09 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2017-02-14 17:21:09 +0000 |
commit | bbb141c734d7dff41e1c41919362aa6f041e26cf (patch) | |
tree | fa67fe12770fcee2b5c2be0fbc8a6306825ed0f8 /llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp | |
parent | 24984e1238f507c7a6770283a855dced341552c8 (diff) | |
download | bcm5719-llvm-bbb141c734d7dff41e1c41919362aa6f041e26cf.tar.gz bcm5719-llvm-bbb141c734d7dff41e1c41919362aa6f041e26cf.zip |
Add new pass LazyMachineBlockFrequencyInfo
And use it in MachineOptimizationRemarkEmitter. A test will follow on top of
Justin's changes to enable MachineORE in AsmPrinter.
The approach is similar to the IR-level pass. It's a bit simpler because BPI
is immutable at the Machine level so we don't need to make that lazy.
Because of this, a new function mapping is introduced (BPIPassTrait::getBPI).
This function extracts BPI from the pass. In case of the lazy pass, this is
when the calculation of the BFI occurs. For Machine-level, this is the
identity function.
Differential Revision: https://reviews.llvm.org/D29836
llvm-svn: 295072
Diffstat (limited to 'llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp b/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp new file mode 100644 index 00000000000..34611f8064d --- /dev/null +++ b/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp @@ -0,0 +1,74 @@ +///===- LazyMachineBlockFrequencyInfo.cpp - Lazy Machine Block Frequency --===// +/// +/// The LLVM Compiler Infrastructure +/// +/// This file is distributed under the University of Illinois Open Source +/// License. See LICENSE.TXT for details. +/// +///===---------------------------------------------------------------------===// +/// \file +/// This is an alternative analysis pass to MachineBlockFrequencyInfo. The +/// difference is that with this pass the block frequencies are not computed +/// when the analysis pass is executed but rather when the BFI result is +/// explicitly requested by the analysis client. +/// +///===---------------------------------------------------------------------===// + +#include "llvm/CodeGen/LazyMachineBlockFrequencyInfo.h" + +using namespace llvm; + +#define DEBUG_TYPE "lazy-machine-block-freq" + +INITIALIZE_PASS_BEGIN(LazyMachineBlockFrequencyInfoPass, DEBUG_TYPE, + "Lazy Machine Block Frequency Analysis", true, true) +INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo) +INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo) +INITIALIZE_PASS_END(LazyMachineBlockFrequencyInfoPass, DEBUG_TYPE, + "Lazy Machine Block Frequency Analysis", true, true) + +char LazyMachineBlockFrequencyInfoPass::ID = 0; + +LazyMachineBlockFrequencyInfoPass::LazyMachineBlockFrequencyInfoPass() + : MachineFunctionPass(ID) { + initializeLazyMachineBlockFrequencyInfoPassPass( + *PassRegistry::getPassRegistry()); +} + +void LazyMachineBlockFrequencyInfoPass::print(raw_ostream &OS, + const Module *M) const { + LMBFI.getCalculated().print(OS, M); +} + +void LazyMachineBlockFrequencyInfoPass::getAnalysisUsage( + AnalysisUsage &AU) const { + AU.addRequired<MachineBranchProbabilityInfo>(); + AU.addRequired<MachineLoopInfo>(); + AU.setPreservesAll(); + MachineFunctionPass::getAnalysisUsage(AU); +} + +void LazyMachineBlockFrequencyInfoPass::releaseMemory() { + LMBFI.releaseMemory(); +} + +bool LazyMachineBlockFrequencyInfoPass::runOnMachineFunction( + MachineFunction &MF) { + auto &BPIPass = getAnalysis<MachineBranchProbabilityInfo>(); + auto &LI = getAnalysis<MachineLoopInfo>(); + LMBFI.setAnalysis(&MF, &BPIPass, &LI); + return false; +} + +void LazyMachineBlockFrequencyInfoPass::getLazyMachineBFIAnalysisUsage( + AnalysisUsage &AU) { + AU.addRequired<LazyMachineBlockFrequencyInfoPass>(); + AU.addRequired<MachineBranchProbabilityInfo>(); + AU.addRequired<MachineLoopInfo>(); +} + +void llvm::initializeLazyMachineBFIPassPass(PassRegistry &Registry) { + INITIALIZE_PASS_DEPENDENCY(LazyMachineBlockFrequencyInfoPass); + INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo); + INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo); +} |