forked from OSchip/llvm-project
[BranchFolding] Replace MachineBlockFrequencyInfo with MBFIWrapper. NFC.
Differential Revision: http://reviews.llvm.org/D20184 llvm-svn: 271923
This commit is contained in:
parent
0891b6d59b
commit
664b561f01
|
@ -99,8 +99,9 @@ bool BranchFolderPass::runOnMachineFunction(MachineFunction &MF) {
|
|||
// HW that requires structurized CFG.
|
||||
bool EnableTailMerge = !MF.getTarget().requiresStructuredCFG() &&
|
||||
PassConfig->getEnableTailMerge();
|
||||
BranchFolder Folder(EnableTailMerge, /*CommonHoist=*/true,
|
||||
getAnalysis<MachineBlockFrequencyInfo>(),
|
||||
BranchFolder::MBFIWrapper MBBFreqInfo(
|
||||
getAnalysis<MachineBlockFrequencyInfo>());
|
||||
BranchFolder Folder(EnableTailMerge, /*CommonHoist=*/true, MBBFreqInfo,
|
||||
getAnalysis<MachineBranchProbabilityInfo>());
|
||||
return Folder.OptimizeFunction(MF, MF.getSubtarget().getInstrInfo(),
|
||||
MF.getSubtarget().getRegisterInfo(),
|
||||
|
@ -108,7 +109,7 @@ bool BranchFolderPass::runOnMachineFunction(MachineFunction &MF) {
|
|||
}
|
||||
|
||||
BranchFolder::BranchFolder(bool defaultEnableTailMerge, bool CommonHoist,
|
||||
const MachineBlockFrequencyInfo &FreqInfo,
|
||||
MBFIWrapper &FreqInfo,
|
||||
const MachineBranchProbabilityInfo &ProbInfo)
|
||||
: EnableHoistCommonCode(CommonHoist), MBBFreqInfo(FreqInfo),
|
||||
MBPI(ProbInfo) {
|
||||
|
@ -540,6 +541,18 @@ void BranchFolder::MBFIWrapper::setBlockFreq(const MachineBasicBlock *MBB,
|
|||
MergedBBFreq[MBB] = F;
|
||||
}
|
||||
|
||||
raw_ostream &
|
||||
BranchFolder::MBFIWrapper::printBlockFreq(raw_ostream &OS,
|
||||
const MachineBasicBlock *MBB) const {
|
||||
return MBFI.printBlockFreq(OS, getBlockFreq(MBB));
|
||||
}
|
||||
|
||||
raw_ostream &
|
||||
BranchFolder::MBFIWrapper::printBlockFreq(raw_ostream &OS,
|
||||
const BlockFrequency Freq) const {
|
||||
return MBFI.printBlockFreq(OS, Freq);
|
||||
}
|
||||
|
||||
/// CountTerminators - Count the number of terminators in the given
|
||||
/// block and set I to the position of the first non-terminator, if there
|
||||
/// is one, or MBB->end() otherwise.
|
||||
|
|
|
@ -26,8 +26,10 @@ namespace llvm {
|
|||
|
||||
class LLVM_LIBRARY_VISIBILITY BranchFolder {
|
||||
public:
|
||||
class MBFIWrapper;
|
||||
|
||||
explicit BranchFolder(bool defaultEnableTailMerge, bool CommonHoist,
|
||||
const MachineBlockFrequencyInfo &MBFI,
|
||||
MBFIWrapper &MBFI,
|
||||
const MachineBranchProbabilityInfo &MBPI);
|
||||
|
||||
bool OptimizeFunction(MachineFunction &MF,
|
||||
|
@ -98,6 +100,7 @@ namespace llvm {
|
|||
MachineModuleInfo *MMI;
|
||||
RegScavenger *RS;
|
||||
|
||||
public:
|
||||
/// \brief This class keeps track of branch frequencies of newly created
|
||||
/// blocks and tail-merged blocks.
|
||||
class MBFIWrapper {
|
||||
|
@ -105,13 +108,18 @@ namespace llvm {
|
|||
MBFIWrapper(const MachineBlockFrequencyInfo &I) : MBFI(I) {}
|
||||
BlockFrequency getBlockFreq(const MachineBasicBlock *MBB) const;
|
||||
void setBlockFreq(const MachineBasicBlock *MBB, BlockFrequency F);
|
||||
raw_ostream &printBlockFreq(raw_ostream &OS,
|
||||
const MachineBasicBlock *MBB) const;
|
||||
raw_ostream &printBlockFreq(raw_ostream &OS,
|
||||
const BlockFrequency Freq) const;
|
||||
|
||||
private:
|
||||
const MachineBlockFrequencyInfo &MBFI;
|
||||
DenseMap<const MachineBasicBlock *, BlockFrequency> MergedBBFreq;
|
||||
};
|
||||
|
||||
MBFIWrapper MBBFreqInfo;
|
||||
private:
|
||||
MBFIWrapper &MBBFreqInfo;
|
||||
const MachineBranchProbabilityInfo &MBPI;
|
||||
|
||||
bool TailMergeBlocks(MachineFunction &MF);
|
||||
|
|
|
@ -163,7 +163,6 @@ namespace {
|
|||
const TargetLoweringBase *TLI;
|
||||
const TargetInstrInfo *TII;
|
||||
const TargetRegisterInfo *TRI;
|
||||
const MachineBlockFrequencyInfo *MBFI;
|
||||
const MachineBranchProbabilityInfo *MBPI;
|
||||
MachineRegisterInfo *MRI;
|
||||
|
||||
|
@ -291,7 +290,7 @@ bool IfConverter::runOnMachineFunction(MachineFunction &MF) {
|
|||
TLI = ST.getTargetLowering();
|
||||
TII = ST.getInstrInfo();
|
||||
TRI = ST.getRegisterInfo();
|
||||
MBFI = &getAnalysis<MachineBlockFrequencyInfo>();
|
||||
BranchFolder::MBFIWrapper MBFI(getAnalysis<MachineBlockFrequencyInfo>());
|
||||
MBPI = &getAnalysis<MachineBranchProbabilityInfo>();
|
||||
MRI = &MF.getRegInfo();
|
||||
SchedModel.init(ST.getSchedModel(), &ST, TII);
|
||||
|
@ -303,7 +302,7 @@ bool IfConverter::runOnMachineFunction(MachineFunction &MF) {
|
|||
bool BFChange = false;
|
||||
if (!PreRegAlloc) {
|
||||
// Tail merge tend to expose more if-conversion opportunities.
|
||||
BranchFolder BF(true, false, *MBFI, *MBPI);
|
||||
BranchFolder BF(true, false, MBFI, *MBPI);
|
||||
BFChange = BF.OptimizeFunction(MF, TII, ST.getRegisterInfo(),
|
||||
getAnalysisIfAvailable<MachineModuleInfo>());
|
||||
}
|
||||
|
@ -427,7 +426,7 @@ bool IfConverter::runOnMachineFunction(MachineFunction &MF) {
|
|||
BBAnalysis.clear();
|
||||
|
||||
if (MadeChange && IfCvtBranchFold) {
|
||||
BranchFolder BF(false, false, *MBFI, *MBPI);
|
||||
BranchFolder BF(false, false, MBFI, *MBPI);
|
||||
BF.OptimizeFunction(MF, TII, MF.getSubtarget().getRegisterInfo(),
|
||||
getAnalysisIfAvailable<MachineModuleInfo>());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue