From: Chandler Carruth Date: Sun, 23 Oct 2011 20:10:34 +0000 (+0000) Subject: Now that we have comparison on probabilities, add some static functions X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=66d847c8ffff5199248fccc10cb27f80c5cf9ebe Now that we have comparison on probabilities, add some static functions to get important constant branch probabilities and use them for finding the best branch out of a set of possibilities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142762 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/BranchProbability.h b/include/llvm/Support/BranchProbability.h index a1e5ceb6255..6b83159de6b 100644 --- a/include/llvm/Support/BranchProbability.h +++ b/include/llvm/Support/BranchProbability.h @@ -39,6 +39,9 @@ public: assert(n <= d && "Probability cannot be bigger than 1!"); } + static BranchProbability getZero() { return BranchProbability(0, 1); } + static BranchProbability getOne() { return BranchProbability(1, 1); } + uint32_t getNumerator() const { return N; } uint32_t getDenominator() const { return D; } diff --git a/lib/CodeGen/MachineBlockPlacement.cpp b/lib/CodeGen/MachineBlockPlacement.cpp index 043a884f6d4..32eb70e21ff 100644 --- a/lib/CodeGen/MachineBlockPlacement.cpp +++ b/lib/CodeGen/MachineBlockPlacement.cpp @@ -287,10 +287,8 @@ void MachineBlockPlacement::mergeSuccessor(MachineBasicBlock *BB, return; // Walk through the successors looking for the highest probability edge. - // FIXME: This is an annoying way to do the comparison, but it's correct. - // Support should be added to BranchProbability to properly compare two. MachineBasicBlock *Successor = 0; - BlockFrequency BestFreq; + BranchProbability BestProb = BranchProbability::getZero(); DEBUG(dbgs() << "Attempting merge from: " << getBlockName(BB) << "\n"); for (MachineBasicBlock::succ_iterator SI = BB->succ_begin(), SE = BB->succ_end(); @@ -298,13 +296,12 @@ void MachineBlockPlacement::mergeSuccessor(MachineBasicBlock *BB, if (BB == *SI || (Filter && !Filter->count(*SI))) continue; - BlockFrequency SuccFreq(BlockFrequency::getEntryFrequency()); - SuccFreq *= MBPI->getEdgeProbability(BB, *SI); - DEBUG(dbgs() << " " << getBlockName(*SI) << " -> " << SuccFreq << "\n"); - if (!Successor || SuccFreq > BestFreq || (!(SuccFreq < BestFreq) && + BranchProbability SuccProb = MBPI->getEdgeProbability(BB, *SI); + DEBUG(dbgs() << " " << getBlockName(*SI) << " -> " << SuccProb << "\n"); + if (!Successor || SuccProb > BestProb || (!(SuccProb < BestProb) && BB->isLayoutSuccessor(*SI))) { Successor = *SI; - BestFreq = SuccFreq; + BestProb = SuccProb; } } if (!Successor)