[PM] Remove a failed attempt to port the CallGraph analysis to the new
[oota-llvm.git] / lib / Analysis / BranchProbabilityInfo.cpp
1 //===-- BranchProbabilityInfo.cpp - Branch Probability Analysis -----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Loops should be simplified before this analysis.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Analysis/BranchProbabilityInfo.h"
15 #include "llvm/ADT/PostOrderIterator.h"
16 #include "llvm/Analysis/LoopInfo.h"
17 #include "llvm/IR/CFG.h"
18 #include "llvm/IR/Constants.h"
19 #include "llvm/IR/Function.h"
20 #include "llvm/IR/Instructions.h"
21 #include "llvm/IR/LLVMContext.h"
22 #include "llvm/IR/Metadata.h"
23 #include "llvm/Support/Debug.h"
24 #include "llvm/Support/raw_ostream.h"
25
26 using namespace llvm;
27
28 #define DEBUG_TYPE "branch-prob"
29
30 INITIALIZE_PASS_BEGIN(BranchProbabilityInfoWrapperPass, "branch-prob",
31                       "Branch Probability Analysis", false, true)
32 INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
33 INITIALIZE_PASS_END(BranchProbabilityInfoWrapperPass, "branch-prob",
34                     "Branch Probability Analysis", false, true)
35
36 char BranchProbabilityInfoWrapperPass::ID = 0;
37
38 // Weights are for internal use only. They are used by heuristics to help to
39 // estimate edges' probability. Example:
40 //
41 // Using "Loop Branch Heuristics" we predict weights of edges for the
42 // block BB2.
43 //         ...
44 //          |
45 //          V
46 //         BB1<-+
47 //          |   |
48 //          |   | (Weight = 124)
49 //          V   |
50 //         BB2--+
51 //          |
52 //          | (Weight = 4)
53 //          V
54 //         BB3
55 //
56 // Probability of the edge BB2->BB1 = 124 / (124 + 4) = 0.96875
57 // Probability of the edge BB2->BB3 = 4 / (124 + 4) = 0.03125
58 static const uint32_t LBH_TAKEN_WEIGHT = 124;
59 static const uint32_t LBH_NONTAKEN_WEIGHT = 4;
60
61 /// \brief Unreachable-terminating branch taken weight.
62 ///
63 /// This is the weight for a branch being taken to a block that terminates
64 /// (eventually) in unreachable. These are predicted as unlikely as possible.
65 static const uint32_t UR_TAKEN_WEIGHT = 1;
66
67 /// \brief Unreachable-terminating branch not-taken weight.
68 ///
69 /// This is the weight for a branch not being taken toward a block that
70 /// terminates (eventually) in unreachable. Such a branch is essentially never
71 /// taken. Set the weight to an absurdly high value so that nested loops don't
72 /// easily subsume it.
73 static const uint32_t UR_NONTAKEN_WEIGHT = 1024*1024 - 1;
74
75 /// \brief Weight for a branch taken going into a cold block.
76 ///
77 /// This is the weight for a branch taken toward a block marked
78 /// cold.  A block is marked cold if it's postdominated by a
79 /// block containing a call to a cold function.  Cold functions
80 /// are those marked with attribute 'cold'.
81 static const uint32_t CC_TAKEN_WEIGHT = 4;
82
83 /// \brief Weight for a branch not-taken into a cold block.
84 ///
85 /// This is the weight for a branch not taken toward a block marked
86 /// cold.
87 static const uint32_t CC_NONTAKEN_WEIGHT = 64;
88
89 static const uint32_t PH_TAKEN_WEIGHT = 20;
90 static const uint32_t PH_NONTAKEN_WEIGHT = 12;
91
92 static const uint32_t ZH_TAKEN_WEIGHT = 20;
93 static const uint32_t ZH_NONTAKEN_WEIGHT = 12;
94
95 static const uint32_t FPH_TAKEN_WEIGHT = 20;
96 static const uint32_t FPH_NONTAKEN_WEIGHT = 12;
97
98 /// \brief Invoke-terminating normal branch taken weight
99 ///
100 /// This is the weight for branching to the normal destination of an invoke
101 /// instruction. We expect this to happen most of the time. Set the weight to an
102 /// absurdly high value so that nested loops subsume it.
103 static const uint32_t IH_TAKEN_WEIGHT = 1024 * 1024 - 1;
104
105 /// \brief Invoke-terminating normal branch not-taken weight.
106 ///
107 /// This is the weight for branching to the unwind destination of an invoke
108 /// instruction. This is essentially never taken.
109 static const uint32_t IH_NONTAKEN_WEIGHT = 1;
110
111 // Standard weight value. Used when none of the heuristics set weight for
112 // the edge.
113 static const uint32_t NORMAL_WEIGHT = 16;
114
115 // Minimum weight of an edge. Please note, that weight is NEVER 0.
116 static const uint32_t MIN_WEIGHT = 1;
117
118 /// \brief Calculate edge weights for successors lead to unreachable.
119 ///
120 /// Predict that a successor which leads necessarily to an
121 /// unreachable-terminated block as extremely unlikely.
122 bool BranchProbabilityInfo::calcUnreachableHeuristics(BasicBlock *BB) {
123   TerminatorInst *TI = BB->getTerminator();
124   if (TI->getNumSuccessors() == 0) {
125     if (isa<UnreachableInst>(TI))
126       PostDominatedByUnreachable.insert(BB);
127     return false;
128   }
129
130   SmallVector<unsigned, 4> UnreachableEdges;
131   SmallVector<unsigned, 4> ReachableEdges;
132
133   for (succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
134     if (PostDominatedByUnreachable.count(*I))
135       UnreachableEdges.push_back(I.getSuccessorIndex());
136     else
137       ReachableEdges.push_back(I.getSuccessorIndex());
138   }
139
140   // If all successors are in the set of blocks post-dominated by unreachable,
141   // this block is too.
142   if (UnreachableEdges.size() == TI->getNumSuccessors())
143     PostDominatedByUnreachable.insert(BB);
144
145   // Skip probabilities if this block has a single successor or if all were
146   // reachable.
147   if (TI->getNumSuccessors() == 1 || UnreachableEdges.empty())
148     return false;
149
150   uint32_t UnreachableWeight =
151     std::max(UR_TAKEN_WEIGHT / (unsigned)UnreachableEdges.size(), MIN_WEIGHT);
152   for (SmallVectorImpl<unsigned>::iterator I = UnreachableEdges.begin(),
153                                            E = UnreachableEdges.end();
154        I != E; ++I)
155     setEdgeWeight(BB, *I, UnreachableWeight);
156
157   if (ReachableEdges.empty())
158     return true;
159   uint32_t ReachableWeight =
160     std::max(UR_NONTAKEN_WEIGHT / (unsigned)ReachableEdges.size(),
161              NORMAL_WEIGHT);
162   for (SmallVectorImpl<unsigned>::iterator I = ReachableEdges.begin(),
163                                            E = ReachableEdges.end();
164        I != E; ++I)
165     setEdgeWeight(BB, *I, ReachableWeight);
166
167   return true;
168 }
169
170 // Propagate existing explicit probabilities from either profile data or
171 // 'expect' intrinsic processing.
172 bool BranchProbabilityInfo::calcMetadataWeights(BasicBlock *BB) {
173   TerminatorInst *TI = BB->getTerminator();
174   if (TI->getNumSuccessors() == 1)
175     return false;
176   if (!isa<BranchInst>(TI) && !isa<SwitchInst>(TI))
177     return false;
178
179   MDNode *WeightsNode = TI->getMetadata(LLVMContext::MD_prof);
180   if (!WeightsNode)
181     return false;
182
183   // Check that the number of successors is manageable.
184   assert(TI->getNumSuccessors() < UINT32_MAX && "Too many successors");
185
186   // Ensure there are weights for all of the successors. Note that the first
187   // operand to the metadata node is a name, not a weight.
188   if (WeightsNode->getNumOperands() != TI->getNumSuccessors() + 1)
189     return false;
190
191   // Build up the final weights that will be used in a temporary buffer.
192   // Compute the sum of all weights to later decide whether they need to
193   // be scaled to fit in 32 bits.
194   uint64_t WeightSum = 0;
195   SmallVector<uint32_t, 2> Weights;
196   Weights.reserve(TI->getNumSuccessors());
197   for (unsigned i = 1, e = WeightsNode->getNumOperands(); i != e; ++i) {
198     ConstantInt *Weight =
199         mdconst::dyn_extract<ConstantInt>(WeightsNode->getOperand(i));
200     if (!Weight)
201       return false;
202     assert(Weight->getValue().getActiveBits() <= 32 &&
203            "Too many bits for uint32_t");
204     Weights.push_back(Weight->getZExtValue());
205     WeightSum += Weights.back();
206   }
207   assert(Weights.size() == TI->getNumSuccessors() && "Checked above");
208
209   // If the sum of weights does not fit in 32 bits, scale every weight down
210   // accordingly.
211   uint64_t ScalingFactor =
212       (WeightSum > UINT32_MAX) ? WeightSum / UINT32_MAX + 1 : 1;
213
214   WeightSum = 0;
215   for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) {
216     uint32_t W = Weights[i] / ScalingFactor;
217     WeightSum += W;
218     setEdgeWeight(BB, i, W);
219   }
220   assert(WeightSum <= UINT32_MAX &&
221          "Expected weights to scale down to 32 bits");
222
223   return true;
224 }
225
226 /// \brief Calculate edge weights for edges leading to cold blocks.
227 ///
228 /// A cold block is one post-dominated by  a block with a call to a
229 /// cold function.  Those edges are unlikely to be taken, so we give
230 /// them relatively low weight.
231 ///
232 /// Return true if we could compute the weights for cold edges.
233 /// Return false, otherwise.
234 bool BranchProbabilityInfo::calcColdCallHeuristics(BasicBlock *BB) {
235   TerminatorInst *TI = BB->getTerminator();
236   if (TI->getNumSuccessors() == 0)
237     return false;
238
239   // Determine which successors are post-dominated by a cold block.
240   SmallVector<unsigned, 4> ColdEdges;
241   SmallVector<unsigned, 4> NormalEdges;
242   for (succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I)
243     if (PostDominatedByColdCall.count(*I))
244       ColdEdges.push_back(I.getSuccessorIndex());
245     else
246       NormalEdges.push_back(I.getSuccessorIndex());
247
248   // If all successors are in the set of blocks post-dominated by cold calls,
249   // this block is in the set post-dominated by cold calls.
250   if (ColdEdges.size() == TI->getNumSuccessors())
251     PostDominatedByColdCall.insert(BB);
252   else {
253     // Otherwise, if the block itself contains a cold function, add it to the
254     // set of blocks postdominated by a cold call.
255     assert(!PostDominatedByColdCall.count(BB));
256     for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
257       if (CallInst *CI = dyn_cast<CallInst>(I))
258         if (CI->hasFnAttr(Attribute::Cold)) {
259           PostDominatedByColdCall.insert(BB);
260           break;
261         }
262   }
263
264   // Skip probabilities if this block has a single successor.
265   if (TI->getNumSuccessors() == 1 || ColdEdges.empty())
266     return false;
267
268   uint32_t ColdWeight =
269       std::max(CC_TAKEN_WEIGHT / (unsigned) ColdEdges.size(), MIN_WEIGHT);
270   for (SmallVectorImpl<unsigned>::iterator I = ColdEdges.begin(),
271                                            E = ColdEdges.end();
272        I != E; ++I)
273     setEdgeWeight(BB, *I, ColdWeight);
274
275   if (NormalEdges.empty())
276     return true;
277   uint32_t NormalWeight = std::max(
278       CC_NONTAKEN_WEIGHT / (unsigned) NormalEdges.size(), NORMAL_WEIGHT);
279   for (SmallVectorImpl<unsigned>::iterator I = NormalEdges.begin(),
280                                            E = NormalEdges.end();
281        I != E; ++I)
282     setEdgeWeight(BB, *I, NormalWeight);
283
284   return true;
285 }
286
287 // Calculate Edge Weights using "Pointer Heuristics". Predict a comparsion
288 // between two pointer or pointer and NULL will fail.
289 bool BranchProbabilityInfo::calcPointerHeuristics(BasicBlock *BB) {
290   BranchInst * BI = dyn_cast<BranchInst>(BB->getTerminator());
291   if (!BI || !BI->isConditional())
292     return false;
293
294   Value *Cond = BI->getCondition();
295   ICmpInst *CI = dyn_cast<ICmpInst>(Cond);
296   if (!CI || !CI->isEquality())
297     return false;
298
299   Value *LHS = CI->getOperand(0);
300
301   if (!LHS->getType()->isPointerTy())
302     return false;
303
304   assert(CI->getOperand(1)->getType()->isPointerTy());
305
306   // p != 0   ->   isProb = true
307   // p == 0   ->   isProb = false
308   // p != q   ->   isProb = true
309   // p == q   ->   isProb = false;
310   unsigned TakenIdx = 0, NonTakenIdx = 1;
311   bool isProb = CI->getPredicate() == ICmpInst::ICMP_NE;
312   if (!isProb)
313     std::swap(TakenIdx, NonTakenIdx);
314
315   setEdgeWeight(BB, TakenIdx, PH_TAKEN_WEIGHT);
316   setEdgeWeight(BB, NonTakenIdx, PH_NONTAKEN_WEIGHT);
317   return true;
318 }
319
320 // Calculate Edge Weights using "Loop Branch Heuristics". Predict backedges
321 // as taken, exiting edges as not-taken.
322 bool BranchProbabilityInfo::calcLoopBranchHeuristics(BasicBlock *BB,
323                                                      const LoopInfo &LI) {
324   Loop *L = LI.getLoopFor(BB);
325   if (!L)
326     return false;
327
328   SmallVector<unsigned, 8> BackEdges;
329   SmallVector<unsigned, 8> ExitingEdges;
330   SmallVector<unsigned, 8> InEdges; // Edges from header to the loop.
331
332   for (succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
333     if (!L->contains(*I))
334       ExitingEdges.push_back(I.getSuccessorIndex());
335     else if (L->getHeader() == *I)
336       BackEdges.push_back(I.getSuccessorIndex());
337     else
338       InEdges.push_back(I.getSuccessorIndex());
339   }
340
341   if (BackEdges.empty() && ExitingEdges.empty())
342     return false;
343
344   if (uint32_t numBackEdges = BackEdges.size()) {
345     uint32_t backWeight = LBH_TAKEN_WEIGHT / numBackEdges;
346     if (backWeight < NORMAL_WEIGHT)
347       backWeight = NORMAL_WEIGHT;
348
349     for (SmallVectorImpl<unsigned>::iterator EI = BackEdges.begin(),
350          EE = BackEdges.end(); EI != EE; ++EI) {
351       setEdgeWeight(BB, *EI, backWeight);
352     }
353   }
354
355   if (uint32_t numInEdges = InEdges.size()) {
356     uint32_t inWeight = LBH_TAKEN_WEIGHT / numInEdges;
357     if (inWeight < NORMAL_WEIGHT)
358       inWeight = NORMAL_WEIGHT;
359
360     for (SmallVectorImpl<unsigned>::iterator EI = InEdges.begin(),
361          EE = InEdges.end(); EI != EE; ++EI) {
362       setEdgeWeight(BB, *EI, inWeight);
363     }
364   }
365
366   if (uint32_t numExitingEdges = ExitingEdges.size()) {
367     uint32_t exitWeight = LBH_NONTAKEN_WEIGHT / numExitingEdges;
368     if (exitWeight < MIN_WEIGHT)
369       exitWeight = MIN_WEIGHT;
370
371     for (SmallVectorImpl<unsigned>::iterator EI = ExitingEdges.begin(),
372          EE = ExitingEdges.end(); EI != EE; ++EI) {
373       setEdgeWeight(BB, *EI, exitWeight);
374     }
375   }
376
377   return true;
378 }
379
380 bool BranchProbabilityInfo::calcZeroHeuristics(BasicBlock *BB) {
381   BranchInst * BI = dyn_cast<BranchInst>(BB->getTerminator());
382   if (!BI || !BI->isConditional())
383     return false;
384
385   Value *Cond = BI->getCondition();
386   ICmpInst *CI = dyn_cast<ICmpInst>(Cond);
387   if (!CI)
388     return false;
389
390   Value *RHS = CI->getOperand(1);
391   ConstantInt *CV = dyn_cast<ConstantInt>(RHS);
392   if (!CV)
393     return false;
394
395   // If the LHS is the result of AND'ing a value with a single bit bitmask,
396   // we don't have information about probabilities.
397   if (Instruction *LHS = dyn_cast<Instruction>(CI->getOperand(0)))
398     if (LHS->getOpcode() == Instruction::And)
399       if (ConstantInt *AndRHS = dyn_cast<ConstantInt>(LHS->getOperand(1)))
400         if (AndRHS->getUniqueInteger().isPowerOf2())
401           return false;
402
403   bool isProb;
404   if (CV->isZero()) {
405     switch (CI->getPredicate()) {
406     case CmpInst::ICMP_EQ:
407       // X == 0   ->  Unlikely
408       isProb = false;
409       break;
410     case CmpInst::ICMP_NE:
411       // X != 0   ->  Likely
412       isProb = true;
413       break;
414     case CmpInst::ICMP_SLT:
415       // X < 0   ->  Unlikely
416       isProb = false;
417       break;
418     case CmpInst::ICMP_SGT:
419       // X > 0   ->  Likely
420       isProb = true;
421       break;
422     default:
423       return false;
424     }
425   } else if (CV->isOne() && CI->getPredicate() == CmpInst::ICMP_SLT) {
426     // InstCombine canonicalizes X <= 0 into X < 1.
427     // X <= 0   ->  Unlikely
428     isProb = false;
429   } else if (CV->isAllOnesValue()) {
430     switch (CI->getPredicate()) {
431     case CmpInst::ICMP_EQ:
432       // X == -1  ->  Unlikely
433       isProb = false;
434       break;
435     case CmpInst::ICMP_NE:
436       // X != -1  ->  Likely
437       isProb = true;
438       break;
439     case CmpInst::ICMP_SGT:
440       // InstCombine canonicalizes X >= 0 into X > -1.
441       // X >= 0   ->  Likely
442       isProb = true;
443       break;
444     default:
445       return false;
446     }
447   } else {
448     return false;
449   }
450
451   unsigned TakenIdx = 0, NonTakenIdx = 1;
452
453   if (!isProb)
454     std::swap(TakenIdx, NonTakenIdx);
455
456   setEdgeWeight(BB, TakenIdx, ZH_TAKEN_WEIGHT);
457   setEdgeWeight(BB, NonTakenIdx, ZH_NONTAKEN_WEIGHT);
458
459   return true;
460 }
461
462 bool BranchProbabilityInfo::calcFloatingPointHeuristics(BasicBlock *BB) {
463   BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
464   if (!BI || !BI->isConditional())
465     return false;
466
467   Value *Cond = BI->getCondition();
468   FCmpInst *FCmp = dyn_cast<FCmpInst>(Cond);
469   if (!FCmp)
470     return false;
471
472   bool isProb;
473   if (FCmp->isEquality()) {
474     // f1 == f2 -> Unlikely
475     // f1 != f2 -> Likely
476     isProb = !FCmp->isTrueWhenEqual();
477   } else if (FCmp->getPredicate() == FCmpInst::FCMP_ORD) {
478     // !isnan -> Likely
479     isProb = true;
480   } else if (FCmp->getPredicate() == FCmpInst::FCMP_UNO) {
481     // isnan -> Unlikely
482     isProb = false;
483   } else {
484     return false;
485   }
486
487   unsigned TakenIdx = 0, NonTakenIdx = 1;
488
489   if (!isProb)
490     std::swap(TakenIdx, NonTakenIdx);
491
492   setEdgeWeight(BB, TakenIdx, FPH_TAKEN_WEIGHT);
493   setEdgeWeight(BB, NonTakenIdx, FPH_NONTAKEN_WEIGHT);
494
495   return true;
496 }
497
498 bool BranchProbabilityInfo::calcInvokeHeuristics(BasicBlock *BB) {
499   InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator());
500   if (!II)
501     return false;
502
503   setEdgeWeight(BB, 0/*Index for Normal*/, IH_TAKEN_WEIGHT);
504   setEdgeWeight(BB, 1/*Index for Unwind*/, IH_NONTAKEN_WEIGHT);
505   return true;
506 }
507
508 void BranchProbabilityInfo::releaseMemory() {
509   Weights.clear();
510 }
511
512 void BranchProbabilityInfo::print(raw_ostream &OS) const {
513   OS << "---- Branch Probabilities ----\n";
514   // We print the probabilities from the last function the analysis ran over,
515   // or the function it is currently running over.
516   assert(LastF && "Cannot print prior to running over a function");
517   for (Function::const_iterator BI = LastF->begin(), BE = LastF->end();
518        BI != BE; ++BI) {
519     for (succ_const_iterator SI = succ_begin(BI), SE = succ_end(BI);
520          SI != SE; ++SI) {
521       printEdgeProbability(OS << "  ", BI, *SI);
522     }
523   }
524 }
525
526 uint32_t BranchProbabilityInfo::getSumForBlock(const BasicBlock *BB) const {
527   uint32_t Sum = 0;
528
529   for (succ_const_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
530     uint32_t Weight = getEdgeWeight(BB, I.getSuccessorIndex());
531     uint32_t PrevSum = Sum;
532
533     Sum += Weight;
534     assert(Sum >= PrevSum); (void) PrevSum;
535   }
536
537   return Sum;
538 }
539
540 bool BranchProbabilityInfo::
541 isEdgeHot(const BasicBlock *Src, const BasicBlock *Dst) const {
542   // Hot probability is at least 4/5 = 80%
543   // FIXME: Compare against a static "hot" BranchProbability.
544   return getEdgeProbability(Src, Dst) > BranchProbability(4, 5);
545 }
546
547 BasicBlock *BranchProbabilityInfo::getHotSucc(BasicBlock *BB) const {
548   uint32_t Sum = 0;
549   uint32_t MaxWeight = 0;
550   BasicBlock *MaxSucc = nullptr;
551
552   for (succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
553     BasicBlock *Succ = *I;
554     uint32_t Weight = getEdgeWeight(BB, Succ);
555     uint32_t PrevSum = Sum;
556
557     Sum += Weight;
558     assert(Sum > PrevSum); (void) PrevSum;
559
560     if (Weight > MaxWeight) {
561       MaxWeight = Weight;
562       MaxSucc = Succ;
563     }
564   }
565
566   // Hot probability is at least 4/5 = 80%
567   if (BranchProbability(MaxWeight, Sum) > BranchProbability(4, 5))
568     return MaxSucc;
569
570   return nullptr;
571 }
572
573 /// Get the raw edge weight for the edge. If can't find it, return
574 /// DEFAULT_WEIGHT value. Here an edge is specified using PredBlock and an index
575 /// to the successors.
576 uint32_t BranchProbabilityInfo::
577 getEdgeWeight(const BasicBlock *Src, unsigned IndexInSuccessors) const {
578   DenseMap<Edge, uint32_t>::const_iterator I =
579       Weights.find(std::make_pair(Src, IndexInSuccessors));
580
581   if (I != Weights.end())
582     return I->second;
583
584   return DEFAULT_WEIGHT;
585 }
586
587 uint32_t BranchProbabilityInfo::getEdgeWeight(const BasicBlock *Src,
588                                               succ_const_iterator Dst) const {
589   return getEdgeWeight(Src, Dst.getSuccessorIndex());
590 }
591
592 /// Get the raw edge weight calculated for the block pair. This returns the sum
593 /// of all raw edge weights from Src to Dst.
594 uint32_t BranchProbabilityInfo::
595 getEdgeWeight(const BasicBlock *Src, const BasicBlock *Dst) const {
596   uint32_t Weight = 0;
597   bool FoundWeight = false;
598   DenseMap<Edge, uint32_t>::const_iterator MapI;
599   for (succ_const_iterator I = succ_begin(Src), E = succ_end(Src); I != E; ++I)
600     if (*I == Dst) {
601       MapI = Weights.find(std::make_pair(Src, I.getSuccessorIndex()));
602       if (MapI != Weights.end()) {
603         FoundWeight = true;
604         Weight += MapI->second;
605       }
606     }
607   return (!FoundWeight) ? DEFAULT_WEIGHT : Weight;
608 }
609
610 /// Set the edge weight for a given edge specified by PredBlock and an index
611 /// to the successors.
612 void BranchProbabilityInfo::
613 setEdgeWeight(const BasicBlock *Src, unsigned IndexInSuccessors,
614               uint32_t Weight) {
615   Weights[std::make_pair(Src, IndexInSuccessors)] = Weight;
616   DEBUG(dbgs() << "set edge " << Src->getName() << " -> "
617                << IndexInSuccessors << " successor weight to "
618                << Weight << "\n");
619 }
620
621 /// Get an edge's probability, relative to other out-edges from Src.
622 BranchProbability BranchProbabilityInfo::
623 getEdgeProbability(const BasicBlock *Src, unsigned IndexInSuccessors) const {
624   uint32_t N = getEdgeWeight(Src, IndexInSuccessors);
625   uint32_t D = getSumForBlock(Src);
626
627   return BranchProbability(N, D);
628 }
629
630 /// Get the probability of going from Src to Dst. It returns the sum of all
631 /// probabilities for edges from Src to Dst.
632 BranchProbability BranchProbabilityInfo::
633 getEdgeProbability(const BasicBlock *Src, const BasicBlock *Dst) const {
634
635   uint32_t N = getEdgeWeight(Src, Dst);
636   uint32_t D = getSumForBlock(Src);
637
638   return BranchProbability(N, D);
639 }
640
641 raw_ostream &
642 BranchProbabilityInfo::printEdgeProbability(raw_ostream &OS,
643                                             const BasicBlock *Src,
644                                             const BasicBlock *Dst) const {
645
646   const BranchProbability Prob = getEdgeProbability(Src, Dst);
647   OS << "edge " << Src->getName() << " -> " << Dst->getName()
648      << " probability is " << Prob
649      << (isEdgeHot(Src, Dst) ? " [HOT edge]\n" : "\n");
650
651   return OS;
652 }
653
654 void BranchProbabilityInfo::calculate(Function &F, const LoopInfo& LI) {
655   DEBUG(dbgs() << "---- Branch Probability Info : " << F.getName()
656                << " ----\n\n");
657   LastF = &F; // Store the last function we ran on for printing.
658   assert(PostDominatedByUnreachable.empty());
659   assert(PostDominatedByColdCall.empty());
660
661   // Walk the basic blocks in post-order so that we can build up state about
662   // the successors of a block iteratively.
663   for (auto BB : post_order(&F.getEntryBlock())) {
664     DEBUG(dbgs() << "Computing probabilities for " << BB->getName() << "\n");
665     if (calcUnreachableHeuristics(BB))
666       continue;
667     if (calcMetadataWeights(BB))
668       continue;
669     if (calcColdCallHeuristics(BB))
670       continue;
671     if (calcLoopBranchHeuristics(BB, LI))
672       continue;
673     if (calcPointerHeuristics(BB))
674       continue;
675     if (calcZeroHeuristics(BB))
676       continue;
677     if (calcFloatingPointHeuristics(BB))
678       continue;
679     calcInvokeHeuristics(BB);
680   }
681
682   PostDominatedByUnreachable.clear();
683   PostDominatedByColdCall.clear();
684 }
685
686 void BranchProbabilityInfoWrapperPass::getAnalysisUsage(
687     AnalysisUsage &AU) const {
688   AU.addRequired<LoopInfoWrapperPass>();
689   AU.setPreservesAll();
690 }
691
692 bool BranchProbabilityInfoWrapperPass::runOnFunction(Function &F) {
693   const LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
694   BPI.calculate(F, LI);
695   return false;
696 }
697
698 void BranchProbabilityInfoWrapperPass::releaseMemory() { BPI.releaseMemory(); }
699
700 void BranchProbabilityInfoWrapperPass::print(raw_ostream &OS,
701                                              const Module *) const {
702   BPI.print(OS);
703 }