diff --git a/llvm/lib/CodeGen/EarlyIfConversion.cpp b/llvm/lib/CodeGen/EarlyIfConversion.cpp --- a/llvm/lib/CodeGen/EarlyIfConversion.cpp +++ b/llvm/lib/CodeGen/EarlyIfConversion.cpp @@ -941,6 +941,7 @@ TargetSchedModel SchedModel; MachineRegisterInfo *MRI; MachineDominatorTree *DomTree; + MachineBranchProbabilityInfo *MBPI; MachineLoopInfo *Loops; SSAIfConv IfConv; @@ -966,10 +967,12 @@ 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(); AU.addRequired(); AU.addPreserved(); AU.addRequired(); @@ -979,6 +982,7 @@ /// 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 @@ } return TII->isProfitableToIfCvt(IfBlock, Cycles, ExtraPredCost, - BranchProbability::getUnknown()); + TrueProbability); } unsigned TExtra = 0; unsigned FExtra = 0; @@ -1012,8 +1016,7 @@ 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 @@ SchedModel.init(&STI); DomTree = &getAnalysis(); Loops = getAnalysisIfAvailable(); + MBPI = &getAnalysis(); bool Changed = false; IfConv.runOnMachineFunction(MF);