]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Analysis/BranchProbabilityInfo.cpp
Merge compiler-rt trunk r321414 to contrib/compiler-rt.
[FreeBSD/FreeBSD.git] / contrib / llvm / 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/ADT/SCCIterator.h"
17 #include "llvm/ADT/STLExtras.h"
18 #include "llvm/ADT/SmallVector.h"
19 #include "llvm/Analysis/LoopInfo.h"
20 #include "llvm/Analysis/TargetLibraryInfo.h"
21 #include "llvm/IR/Attributes.h"
22 #include "llvm/IR/BasicBlock.h"
23 #include "llvm/IR/CFG.h"
24 #include "llvm/IR/Constants.h"
25 #include "llvm/IR/Function.h"
26 #include "llvm/IR/InstrTypes.h"
27 #include "llvm/IR/Instruction.h"
28 #include "llvm/IR/Instructions.h"
29 #include "llvm/IR/LLVMContext.h"
30 #include "llvm/IR/Metadata.h"
31 #include "llvm/IR/PassManager.h"
32 #include "llvm/IR/Type.h"
33 #include "llvm/IR/Value.h"
34 #include "llvm/Pass.h"
35 #include "llvm/Support/BranchProbability.h"
36 #include "llvm/Support/Casting.h"
37 #include "llvm/Support/Debug.h"
38 #include "llvm/Support/raw_ostream.h"
39 #include <cassert>
40 #include <cstdint>
41 #include <iterator>
42 #include <utility>
43
44 using namespace llvm;
45
46 #define DEBUG_TYPE "branch-prob"
47
48 static cl::opt<bool> PrintBranchProb(
49     "print-bpi", cl::init(false), cl::Hidden,
50     cl::desc("Print the branch probability info."));
51
52 cl::opt<std::string> PrintBranchProbFuncName(
53     "print-bpi-func-name", cl::Hidden,
54     cl::desc("The option to specify the name of the function "
55              "whose branch probability info is printed."));
56
57 INITIALIZE_PASS_BEGIN(BranchProbabilityInfoWrapperPass, "branch-prob",
58                       "Branch Probability Analysis", false, true)
59 INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
60 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
61 INITIALIZE_PASS_END(BranchProbabilityInfoWrapperPass, "branch-prob",
62                     "Branch Probability Analysis", false, true)
63
64 char BranchProbabilityInfoWrapperPass::ID = 0;
65
66 // Weights are for internal use only. They are used by heuristics to help to
67 // estimate edges' probability. Example:
68 //
69 // Using "Loop Branch Heuristics" we predict weights of edges for the
70 // block BB2.
71 //         ...
72 //          |
73 //          V
74 //         BB1<-+
75 //          |   |
76 //          |   | (Weight = 124)
77 //          V   |
78 //         BB2--+
79 //          |
80 //          | (Weight = 4)
81 //          V
82 //         BB3
83 //
84 // Probability of the edge BB2->BB1 = 124 / (124 + 4) = 0.96875
85 // Probability of the edge BB2->BB3 = 4 / (124 + 4) = 0.03125
86 static const uint32_t LBH_TAKEN_WEIGHT = 124;
87 static const uint32_t LBH_NONTAKEN_WEIGHT = 4;
88
89 /// \brief Unreachable-terminating branch taken probability.
90 ///
91 /// This is the probability for a branch being taken to a block that terminates
92 /// (eventually) in unreachable. These are predicted as unlikely as possible.
93 /// All reachable probability will equally share the remaining part.
94 static const BranchProbability UR_TAKEN_PROB = BranchProbability::getRaw(1);
95
96 /// \brief Weight for a branch taken going into a cold block.
97 ///
98 /// This is the weight for a branch taken toward a block marked
99 /// cold.  A block is marked cold if it's postdominated by a
100 /// block containing a call to a cold function.  Cold functions
101 /// are those marked with attribute 'cold'.
102 static const uint32_t CC_TAKEN_WEIGHT = 4;
103
104 /// \brief Weight for a branch not-taken into a cold block.
105 ///
106 /// This is the weight for a branch not taken toward a block marked
107 /// cold.
108 static const uint32_t CC_NONTAKEN_WEIGHT = 64;
109
110 static const uint32_t PH_TAKEN_WEIGHT = 20;
111 static const uint32_t PH_NONTAKEN_WEIGHT = 12;
112
113 static const uint32_t ZH_TAKEN_WEIGHT = 20;
114 static const uint32_t ZH_NONTAKEN_WEIGHT = 12;
115
116 static const uint32_t FPH_TAKEN_WEIGHT = 20;
117 static const uint32_t FPH_NONTAKEN_WEIGHT = 12;
118
119 /// \brief Invoke-terminating normal branch taken weight
120 ///
121 /// This is the weight for branching to the normal destination of an invoke
122 /// instruction. We expect this to happen most of the time. Set the weight to an
123 /// absurdly high value so that nested loops subsume it.
124 static const uint32_t IH_TAKEN_WEIGHT = 1024 * 1024 - 1;
125
126 /// \brief Invoke-terminating normal branch not-taken weight.
127 ///
128 /// This is the weight for branching to the unwind destination of an invoke
129 /// instruction. This is essentially never taken.
130 static const uint32_t IH_NONTAKEN_WEIGHT = 1;
131
132 /// \brief Add \p BB to PostDominatedByUnreachable set if applicable.
133 void
134 BranchProbabilityInfo::updatePostDominatedByUnreachable(const BasicBlock *BB) {
135   const TerminatorInst *TI = BB->getTerminator();
136   if (TI->getNumSuccessors() == 0) {
137     if (isa<UnreachableInst>(TI) ||
138         // If this block is terminated by a call to
139         // @llvm.experimental.deoptimize then treat it like an unreachable since
140         // the @llvm.experimental.deoptimize call is expected to practically
141         // never execute.
142         BB->getTerminatingDeoptimizeCall())
143       PostDominatedByUnreachable.insert(BB);
144     return;
145   }
146
147   // If the terminator is an InvokeInst, check only the normal destination block
148   // as the unwind edge of InvokeInst is also very unlikely taken.
149   if (auto *II = dyn_cast<InvokeInst>(TI)) {
150     if (PostDominatedByUnreachable.count(II->getNormalDest()))
151       PostDominatedByUnreachable.insert(BB);
152     return;
153   }
154
155   for (auto *I : successors(BB))
156     // If any of successor is not post dominated then BB is also not.
157     if (!PostDominatedByUnreachable.count(I))
158       return;
159
160   PostDominatedByUnreachable.insert(BB);
161 }
162
163 /// \brief Add \p BB to PostDominatedByColdCall set if applicable.
164 void
165 BranchProbabilityInfo::updatePostDominatedByColdCall(const BasicBlock *BB) {
166   assert(!PostDominatedByColdCall.count(BB));
167   const TerminatorInst *TI = BB->getTerminator();
168   if (TI->getNumSuccessors() == 0)
169     return;
170
171   // If all of successor are post dominated then BB is also done.
172   if (llvm::all_of(successors(BB), [&](const BasicBlock *SuccBB) {
173         return PostDominatedByColdCall.count(SuccBB);
174       })) {
175     PostDominatedByColdCall.insert(BB);
176     return;
177   }
178
179   // If the terminator is an InvokeInst, check only the normal destination
180   // block as the unwind edge of InvokeInst is also very unlikely taken.
181   if (auto *II = dyn_cast<InvokeInst>(TI))
182     if (PostDominatedByColdCall.count(II->getNormalDest())) {
183       PostDominatedByColdCall.insert(BB);
184       return;
185     }
186
187   // Otherwise, if the block itself contains a cold function, add it to the
188   // set of blocks post-dominated by a cold call.
189   for (auto &I : *BB)
190     if (const CallInst *CI = dyn_cast<CallInst>(&I))
191       if (CI->hasFnAttr(Attribute::Cold)) {
192         PostDominatedByColdCall.insert(BB);
193         return;
194       }
195 }
196
197 /// \brief Calculate edge weights for successors lead to unreachable.
198 ///
199 /// Predict that a successor which leads necessarily to an
200 /// unreachable-terminated block as extremely unlikely.
201 bool BranchProbabilityInfo::calcUnreachableHeuristics(const BasicBlock *BB) {
202   const TerminatorInst *TI = BB->getTerminator();
203   assert(TI->getNumSuccessors() > 1 && "expected more than one successor!");
204
205   // Return false here so that edge weights for InvokeInst could be decided
206   // in calcInvokeHeuristics().
207   if (isa<InvokeInst>(TI))
208     return false;
209
210   SmallVector<unsigned, 4> UnreachableEdges;
211   SmallVector<unsigned, 4> ReachableEdges;
212
213   for (succ_const_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I)
214     if (PostDominatedByUnreachable.count(*I))
215       UnreachableEdges.push_back(I.getSuccessorIndex());
216     else
217       ReachableEdges.push_back(I.getSuccessorIndex());
218
219   // Skip probabilities if all were reachable.
220   if (UnreachableEdges.empty())
221     return false;
222
223   if (ReachableEdges.empty()) {
224     BranchProbability Prob(1, UnreachableEdges.size());
225     for (unsigned SuccIdx : UnreachableEdges)
226       setEdgeProbability(BB, SuccIdx, Prob);
227     return true;
228   }
229
230   auto UnreachableProb = UR_TAKEN_PROB;
231   auto ReachableProb =
232       (BranchProbability::getOne() - UR_TAKEN_PROB * UnreachableEdges.size()) /
233       ReachableEdges.size();
234
235   for (unsigned SuccIdx : UnreachableEdges)
236     setEdgeProbability(BB, SuccIdx, UnreachableProb);
237   for (unsigned SuccIdx : ReachableEdges)
238     setEdgeProbability(BB, SuccIdx, ReachableProb);
239
240   return true;
241 }
242
243 // Propagate existing explicit probabilities from either profile data or
244 // 'expect' intrinsic processing. Examine metadata against unreachable
245 // heuristic. The probability of the edge coming to unreachable block is
246 // set to min of metadata and unreachable heuristic.
247 bool BranchProbabilityInfo::calcMetadataWeights(const BasicBlock *BB) {
248   const TerminatorInst *TI = BB->getTerminator();
249   assert(TI->getNumSuccessors() > 1 && "expected more than one successor!");
250   if (!(isa<BranchInst>(TI) || isa<SwitchInst>(TI) || isa<IndirectBrInst>(TI)))
251     return false;
252
253   MDNode *WeightsNode = TI->getMetadata(LLVMContext::MD_prof);
254   if (!WeightsNode)
255     return false;
256
257   // Check that the number of successors is manageable.
258   assert(TI->getNumSuccessors() < UINT32_MAX && "Too many successors");
259
260   // Ensure there are weights for all of the successors. Note that the first
261   // operand to the metadata node is a name, not a weight.
262   if (WeightsNode->getNumOperands() != TI->getNumSuccessors() + 1)
263     return false;
264
265   // Build up the final weights that will be used in a temporary buffer.
266   // Compute the sum of all weights to later decide whether they need to
267   // be scaled to fit in 32 bits.
268   uint64_t WeightSum = 0;
269   SmallVector<uint32_t, 2> Weights;
270   SmallVector<unsigned, 2> UnreachableIdxs;
271   SmallVector<unsigned, 2> ReachableIdxs;
272   Weights.reserve(TI->getNumSuccessors());
273   for (unsigned i = 1, e = WeightsNode->getNumOperands(); i != e; ++i) {
274     ConstantInt *Weight =
275         mdconst::dyn_extract<ConstantInt>(WeightsNode->getOperand(i));
276     if (!Weight)
277       return false;
278     assert(Weight->getValue().getActiveBits() <= 32 &&
279            "Too many bits for uint32_t");
280     Weights.push_back(Weight->getZExtValue());
281     WeightSum += Weights.back();
282     if (PostDominatedByUnreachable.count(TI->getSuccessor(i - 1)))
283       UnreachableIdxs.push_back(i - 1);
284     else
285       ReachableIdxs.push_back(i - 1);
286   }
287   assert(Weights.size() == TI->getNumSuccessors() && "Checked above");
288
289   // If the sum of weights does not fit in 32 bits, scale every weight down
290   // accordingly.
291   uint64_t ScalingFactor =
292       (WeightSum > UINT32_MAX) ? WeightSum / UINT32_MAX + 1 : 1;
293
294   if (ScalingFactor > 1) {
295     WeightSum = 0;
296     for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) {
297       Weights[i] /= ScalingFactor;
298       WeightSum += Weights[i];
299     }
300   }
301   assert(WeightSum <= UINT32_MAX &&
302          "Expected weights to scale down to 32 bits");
303
304   if (WeightSum == 0 || ReachableIdxs.size() == 0) {
305     for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
306       Weights[i] = 1;
307     WeightSum = TI->getNumSuccessors();
308   }
309
310   // Set the probability.
311   SmallVector<BranchProbability, 2> BP;
312   for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
313     BP.push_back({ Weights[i], static_cast<uint32_t>(WeightSum) });
314
315   // Examine the metadata against unreachable heuristic.
316   // If the unreachable heuristic is more strong then we use it for this edge.
317   if (UnreachableIdxs.size() > 0 && ReachableIdxs.size() > 0) {
318     auto ToDistribute = BranchProbability::getZero();
319     auto UnreachableProb = UR_TAKEN_PROB;
320     for (auto i : UnreachableIdxs)
321       if (UnreachableProb < BP[i]) {
322         ToDistribute += BP[i] - UnreachableProb;
323         BP[i] = UnreachableProb;
324       }
325
326     // If we modified the probability of some edges then we must distribute
327     // the difference between reachable blocks.
328     if (ToDistribute > BranchProbability::getZero()) {
329       BranchProbability PerEdge = ToDistribute / ReachableIdxs.size();
330       for (auto i : ReachableIdxs)
331         BP[i] += PerEdge;
332     }
333   }
334
335   for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
336     setEdgeProbability(BB, i, BP[i]);
337
338   return true;
339 }
340
341 /// \brief Calculate edge weights for edges leading to cold blocks.
342 ///
343 /// A cold block is one post-dominated by  a block with a call to a
344 /// cold function.  Those edges are unlikely to be taken, so we give
345 /// them relatively low weight.
346 ///
347 /// Return true if we could compute the weights for cold edges.
348 /// Return false, otherwise.
349 bool BranchProbabilityInfo::calcColdCallHeuristics(const BasicBlock *BB) {
350   const TerminatorInst *TI = BB->getTerminator();
351   assert(TI->getNumSuccessors() > 1 && "expected more than one successor!");
352
353   // Return false here so that edge weights for InvokeInst could be decided
354   // in calcInvokeHeuristics().
355   if (isa<InvokeInst>(TI))
356     return false;
357
358   // Determine which successors are post-dominated by a cold block.
359   SmallVector<unsigned, 4> ColdEdges;
360   SmallVector<unsigned, 4> NormalEdges;
361   for (succ_const_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I)
362     if (PostDominatedByColdCall.count(*I))
363       ColdEdges.push_back(I.getSuccessorIndex());
364     else
365       NormalEdges.push_back(I.getSuccessorIndex());
366
367   // Skip probabilities if no cold edges.
368   if (ColdEdges.empty())
369     return false;
370
371   if (NormalEdges.empty()) {
372     BranchProbability Prob(1, ColdEdges.size());
373     for (unsigned SuccIdx : ColdEdges)
374       setEdgeProbability(BB, SuccIdx, Prob);
375     return true;
376   }
377
378   auto ColdProb = BranchProbability::getBranchProbability(
379       CC_TAKEN_WEIGHT,
380       (CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT) * uint64_t(ColdEdges.size()));
381   auto NormalProb = BranchProbability::getBranchProbability(
382       CC_NONTAKEN_WEIGHT,
383       (CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT) * uint64_t(NormalEdges.size()));
384
385   for (unsigned SuccIdx : ColdEdges)
386     setEdgeProbability(BB, SuccIdx, ColdProb);
387   for (unsigned SuccIdx : NormalEdges)
388     setEdgeProbability(BB, SuccIdx, NormalProb);
389
390   return true;
391 }
392
393 // Calculate Edge Weights using "Pointer Heuristics". Predict a comparsion
394 // between two pointer or pointer and NULL will fail.
395 bool BranchProbabilityInfo::calcPointerHeuristics(const BasicBlock *BB) {
396   const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
397   if (!BI || !BI->isConditional())
398     return false;
399
400   Value *Cond = BI->getCondition();
401   ICmpInst *CI = dyn_cast<ICmpInst>(Cond);
402   if (!CI || !CI->isEquality())
403     return false;
404
405   Value *LHS = CI->getOperand(0);
406
407   if (!LHS->getType()->isPointerTy())
408     return false;
409
410   assert(CI->getOperand(1)->getType()->isPointerTy());
411
412   // p != 0   ->   isProb = true
413   // p == 0   ->   isProb = false
414   // p != q   ->   isProb = true
415   // p == q   ->   isProb = false;
416   unsigned TakenIdx = 0, NonTakenIdx = 1;
417   bool isProb = CI->getPredicate() == ICmpInst::ICMP_NE;
418   if (!isProb)
419     std::swap(TakenIdx, NonTakenIdx);
420
421   BranchProbability TakenProb(PH_TAKEN_WEIGHT,
422                               PH_TAKEN_WEIGHT + PH_NONTAKEN_WEIGHT);
423   setEdgeProbability(BB, TakenIdx, TakenProb);
424   setEdgeProbability(BB, NonTakenIdx, TakenProb.getCompl());
425   return true;
426 }
427
428 static int getSCCNum(const BasicBlock *BB,
429                      const BranchProbabilityInfo::SccInfo &SccI) {
430   auto SccIt = SccI.SccNums.find(BB);
431   if (SccIt == SccI.SccNums.end())
432     return -1;
433   return SccIt->second;
434 }
435
436 // Consider any block that is an entry point to the SCC as a header.
437 static bool isSCCHeader(const BasicBlock *BB, int SccNum,
438                         BranchProbabilityInfo::SccInfo &SccI) {
439   assert(getSCCNum(BB, SccI) == SccNum);
440
441   // Lazily compute the set of headers for a given SCC and cache the results
442   // in the SccHeaderMap.
443   if (SccI.SccHeaders.size() <= static_cast<unsigned>(SccNum))
444     SccI.SccHeaders.resize(SccNum + 1);
445   auto &HeaderMap = SccI.SccHeaders[SccNum];
446   bool Inserted;
447   BranchProbabilityInfo::SccHeaderMap::iterator HeaderMapIt;
448   std::tie(HeaderMapIt, Inserted) = HeaderMap.insert(std::make_pair(BB, false));
449   if (Inserted) {
450     bool IsHeader = llvm::any_of(make_range(pred_begin(BB), pred_end(BB)),
451                                  [&](const BasicBlock *Pred) {
452                                    return getSCCNum(Pred, SccI) != SccNum;
453                                  });
454     HeaderMapIt->second = IsHeader;
455     return IsHeader;
456   } else
457     return HeaderMapIt->second;
458 }
459
460 // Calculate Edge Weights using "Loop Branch Heuristics". Predict backedges
461 // as taken, exiting edges as not-taken.
462 bool BranchProbabilityInfo::calcLoopBranchHeuristics(const BasicBlock *BB,
463                                                      const LoopInfo &LI,
464                                                      SccInfo &SccI) {
465   int SccNum;
466   Loop *L = LI.getLoopFor(BB);
467   if (!L) {
468     SccNum = getSCCNum(BB, SccI);
469     if (SccNum < 0)
470       return false;
471   }
472
473   SmallVector<unsigned, 8> BackEdges;
474   SmallVector<unsigned, 8> ExitingEdges;
475   SmallVector<unsigned, 8> InEdges; // Edges from header to the loop.
476
477   for (succ_const_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
478     // Use LoopInfo if we have it, otherwise fall-back to SCC info to catch
479     // irreducible loops.
480     if (L) {
481       if (!L->contains(*I))
482         ExitingEdges.push_back(I.getSuccessorIndex());
483       else if (L->getHeader() == *I)
484         BackEdges.push_back(I.getSuccessorIndex());
485       else
486         InEdges.push_back(I.getSuccessorIndex());
487     } else {
488       if (getSCCNum(*I, SccI) != SccNum)
489         ExitingEdges.push_back(I.getSuccessorIndex());
490       else if (isSCCHeader(*I, SccNum, SccI))
491         BackEdges.push_back(I.getSuccessorIndex());
492       else
493         InEdges.push_back(I.getSuccessorIndex());
494     }
495   }
496
497   if (BackEdges.empty() && ExitingEdges.empty())
498     return false;
499
500   // Collect the sum of probabilities of back-edges/in-edges/exiting-edges, and
501   // normalize them so that they sum up to one.
502   BranchProbability Probs[] = {BranchProbability::getZero(),
503                                BranchProbability::getZero(),
504                                BranchProbability::getZero()};
505   unsigned Denom = (BackEdges.empty() ? 0 : LBH_TAKEN_WEIGHT) +
506                    (InEdges.empty() ? 0 : LBH_TAKEN_WEIGHT) +
507                    (ExitingEdges.empty() ? 0 : LBH_NONTAKEN_WEIGHT);
508   if (!BackEdges.empty())
509     Probs[0] = BranchProbability(LBH_TAKEN_WEIGHT, Denom);
510   if (!InEdges.empty())
511     Probs[1] = BranchProbability(LBH_TAKEN_WEIGHT, Denom);
512   if (!ExitingEdges.empty())
513     Probs[2] = BranchProbability(LBH_NONTAKEN_WEIGHT, Denom);
514
515   if (uint32_t numBackEdges = BackEdges.size()) {
516     auto Prob = Probs[0] / numBackEdges;
517     for (unsigned SuccIdx : BackEdges)
518       setEdgeProbability(BB, SuccIdx, Prob);
519   }
520
521   if (uint32_t numInEdges = InEdges.size()) {
522     auto Prob = Probs[1] / numInEdges;
523     for (unsigned SuccIdx : InEdges)
524       setEdgeProbability(BB, SuccIdx, Prob);
525   }
526
527   if (uint32_t numExitingEdges = ExitingEdges.size()) {
528     auto Prob = Probs[2] / numExitingEdges;
529     for (unsigned SuccIdx : ExitingEdges)
530       setEdgeProbability(BB, SuccIdx, Prob);
531   }
532
533   return true;
534 }
535
536 bool BranchProbabilityInfo::calcZeroHeuristics(const BasicBlock *BB,
537                                                const TargetLibraryInfo *TLI) {
538   const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
539   if (!BI || !BI->isConditional())
540     return false;
541
542   Value *Cond = BI->getCondition();
543   ICmpInst *CI = dyn_cast<ICmpInst>(Cond);
544   if (!CI)
545     return false;
546
547   Value *RHS = CI->getOperand(1);
548   ConstantInt *CV = dyn_cast<ConstantInt>(RHS);
549   if (!CV)
550     return false;
551
552   // If the LHS is the result of AND'ing a value with a single bit bitmask,
553   // we don't have information about probabilities.
554   if (Instruction *LHS = dyn_cast<Instruction>(CI->getOperand(0)))
555     if (LHS->getOpcode() == Instruction::And)
556       if (ConstantInt *AndRHS = dyn_cast<ConstantInt>(LHS->getOperand(1)))
557         if (AndRHS->getValue().isPowerOf2())
558           return false;
559
560   // Check if the LHS is the return value of a library function
561   LibFunc Func = NumLibFuncs;
562   if (TLI)
563     if (CallInst *Call = dyn_cast<CallInst>(CI->getOperand(0)))
564       if (Function *CalledFn = Call->getCalledFunction())
565         TLI->getLibFunc(*CalledFn, Func);
566
567   bool isProb;
568   if (Func == LibFunc_strcasecmp ||
569       Func == LibFunc_strcmp ||
570       Func == LibFunc_strncasecmp ||
571       Func == LibFunc_strncmp ||
572       Func == LibFunc_memcmp) {
573     // strcmp and similar functions return zero, negative, or positive, if the
574     // first string is equal, less, or greater than the second. We consider it
575     // likely that the strings are not equal, so a comparison with zero is
576     // probably false, but also a comparison with any other number is also
577     // probably false given that what exactly is returned for nonzero values is
578     // not specified. Any kind of comparison other than equality we know
579     // nothing about.
580     switch (CI->getPredicate()) {
581     case CmpInst::ICMP_EQ:
582       isProb = false;
583       break;
584     case CmpInst::ICMP_NE:
585       isProb = true;
586       break;
587     default:
588       return false;
589     }
590   } else if (CV->isZero()) {
591     switch (CI->getPredicate()) {
592     case CmpInst::ICMP_EQ:
593       // X == 0   ->  Unlikely
594       isProb = false;
595       break;
596     case CmpInst::ICMP_NE:
597       // X != 0   ->  Likely
598       isProb = true;
599       break;
600     case CmpInst::ICMP_SLT:
601       // X < 0   ->  Unlikely
602       isProb = false;
603       break;
604     case CmpInst::ICMP_SGT:
605       // X > 0   ->  Likely
606       isProb = true;
607       break;
608     default:
609       return false;
610     }
611   } else if (CV->isOne() && CI->getPredicate() == CmpInst::ICMP_SLT) {
612     // InstCombine canonicalizes X <= 0 into X < 1.
613     // X <= 0   ->  Unlikely
614     isProb = false;
615   } else if (CV->isMinusOne()) {
616     switch (CI->getPredicate()) {
617     case CmpInst::ICMP_EQ:
618       // X == -1  ->  Unlikely
619       isProb = false;
620       break;
621     case CmpInst::ICMP_NE:
622       // X != -1  ->  Likely
623       isProb = true;
624       break;
625     case CmpInst::ICMP_SGT:
626       // InstCombine canonicalizes X >= 0 into X > -1.
627       // X >= 0   ->  Likely
628       isProb = true;
629       break;
630     default:
631       return false;
632     }
633   } else {
634     return false;
635   }
636
637   unsigned TakenIdx = 0, NonTakenIdx = 1;
638
639   if (!isProb)
640     std::swap(TakenIdx, NonTakenIdx);
641
642   BranchProbability TakenProb(ZH_TAKEN_WEIGHT,
643                               ZH_TAKEN_WEIGHT + ZH_NONTAKEN_WEIGHT);
644   setEdgeProbability(BB, TakenIdx, TakenProb);
645   setEdgeProbability(BB, NonTakenIdx, TakenProb.getCompl());
646   return true;
647 }
648
649 bool BranchProbabilityInfo::calcFloatingPointHeuristics(const BasicBlock *BB) {
650   const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
651   if (!BI || !BI->isConditional())
652     return false;
653
654   Value *Cond = BI->getCondition();
655   FCmpInst *FCmp = dyn_cast<FCmpInst>(Cond);
656   if (!FCmp)
657     return false;
658
659   bool isProb;
660   if (FCmp->isEquality()) {
661     // f1 == f2 -> Unlikely
662     // f1 != f2 -> Likely
663     isProb = !FCmp->isTrueWhenEqual();
664   } else if (FCmp->getPredicate() == FCmpInst::FCMP_ORD) {
665     // !isnan -> Likely
666     isProb = true;
667   } else if (FCmp->getPredicate() == FCmpInst::FCMP_UNO) {
668     // isnan -> Unlikely
669     isProb = false;
670   } else {
671     return false;
672   }
673
674   unsigned TakenIdx = 0, NonTakenIdx = 1;
675
676   if (!isProb)
677     std::swap(TakenIdx, NonTakenIdx);
678
679   BranchProbability TakenProb(FPH_TAKEN_WEIGHT,
680                               FPH_TAKEN_WEIGHT + FPH_NONTAKEN_WEIGHT);
681   setEdgeProbability(BB, TakenIdx, TakenProb);
682   setEdgeProbability(BB, NonTakenIdx, TakenProb.getCompl());
683   return true;
684 }
685
686 bool BranchProbabilityInfo::calcInvokeHeuristics(const BasicBlock *BB) {
687   const InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator());
688   if (!II)
689     return false;
690
691   BranchProbability TakenProb(IH_TAKEN_WEIGHT,
692                               IH_TAKEN_WEIGHT + IH_NONTAKEN_WEIGHT);
693   setEdgeProbability(BB, 0 /*Index for Normal*/, TakenProb);
694   setEdgeProbability(BB, 1 /*Index for Unwind*/, TakenProb.getCompl());
695   return true;
696 }
697
698 void BranchProbabilityInfo::releaseMemory() {
699   Probs.clear();
700 }
701
702 void BranchProbabilityInfo::print(raw_ostream &OS) const {
703   OS << "---- Branch Probabilities ----\n";
704   // We print the probabilities from the last function the analysis ran over,
705   // or the function it is currently running over.
706   assert(LastF && "Cannot print prior to running over a function");
707   for (const auto &BI : *LastF) {
708     for (succ_const_iterator SI = succ_begin(&BI), SE = succ_end(&BI); SI != SE;
709          ++SI) {
710       printEdgeProbability(OS << "  ", &BI, *SI);
711     }
712   }
713 }
714
715 bool BranchProbabilityInfo::
716 isEdgeHot(const BasicBlock *Src, const BasicBlock *Dst) const {
717   // Hot probability is at least 4/5 = 80%
718   // FIXME: Compare against a static "hot" BranchProbability.
719   return getEdgeProbability(Src, Dst) > BranchProbability(4, 5);
720 }
721
722 const BasicBlock *
723 BranchProbabilityInfo::getHotSucc(const BasicBlock *BB) const {
724   auto MaxProb = BranchProbability::getZero();
725   const BasicBlock *MaxSucc = nullptr;
726
727   for (succ_const_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
728     const BasicBlock *Succ = *I;
729     auto Prob = getEdgeProbability(BB, Succ);
730     if (Prob > MaxProb) {
731       MaxProb = Prob;
732       MaxSucc = Succ;
733     }
734   }
735
736   // Hot probability is at least 4/5 = 80%
737   if (MaxProb > BranchProbability(4, 5))
738     return MaxSucc;
739
740   return nullptr;
741 }
742
743 /// Get the raw edge probability for the edge. If can't find it, return a
744 /// default probability 1/N where N is the number of successors. Here an edge is
745 /// specified using PredBlock and an
746 /// index to the successors.
747 BranchProbability
748 BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src,
749                                           unsigned IndexInSuccessors) const {
750   auto I = Probs.find(std::make_pair(Src, IndexInSuccessors));
751
752   if (I != Probs.end())
753     return I->second;
754
755   return {1,
756           static_cast<uint32_t>(std::distance(succ_begin(Src), succ_end(Src)))};
757 }
758
759 BranchProbability
760 BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src,
761                                           succ_const_iterator Dst) const {
762   return getEdgeProbability(Src, Dst.getSuccessorIndex());
763 }
764
765 /// Get the raw edge probability calculated for the block pair. This returns the
766 /// sum of all raw edge probabilities from Src to Dst.
767 BranchProbability
768 BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src,
769                                           const BasicBlock *Dst) const {
770   auto Prob = BranchProbability::getZero();
771   bool FoundProb = false;
772   for (succ_const_iterator I = succ_begin(Src), E = succ_end(Src); I != E; ++I)
773     if (*I == Dst) {
774       auto MapI = Probs.find(std::make_pair(Src, I.getSuccessorIndex()));
775       if (MapI != Probs.end()) {
776         FoundProb = true;
777         Prob += MapI->second;
778       }
779     }
780   uint32_t succ_num = std::distance(succ_begin(Src), succ_end(Src));
781   return FoundProb ? Prob : BranchProbability(1, succ_num);
782 }
783
784 /// Set the edge probability for a given edge specified by PredBlock and an
785 /// index to the successors.
786 void BranchProbabilityInfo::setEdgeProbability(const BasicBlock *Src,
787                                                unsigned IndexInSuccessors,
788                                                BranchProbability Prob) {
789   Probs[std::make_pair(Src, IndexInSuccessors)] = Prob;
790   Handles.insert(BasicBlockCallbackVH(Src, this));
791   DEBUG(dbgs() << "set edge " << Src->getName() << " -> " << IndexInSuccessors
792                << " successor probability to " << Prob << "\n");
793 }
794
795 raw_ostream &
796 BranchProbabilityInfo::printEdgeProbability(raw_ostream &OS,
797                                             const BasicBlock *Src,
798                                             const BasicBlock *Dst) const {
799   const BranchProbability Prob = getEdgeProbability(Src, Dst);
800   OS << "edge " << Src->getName() << " -> " << Dst->getName()
801      << " probability is " << Prob
802      << (isEdgeHot(Src, Dst) ? " [HOT edge]\n" : "\n");
803
804   return OS;
805 }
806
807 void BranchProbabilityInfo::eraseBlock(const BasicBlock *BB) {
808   for (auto I = Probs.begin(), E = Probs.end(); I != E; ++I) {
809     auto Key = I->first;
810     if (Key.first == BB)
811       Probs.erase(Key);
812   }
813 }
814
815 void BranchProbabilityInfo::calculate(const Function &F, const LoopInfo &LI,
816                                       const TargetLibraryInfo *TLI) {
817   DEBUG(dbgs() << "---- Branch Probability Info : " << F.getName()
818                << " ----\n\n");
819   LastF = &F; // Store the last function we ran on for printing.
820   assert(PostDominatedByUnreachable.empty());
821   assert(PostDominatedByColdCall.empty());
822
823   // Record SCC numbers of blocks in the CFG to identify irreducible loops.
824   // FIXME: We could only calculate this if the CFG is known to be irreducible
825   // (perhaps cache this info in LoopInfo if we can easily calculate it there?).
826   int SccNum = 0;
827   SccInfo SccI;
828   for (scc_iterator<const Function *> It = scc_begin(&F); !It.isAtEnd();
829        ++It, ++SccNum) {
830     // Ignore single-block SCCs since they either aren't loops or LoopInfo will
831     // catch them.
832     const std::vector<const BasicBlock *> &Scc = *It;
833     if (Scc.size() == 1)
834       continue;
835
836     DEBUG(dbgs() << "BPI: SCC " << SccNum << ":");
837     for (auto *BB : Scc) {
838       DEBUG(dbgs() << " " << BB->getName());
839       SccI.SccNums[BB] = SccNum;
840     }
841     DEBUG(dbgs() << "\n");
842   }
843
844   // Walk the basic blocks in post-order so that we can build up state about
845   // the successors of a block iteratively.
846   for (auto BB : post_order(&F.getEntryBlock())) {
847     DEBUG(dbgs() << "Computing probabilities for " << BB->getName() << "\n");
848     updatePostDominatedByUnreachable(BB);
849     updatePostDominatedByColdCall(BB);
850     // If there is no at least two successors, no sense to set probability.
851     if (BB->getTerminator()->getNumSuccessors() < 2)
852       continue;
853     if (calcMetadataWeights(BB))
854       continue;
855     if (calcUnreachableHeuristics(BB))
856       continue;
857     if (calcColdCallHeuristics(BB))
858       continue;
859     if (calcLoopBranchHeuristics(BB, LI, SccI))
860       continue;
861     if (calcPointerHeuristics(BB))
862       continue;
863     if (calcZeroHeuristics(BB, TLI))
864       continue;
865     if (calcFloatingPointHeuristics(BB))
866       continue;
867     calcInvokeHeuristics(BB);
868   }
869
870   PostDominatedByUnreachable.clear();
871   PostDominatedByColdCall.clear();
872
873   if (PrintBranchProb &&
874       (PrintBranchProbFuncName.empty() ||
875        F.getName().equals(PrintBranchProbFuncName))) {
876     print(dbgs());
877   }
878 }
879
880 void BranchProbabilityInfoWrapperPass::getAnalysisUsage(
881     AnalysisUsage &AU) const {
882   AU.addRequired<LoopInfoWrapperPass>();
883   AU.addRequired<TargetLibraryInfoWrapperPass>();
884   AU.setPreservesAll();
885 }
886
887 bool BranchProbabilityInfoWrapperPass::runOnFunction(Function &F) {
888   const LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
889   const TargetLibraryInfo &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
890   BPI.calculate(F, LI, &TLI);
891   return false;
892 }
893
894 void BranchProbabilityInfoWrapperPass::releaseMemory() { BPI.releaseMemory(); }
895
896 void BranchProbabilityInfoWrapperPass::print(raw_ostream &OS,
897                                              const Module *) const {
898   BPI.print(OS);
899 }
900
901 AnalysisKey BranchProbabilityAnalysis::Key;
902 BranchProbabilityInfo
903 BranchProbabilityAnalysis::run(Function &F, FunctionAnalysisManager &AM) {
904   BranchProbabilityInfo BPI;
905   BPI.calculate(F, AM.getResult<LoopAnalysis>(F), &AM.getResult<TargetLibraryAnalysis>(F));
906   return BPI;
907 }
908
909 PreservedAnalyses
910 BranchProbabilityPrinterPass::run(Function &F, FunctionAnalysisManager &AM) {
911   OS << "Printing analysis results of BPI for function "
912      << "'" << F.getName() << "':"
913      << "\n";
914   AM.getResult<BranchProbabilityAnalysis>(F).print(OS);
915   return PreservedAnalyses::all();
916 }