diff options
-rw-r--r-- | llvm/lib/CodeGen/EarlyIfConversion.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/EarlyIfConversion.cpp b/llvm/lib/CodeGen/EarlyIfConversion.cpp index 92bd9d1df37..d45e424184d 100644 --- a/llvm/lib/CodeGen/EarlyIfConversion.cpp +++ b/llvm/lib/CodeGen/EarlyIfConversion.cpp @@ -941,6 +941,7 @@ class EarlyIfPredicator : public MachineFunctionPass { TargetSchedModel SchedModel; MachineRegisterInfo *MRI; MachineDominatorTree *DomTree; + MachineBranchProbabilityInfo *MBPI; MachineLoopInfo *Loops; SSAIfConv IfConv; @@ -966,10 +967,12 @@ char &llvm::EarlyIfPredicatorID = EarlyIfPredicator::ID; INITIALIZE_PASS_BEGIN(EarlyIfPredicator, DEBUG_TYPE, "Early If Predicator", false, false) INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree) +INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo) INITIALIZE_PASS_END(EarlyIfPredicator, DEBUG_TYPE, "Early If Predicator", false, false) void EarlyIfPredicator::getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired<MachineBranchProbabilityInfo>(); AU.addRequired<MachineDominatorTree>(); AU.addPreserved<MachineDominatorTree>(); AU.addRequired<MachineLoopInfo>(); @@ -979,6 +982,7 @@ void EarlyIfPredicator::getAnalysisUsage(AnalysisUsage &AU) const { /// Apply the target heuristic to decide if the transformation is profitable. bool EarlyIfPredicator::shouldConvertIf() { + auto TrueProbability = MBPI->getEdgeProbability(IfConv.Head, IfConv.TBB); if (IfConv.isTriangle()) { MachineBasicBlock &IfBlock = (IfConv.TBB == IfConv.Tail) ? *IfConv.FBB : *IfConv.TBB; @@ -993,7 +997,7 @@ bool EarlyIfPredicator::shouldConvertIf() { } return TII->isProfitableToIfCvt(IfBlock, Cycles, ExtraPredCost, - BranchProbability::getUnknown()); + TrueProbability); } unsigned TExtra = 0; unsigned FExtra = 0; @@ -1012,8 +1016,7 @@ bool EarlyIfPredicator::shouldConvertIf() { FExtra += TII->getPredicationCost(I); } return TII->isProfitableToIfCvt(*IfConv.TBB, TCycle, TExtra, *IfConv.FBB, - FCycle, FExtra, - BranchProbability::getUnknown()); + FCycle, FExtra, TrueProbability); } /// Attempt repeated if-conversion on MBB, return true if successful. @@ -1044,6 +1047,7 @@ bool EarlyIfPredicator::runOnMachineFunction(MachineFunction &MF) { SchedModel.init(&STI); DomTree = &getAnalysis<MachineDominatorTree>(); Loops = getAnalysisIfAvailable<MachineLoopInfo>(); + MBPI = &getAnalysis<MachineBranchProbabilityInfo>(); bool Changed = false; IfConv.runOnMachineFunction(MF); |