1 //===- BranchProbabilityInfo.cpp - Branch Probability Analysis ------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // Loops should be simplified before this analysis. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "llvm/Analysis/BranchProbabilityInfo.h" 14 #include "llvm/ADT/PostOrderIterator.h" 15 #include "llvm/ADT/SCCIterator.h" 16 #include "llvm/ADT/STLExtras.h" 17 #include "llvm/ADT/SmallVector.h" 18 #include "llvm/Analysis/LoopInfo.h" 19 #include "llvm/Analysis/PostDominators.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/Dominators.h" 26 #include "llvm/IR/Function.h" 27 #include "llvm/IR/InstrTypes.h" 28 #include "llvm/IR/Instruction.h" 29 #include "llvm/IR/Instructions.h" 30 #include "llvm/IR/LLVMContext.h" 31 #include "llvm/IR/Metadata.h" 32 #include "llvm/IR/PassManager.h" 33 #include "llvm/IR/Type.h" 34 #include "llvm/IR/Value.h" 35 #include "llvm/InitializePasses.h" 36 #include "llvm/Pass.h" 37 #include "llvm/Support/BranchProbability.h" 38 #include "llvm/Support/Casting.h" 39 #include "llvm/Support/CommandLine.h" 40 #include "llvm/Support/Debug.h" 41 #include "llvm/Support/raw_ostream.h" 42 #include <cassert> 43 #include <cstdint> 44 #include <iterator> 45 #include <utility> 46 47 using namespace llvm; 48 49 #define DEBUG_TYPE "branch-prob" 50 51 static cl::opt<bool> PrintBranchProb( 52 "print-bpi", cl::init(false), cl::Hidden, 53 cl::desc("Print the branch probability info.")); 54 55 cl::opt<std::string> PrintBranchProbFuncName( 56 "print-bpi-func-name", cl::Hidden, 57 cl::desc("The option to specify the name of the function " 58 "whose branch probability info is printed.")); 59 60 INITIALIZE_PASS_BEGIN(BranchProbabilityInfoWrapperPass, "branch-prob", 61 "Branch Probability Analysis", false, true) 62 INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass) 63 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass) 64 INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass) 65 INITIALIZE_PASS_END(BranchProbabilityInfoWrapperPass, "branch-prob", 66 "Branch Probability Analysis", false, true) 67 68 BranchProbabilityInfoWrapperPass::BranchProbabilityInfoWrapperPass() 69 : FunctionPass(ID) { 70 initializeBranchProbabilityInfoWrapperPassPass( 71 *PassRegistry::getPassRegistry()); 72 } 73 74 char BranchProbabilityInfoWrapperPass::ID = 0; 75 76 // Weights are for internal use only. They are used by heuristics to help to 77 // estimate edges' probability. Example: 78 // 79 // Using "Loop Branch Heuristics" we predict weights of edges for the 80 // block BB2. 81 // ... 82 // | 83 // V 84 // BB1<-+ 85 // | | 86 // | | (Weight = 124) 87 // V | 88 // BB2--+ 89 // | 90 // | (Weight = 4) 91 // V 92 // BB3 93 // 94 // Probability of the edge BB2->BB1 = 124 / (124 + 4) = 0.96875 95 // Probability of the edge BB2->BB3 = 4 / (124 + 4) = 0.03125 96 static const uint32_t LBH_TAKEN_WEIGHT = 124; 97 static const uint32_t LBH_NONTAKEN_WEIGHT = 4; 98 // Unlikely edges within a loop are half as likely as other edges 99 static const uint32_t LBH_UNLIKELY_WEIGHT = 62; 100 101 /// Unreachable-terminating branch taken probability. 102 /// 103 /// This is the probability for a branch being taken to a block that terminates 104 /// (eventually) in unreachable. These are predicted as unlikely as possible. 105 /// All reachable probability will proportionally share the remaining part. 106 static const BranchProbability UR_TAKEN_PROB = BranchProbability::getRaw(1); 107 108 /// Weight for a branch taken going into a cold block. 109 /// 110 /// This is the weight for a branch taken toward a block marked 111 /// cold. A block is marked cold if it's postdominated by a 112 /// block containing a call to a cold function. Cold functions 113 /// are those marked with attribute 'cold'. 114 static const uint32_t CC_TAKEN_WEIGHT = 4; 115 116 /// Weight for a branch not-taken into a cold block. 117 /// 118 /// This is the weight for a branch not taken toward a block marked 119 /// cold. 120 static const uint32_t CC_NONTAKEN_WEIGHT = 64; 121 122 static const uint32_t PH_TAKEN_WEIGHT = 20; 123 static const uint32_t PH_NONTAKEN_WEIGHT = 12; 124 125 static const uint32_t ZH_TAKEN_WEIGHT = 20; 126 static const uint32_t ZH_NONTAKEN_WEIGHT = 12; 127 128 static const uint32_t FPH_TAKEN_WEIGHT = 20; 129 static const uint32_t FPH_NONTAKEN_WEIGHT = 12; 130 131 /// This is the probability for an ordered floating point comparison. 132 static const uint32_t FPH_ORD_WEIGHT = 1024 * 1024 - 1; 133 /// This is the probability for an unordered floating point comparison, it means 134 /// one or two of the operands are NaN. Usually it is used to test for an 135 /// exceptional case, so the result is unlikely. 136 static const uint32_t FPH_UNO_WEIGHT = 1; 137 138 /// Invoke-terminating normal branch taken weight 139 /// 140 /// This is the weight for branching to the normal destination of an invoke 141 /// instruction. We expect this to happen most of the time. Set the weight to an 142 /// absurdly high value so that nested loops subsume it. 143 static const uint32_t IH_TAKEN_WEIGHT = 1024 * 1024 - 1; 144 145 /// Invoke-terminating normal branch not-taken weight. 146 /// 147 /// This is the weight for branching to the unwind destination of an invoke 148 /// instruction. This is essentially never taken. 149 static const uint32_t IH_NONTAKEN_WEIGHT = 1; 150 151 static void UpdatePDTWorklist(const BasicBlock *BB, PostDominatorTree *PDT, 152 SmallVectorImpl<const BasicBlock *> &WorkList, 153 SmallPtrSetImpl<const BasicBlock *> &TargetSet) { 154 SmallVector<BasicBlock *, 8> Descendants; 155 SmallPtrSet<const BasicBlock *, 16> NewItems; 156 157 PDT->getDescendants(const_cast<BasicBlock *>(BB), Descendants); 158 for (auto *BB : Descendants) 159 if (TargetSet.insert(BB).second) 160 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) 161 if (!TargetSet.count(*PI)) 162 NewItems.insert(*PI); 163 WorkList.insert(WorkList.end(), NewItems.begin(), NewItems.end()); 164 } 165 166 /// Compute a set of basic blocks that are post-dominated by unreachables. 167 void BranchProbabilityInfo::computePostDominatedByUnreachable( 168 const Function &F, PostDominatorTree *PDT) { 169 SmallVector<const BasicBlock *, 8> WorkList; 170 for (auto &BB : F) { 171 const Instruction *TI = BB.getTerminator(); 172 if (TI->getNumSuccessors() == 0) { 173 if (isa<UnreachableInst>(TI) || 174 // If this block is terminated by a call to 175 // @llvm.experimental.deoptimize then treat it like an unreachable 176 // since the @llvm.experimental.deoptimize call is expected to 177 // practically never execute. 178 BB.getTerminatingDeoptimizeCall()) 179 UpdatePDTWorklist(&BB, PDT, WorkList, PostDominatedByUnreachable); 180 } 181 } 182 183 while (!WorkList.empty()) { 184 const BasicBlock *BB = WorkList.pop_back_val(); 185 if (PostDominatedByUnreachable.count(BB)) 186 continue; 187 // If the terminator is an InvokeInst, check only the normal destination 188 // block as the unwind edge of InvokeInst is also very unlikely taken. 189 if (auto *II = dyn_cast<InvokeInst>(BB->getTerminator())) { 190 if (PostDominatedByUnreachable.count(II->getNormalDest())) 191 UpdatePDTWorklist(BB, PDT, WorkList, PostDominatedByUnreachable); 192 } 193 // If all the successors are unreachable, BB is unreachable as well. 194 else if (!successors(BB).empty() && 195 llvm::all_of(successors(BB), [this](const BasicBlock *Succ) { 196 return PostDominatedByUnreachable.count(Succ); 197 })) 198 UpdatePDTWorklist(BB, PDT, WorkList, PostDominatedByUnreachable); 199 } 200 } 201 202 /// compute a set of basic blocks that are post-dominated by ColdCalls. 203 void BranchProbabilityInfo::computePostDominatedByColdCall( 204 const Function &F, PostDominatorTree *PDT) { 205 SmallVector<const BasicBlock *, 8> WorkList; 206 for (auto &BB : F) 207 for (auto &I : BB) 208 if (const CallInst *CI = dyn_cast<CallInst>(&I)) 209 if (CI->hasFnAttr(Attribute::Cold)) 210 UpdatePDTWorklist(&BB, PDT, WorkList, PostDominatedByColdCall); 211 212 while (!WorkList.empty()) { 213 const BasicBlock *BB = WorkList.pop_back_val(); 214 215 // If the terminator is an InvokeInst, check only the normal destination 216 // block as the unwind edge of InvokeInst is also very unlikely taken. 217 if (auto *II = dyn_cast<InvokeInst>(BB->getTerminator())) { 218 if (PostDominatedByColdCall.count(II->getNormalDest())) 219 UpdatePDTWorklist(BB, PDT, WorkList, PostDominatedByColdCall); 220 } 221 // If all of successor are post dominated then BB is also done. 222 else if (!successors(BB).empty() && 223 llvm::all_of(successors(BB), [this](const BasicBlock *Succ) { 224 return PostDominatedByColdCall.count(Succ); 225 })) 226 UpdatePDTWorklist(BB, PDT, WorkList, PostDominatedByColdCall); 227 } 228 } 229 230 /// Calculate edge weights for successors lead to unreachable. 231 /// 232 /// Predict that a successor which leads necessarily to an 233 /// unreachable-terminated block as extremely unlikely. 234 bool BranchProbabilityInfo::calcUnreachableHeuristics(const BasicBlock *BB) { 235 const Instruction *TI = BB->getTerminator(); 236 (void) TI; 237 assert(TI->getNumSuccessors() > 1 && "expected more than one successor!"); 238 assert(!isa<InvokeInst>(TI) && 239 "Invokes should have already been handled by calcInvokeHeuristics"); 240 241 SmallVector<unsigned, 4> UnreachableEdges; 242 SmallVector<unsigned, 4> ReachableEdges; 243 244 for (const_succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) 245 if (PostDominatedByUnreachable.count(*I)) 246 UnreachableEdges.push_back(I.getSuccessorIndex()); 247 else 248 ReachableEdges.push_back(I.getSuccessorIndex()); 249 250 // Skip probabilities if all were reachable. 251 if (UnreachableEdges.empty()) 252 return false; 253 254 SmallVector<BranchProbability, 4> EdgeProbabilities( 255 BB->getTerminator()->getNumSuccessors(), BranchProbability::getUnknown()); 256 if (ReachableEdges.empty()) { 257 BranchProbability Prob(1, UnreachableEdges.size()); 258 for (unsigned SuccIdx : UnreachableEdges) 259 EdgeProbabilities[SuccIdx] = Prob; 260 setEdgeProbability(BB, EdgeProbabilities); 261 return true; 262 } 263 264 auto UnreachableProb = UR_TAKEN_PROB; 265 auto ReachableProb = 266 (BranchProbability::getOne() - UR_TAKEN_PROB * UnreachableEdges.size()) / 267 ReachableEdges.size(); 268 269 for (unsigned SuccIdx : UnreachableEdges) 270 EdgeProbabilities[SuccIdx] = UnreachableProb; 271 for (unsigned SuccIdx : ReachableEdges) 272 EdgeProbabilities[SuccIdx] = ReachableProb; 273 274 setEdgeProbability(BB, EdgeProbabilities); 275 return true; 276 } 277 278 // Propagate existing explicit probabilities from either profile data or 279 // 'expect' intrinsic processing. Examine metadata against unreachable 280 // heuristic. The probability of the edge coming to unreachable block is 281 // set to min of metadata and unreachable heuristic. 282 bool BranchProbabilityInfo::calcMetadataWeights(const BasicBlock *BB) { 283 const Instruction *TI = BB->getTerminator(); 284 assert(TI->getNumSuccessors() > 1 && "expected more than one successor!"); 285 if (!(isa<BranchInst>(TI) || isa<SwitchInst>(TI) || isa<IndirectBrInst>(TI))) 286 return false; 287 288 MDNode *WeightsNode = TI->getMetadata(LLVMContext::MD_prof); 289 if (!WeightsNode) 290 return false; 291 292 // Check that the number of successors is manageable. 293 assert(TI->getNumSuccessors() < UINT32_MAX && "Too many successors"); 294 295 // Ensure there are weights for all of the successors. Note that the first 296 // operand to the metadata node is a name, not a weight. 297 if (WeightsNode->getNumOperands() != TI->getNumSuccessors() + 1) 298 return false; 299 300 // Build up the final weights that will be used in a temporary buffer. 301 // Compute the sum of all weights to later decide whether they need to 302 // be scaled to fit in 32 bits. 303 uint64_t WeightSum = 0; 304 SmallVector<uint32_t, 2> Weights; 305 SmallVector<unsigned, 2> UnreachableIdxs; 306 SmallVector<unsigned, 2> ReachableIdxs; 307 Weights.reserve(TI->getNumSuccessors()); 308 for (unsigned I = 1, E = WeightsNode->getNumOperands(); I != E; ++I) { 309 ConstantInt *Weight = 310 mdconst::dyn_extract<ConstantInt>(WeightsNode->getOperand(I)); 311 if (!Weight) 312 return false; 313 assert(Weight->getValue().getActiveBits() <= 32 && 314 "Too many bits for uint32_t"); 315 Weights.push_back(Weight->getZExtValue()); 316 WeightSum += Weights.back(); 317 if (PostDominatedByUnreachable.count(TI->getSuccessor(I - 1))) 318 UnreachableIdxs.push_back(I - 1); 319 else 320 ReachableIdxs.push_back(I - 1); 321 } 322 assert(Weights.size() == TI->getNumSuccessors() && "Checked above"); 323 324 // If the sum of weights does not fit in 32 bits, scale every weight down 325 // accordingly. 326 uint64_t ScalingFactor = 327 (WeightSum > UINT32_MAX) ? WeightSum / UINT32_MAX + 1 : 1; 328 329 if (ScalingFactor > 1) { 330 WeightSum = 0; 331 for (unsigned I = 0, E = TI->getNumSuccessors(); I != E; ++I) { 332 Weights[I] /= ScalingFactor; 333 WeightSum += Weights[I]; 334 } 335 } 336 assert(WeightSum <= UINT32_MAX && 337 "Expected weights to scale down to 32 bits"); 338 339 if (WeightSum == 0 || ReachableIdxs.size() == 0) { 340 for (unsigned I = 0, E = TI->getNumSuccessors(); I != E; ++I) 341 Weights[I] = 1; 342 WeightSum = TI->getNumSuccessors(); 343 } 344 345 // Set the probability. 346 SmallVector<BranchProbability, 2> BP; 347 for (unsigned I = 0, E = TI->getNumSuccessors(); I != E; ++I) 348 BP.push_back({ Weights[I], static_cast<uint32_t>(WeightSum) }); 349 350 // Examine the metadata against unreachable heuristic. 351 // If the unreachable heuristic is more strong then we use it for this edge. 352 if (UnreachableIdxs.size() == 0 || ReachableIdxs.size() == 0) { 353 setEdgeProbability(BB, BP); 354 return true; 355 } 356 357 auto UnreachableProb = UR_TAKEN_PROB; 358 for (auto I : UnreachableIdxs) 359 if (UnreachableProb < BP[I]) { 360 BP[I] = UnreachableProb; 361 } 362 363 // Sum of all edge probabilities must be 1.0. If we modified the probability 364 // of some edges then we must distribute the introduced difference over the 365 // reachable blocks. 366 // 367 // Proportional distribution: the relation between probabilities of the 368 // reachable edges is kept unchanged. That is for any reachable edges i and j: 369 // newBP[i] / newBP[j] == oldBP[i] / oldBP[j] => 370 // newBP[i] / oldBP[i] == newBP[j] / oldBP[j] == K 371 // Where K is independent of i,j. 372 // newBP[i] == oldBP[i] * K 373 // We need to find K. 374 // Make sum of all reachables of the left and right parts: 375 // sum_of_reachable(newBP) == K * sum_of_reachable(oldBP) 376 // Sum of newBP must be equal to 1.0: 377 // sum_of_reachable(newBP) + sum_of_unreachable(newBP) == 1.0 => 378 // sum_of_reachable(newBP) = 1.0 - sum_of_unreachable(newBP) 379 // Where sum_of_unreachable(newBP) is what has been just changed. 380 // Finally: 381 // K == sum_of_reachable(newBP) / sum_of_reachable(oldBP) => 382 // K == (1.0 - sum_of_unreachable(newBP)) / sum_of_reachable(oldBP) 383 BranchProbability NewUnreachableSum = BranchProbability::getZero(); 384 for (auto I : UnreachableIdxs) 385 NewUnreachableSum += BP[I]; 386 387 BranchProbability NewReachableSum = 388 BranchProbability::getOne() - NewUnreachableSum; 389 390 BranchProbability OldReachableSum = BranchProbability::getZero(); 391 for (auto I : ReachableIdxs) 392 OldReachableSum += BP[I]; 393 394 if (OldReachableSum != NewReachableSum) { // Anything to dsitribute? 395 if (OldReachableSum.isZero()) { 396 // If all oldBP[i] are zeroes then the proportional distribution results 397 // in all zero probabilities and the error stays big. In this case we 398 // evenly spread NewReachableSum over the reachable edges. 399 BranchProbability PerEdge = NewReachableSum / ReachableIdxs.size(); 400 for (auto I : ReachableIdxs) 401 BP[I] = PerEdge; 402 } else { 403 for (auto I : ReachableIdxs) { 404 // We use uint64_t to avoid double rounding error of the following 405 // calculation: BP[i] = BP[i] * NewReachableSum / OldReachableSum 406 // The formula is taken from the private constructor 407 // BranchProbability(uint32_t Numerator, uint32_t Denominator) 408 uint64_t Mul = static_cast<uint64_t>(NewReachableSum.getNumerator()) * 409 BP[I].getNumerator(); 410 uint32_t Div = static_cast<uint32_t>( 411 divideNearest(Mul, OldReachableSum.getNumerator())); 412 BP[I] = BranchProbability::getRaw(Div); 413 } 414 } 415 } 416 417 setEdgeProbability(BB, BP); 418 419 return true; 420 } 421 422 /// Calculate edge weights for edges leading to cold blocks. 423 /// 424 /// A cold block is one post-dominated by a block with a call to a 425 /// cold function. Those edges are unlikely to be taken, so we give 426 /// them relatively low weight. 427 /// 428 /// Return true if we could compute the weights for cold edges. 429 /// Return false, otherwise. 430 bool BranchProbabilityInfo::calcColdCallHeuristics(const BasicBlock *BB) { 431 const Instruction *TI = BB->getTerminator(); 432 (void) TI; 433 assert(TI->getNumSuccessors() > 1 && "expected more than one successor!"); 434 assert(!isa<InvokeInst>(TI) && 435 "Invokes should have already been handled by calcInvokeHeuristics"); 436 437 // Determine which successors are post-dominated by a cold block. 438 SmallVector<unsigned, 4> ColdEdges; 439 SmallVector<unsigned, 4> NormalEdges; 440 for (const_succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) 441 if (PostDominatedByColdCall.count(*I)) 442 ColdEdges.push_back(I.getSuccessorIndex()); 443 else 444 NormalEdges.push_back(I.getSuccessorIndex()); 445 446 // Skip probabilities if no cold edges. 447 if (ColdEdges.empty()) 448 return false; 449 450 SmallVector<BranchProbability, 4> EdgeProbabilities( 451 BB->getTerminator()->getNumSuccessors(), BranchProbability::getUnknown()); 452 if (NormalEdges.empty()) { 453 BranchProbability Prob(1, ColdEdges.size()); 454 for (unsigned SuccIdx : ColdEdges) 455 EdgeProbabilities[SuccIdx] = Prob; 456 setEdgeProbability(BB, EdgeProbabilities); 457 return true; 458 } 459 460 auto ColdProb = BranchProbability::getBranchProbability( 461 CC_TAKEN_WEIGHT, 462 (CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT) * uint64_t(ColdEdges.size())); 463 auto NormalProb = BranchProbability::getBranchProbability( 464 CC_NONTAKEN_WEIGHT, 465 (CC_TAKEN_WEIGHT + CC_NONTAKEN_WEIGHT) * uint64_t(NormalEdges.size())); 466 467 for (unsigned SuccIdx : ColdEdges) 468 EdgeProbabilities[SuccIdx] = ColdProb; 469 for (unsigned SuccIdx : NormalEdges) 470 EdgeProbabilities[SuccIdx] = NormalProb; 471 472 setEdgeProbability(BB, EdgeProbabilities); 473 return true; 474 } 475 476 // Calculate Edge Weights using "Pointer Heuristics". Predict a comparison 477 // between two pointer or pointer and NULL will fail. 478 bool BranchProbabilityInfo::calcPointerHeuristics(const BasicBlock *BB) { 479 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator()); 480 if (!BI || !BI->isConditional()) 481 return false; 482 483 Value *Cond = BI->getCondition(); 484 ICmpInst *CI = dyn_cast<ICmpInst>(Cond); 485 if (!CI || !CI->isEquality()) 486 return false; 487 488 Value *LHS = CI->getOperand(0); 489 490 if (!LHS->getType()->isPointerTy()) 491 return false; 492 493 assert(CI->getOperand(1)->getType()->isPointerTy()); 494 495 BranchProbability TakenProb(PH_TAKEN_WEIGHT, 496 PH_TAKEN_WEIGHT + PH_NONTAKEN_WEIGHT); 497 BranchProbability UntakenProb(PH_NONTAKEN_WEIGHT, 498 PH_TAKEN_WEIGHT + PH_NONTAKEN_WEIGHT); 499 500 // p != 0 -> isProb = true 501 // p == 0 -> isProb = false 502 // p != q -> isProb = true 503 // p == q -> isProb = false; 504 bool isProb = CI->getPredicate() == ICmpInst::ICMP_NE; 505 if (!isProb) 506 std::swap(TakenProb, UntakenProb); 507 508 setEdgeProbability( 509 BB, SmallVector<BranchProbability, 2>({TakenProb, UntakenProb})); 510 return true; 511 } 512 513 static int getSCCNum(const BasicBlock *BB, 514 const BranchProbabilityInfo::SccInfo &SccI) { 515 auto SccIt = SccI.SccNums.find(BB); 516 if (SccIt == SccI.SccNums.end()) 517 return -1; 518 return SccIt->second; 519 } 520 521 // Consider any block that is an entry point to the SCC as a header. 522 static bool isSCCHeader(const BasicBlock *BB, int SccNum, 523 BranchProbabilityInfo::SccInfo &SccI) { 524 assert(getSCCNum(BB, SccI) == SccNum); 525 526 // Lazily compute the set of headers for a given SCC and cache the results 527 // in the SccHeaderMap. 528 if (SccI.SccHeaders.size() <= static_cast<unsigned>(SccNum)) 529 SccI.SccHeaders.resize(SccNum + 1); 530 auto &HeaderMap = SccI.SccHeaders[SccNum]; 531 bool Inserted; 532 BranchProbabilityInfo::SccHeaderMap::iterator HeaderMapIt; 533 std::tie(HeaderMapIt, Inserted) = HeaderMap.insert(std::make_pair(BB, false)); 534 if (Inserted) { 535 bool IsHeader = llvm::any_of(make_range(pred_begin(BB), pred_end(BB)), 536 [&](const BasicBlock *Pred) { 537 return getSCCNum(Pred, SccI) != SccNum; 538 }); 539 HeaderMapIt->second = IsHeader; 540 return IsHeader; 541 } else 542 return HeaderMapIt->second; 543 } 544 545 // Compute the unlikely successors to the block BB in the loop L, specifically 546 // those that are unlikely because this is a loop, and add them to the 547 // UnlikelyBlocks set. 548 static void 549 computeUnlikelySuccessors(const BasicBlock *BB, Loop *L, 550 SmallPtrSetImpl<const BasicBlock*> &UnlikelyBlocks) { 551 // Sometimes in a loop we have a branch whose condition is made false by 552 // taking it. This is typically something like 553 // int n = 0; 554 // while (...) { 555 // if (++n >= MAX) { 556 // n = 0; 557 // } 558 // } 559 // In this sort of situation taking the branch means that at the very least it 560 // won't be taken again in the next iteration of the loop, so we should 561 // consider it less likely than a typical branch. 562 // 563 // We detect this by looking back through the graph of PHI nodes that sets the 564 // value that the condition depends on, and seeing if we can reach a successor 565 // block which can be determined to make the condition false. 566 // 567 // FIXME: We currently consider unlikely blocks to be half as likely as other 568 // blocks, but if we consider the example above the likelyhood is actually 569 // 1/MAX. We could therefore be more precise in how unlikely we consider 570 // blocks to be, but it would require more careful examination of the form 571 // of the comparison expression. 572 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator()); 573 if (!BI || !BI->isConditional()) 574 return; 575 576 // Check if the branch is based on an instruction compared with a constant 577 CmpInst *CI = dyn_cast<CmpInst>(BI->getCondition()); 578 if (!CI || !isa<Instruction>(CI->getOperand(0)) || 579 !isa<Constant>(CI->getOperand(1))) 580 return; 581 582 // Either the instruction must be a PHI, or a chain of operations involving 583 // constants that ends in a PHI which we can then collapse into a single value 584 // if the PHI value is known. 585 Instruction *CmpLHS = dyn_cast<Instruction>(CI->getOperand(0)); 586 PHINode *CmpPHI = dyn_cast<PHINode>(CmpLHS); 587 Constant *CmpConst = dyn_cast<Constant>(CI->getOperand(1)); 588 // Collect the instructions until we hit a PHI 589 SmallVector<BinaryOperator *, 1> InstChain; 590 while (!CmpPHI && CmpLHS && isa<BinaryOperator>(CmpLHS) && 591 isa<Constant>(CmpLHS->getOperand(1))) { 592 // Stop if the chain extends outside of the loop 593 if (!L->contains(CmpLHS)) 594 return; 595 InstChain.push_back(cast<BinaryOperator>(CmpLHS)); 596 CmpLHS = dyn_cast<Instruction>(CmpLHS->getOperand(0)); 597 if (CmpLHS) 598 CmpPHI = dyn_cast<PHINode>(CmpLHS); 599 } 600 if (!CmpPHI || !L->contains(CmpPHI)) 601 return; 602 603 // Trace the phi node to find all values that come from successors of BB 604 SmallPtrSet<PHINode*, 8> VisitedInsts; 605 SmallVector<PHINode*, 8> WorkList; 606 WorkList.push_back(CmpPHI); 607 VisitedInsts.insert(CmpPHI); 608 while (!WorkList.empty()) { 609 PHINode *P = WorkList.back(); 610 WorkList.pop_back(); 611 for (BasicBlock *B : P->blocks()) { 612 // Skip blocks that aren't part of the loop 613 if (!L->contains(B)) 614 continue; 615 Value *V = P->getIncomingValueForBlock(B); 616 // If the source is a PHI add it to the work list if we haven't 617 // already visited it. 618 if (PHINode *PN = dyn_cast<PHINode>(V)) { 619 if (VisitedInsts.insert(PN).second) 620 WorkList.push_back(PN); 621 continue; 622 } 623 // If this incoming value is a constant and B is a successor of BB, then 624 // we can constant-evaluate the compare to see if it makes the branch be 625 // taken or not. 626 Constant *CmpLHSConst = dyn_cast<Constant>(V); 627 if (!CmpLHSConst || 628 std::find(succ_begin(BB), succ_end(BB), B) == succ_end(BB)) 629 continue; 630 // First collapse InstChain 631 for (Instruction *I : llvm::reverse(InstChain)) { 632 CmpLHSConst = ConstantExpr::get(I->getOpcode(), CmpLHSConst, 633 cast<Constant>(I->getOperand(1)), true); 634 if (!CmpLHSConst) 635 break; 636 } 637 if (!CmpLHSConst) 638 continue; 639 // Now constant-evaluate the compare 640 Constant *Result = ConstantExpr::getCompare(CI->getPredicate(), 641 CmpLHSConst, CmpConst, true); 642 // If the result means we don't branch to the block then that block is 643 // unlikely. 644 if (Result && 645 ((Result->isZeroValue() && B == BI->getSuccessor(0)) || 646 (Result->isOneValue() && B == BI->getSuccessor(1)))) 647 UnlikelyBlocks.insert(B); 648 } 649 } 650 } 651 652 // Calculate Edge Weights using "Loop Branch Heuristics". Predict backedges 653 // as taken, exiting edges as not-taken. 654 bool BranchProbabilityInfo::calcLoopBranchHeuristics(const BasicBlock *BB, 655 const LoopInfo &LI, 656 SccInfo &SccI) { 657 int SccNum; 658 Loop *L = LI.getLoopFor(BB); 659 if (!L) { 660 SccNum = getSCCNum(BB, SccI); 661 if (SccNum < 0) 662 return false; 663 } 664 665 SmallPtrSet<const BasicBlock*, 8> UnlikelyBlocks; 666 if (L) 667 computeUnlikelySuccessors(BB, L, UnlikelyBlocks); 668 669 SmallVector<unsigned, 8> BackEdges; 670 SmallVector<unsigned, 8> ExitingEdges; 671 SmallVector<unsigned, 8> InEdges; // Edges from header to the loop. 672 SmallVector<unsigned, 8> UnlikelyEdges; 673 674 for (const_succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) { 675 // Use LoopInfo if we have it, otherwise fall-back to SCC info to catch 676 // irreducible loops. 677 if (L) { 678 if (UnlikelyBlocks.count(*I) != 0) 679 UnlikelyEdges.push_back(I.getSuccessorIndex()); 680 else if (!L->contains(*I)) 681 ExitingEdges.push_back(I.getSuccessorIndex()); 682 else if (L->getHeader() == *I) 683 BackEdges.push_back(I.getSuccessorIndex()); 684 else 685 InEdges.push_back(I.getSuccessorIndex()); 686 } else { 687 if (getSCCNum(*I, SccI) != SccNum) 688 ExitingEdges.push_back(I.getSuccessorIndex()); 689 else if (isSCCHeader(*I, SccNum, SccI)) 690 BackEdges.push_back(I.getSuccessorIndex()); 691 else 692 InEdges.push_back(I.getSuccessorIndex()); 693 } 694 } 695 696 if (BackEdges.empty() && ExitingEdges.empty() && UnlikelyEdges.empty()) 697 return false; 698 699 // Collect the sum of probabilities of back-edges/in-edges/exiting-edges, and 700 // normalize them so that they sum up to one. 701 unsigned Denom = (BackEdges.empty() ? 0 : LBH_TAKEN_WEIGHT) + 702 (InEdges.empty() ? 0 : LBH_TAKEN_WEIGHT) + 703 (UnlikelyEdges.empty() ? 0 : LBH_UNLIKELY_WEIGHT) + 704 (ExitingEdges.empty() ? 0 : LBH_NONTAKEN_WEIGHT); 705 706 SmallVector<BranchProbability, 4> EdgeProbabilities( 707 BB->getTerminator()->getNumSuccessors(), BranchProbability::getUnknown()); 708 if (uint32_t numBackEdges = BackEdges.size()) { 709 BranchProbability TakenProb = BranchProbability(LBH_TAKEN_WEIGHT, Denom); 710 auto Prob = TakenProb / numBackEdges; 711 for (unsigned SuccIdx : BackEdges) 712 EdgeProbabilities[SuccIdx] = Prob; 713 } 714 715 if (uint32_t numInEdges = InEdges.size()) { 716 BranchProbability TakenProb = BranchProbability(LBH_TAKEN_WEIGHT, Denom); 717 auto Prob = TakenProb / numInEdges; 718 for (unsigned SuccIdx : InEdges) 719 EdgeProbabilities[SuccIdx] = Prob; 720 } 721 722 if (uint32_t numExitingEdges = ExitingEdges.size()) { 723 BranchProbability NotTakenProb = BranchProbability(LBH_NONTAKEN_WEIGHT, 724 Denom); 725 auto Prob = NotTakenProb / numExitingEdges; 726 for (unsigned SuccIdx : ExitingEdges) 727 EdgeProbabilities[SuccIdx] = Prob; 728 } 729 730 if (uint32_t numUnlikelyEdges = UnlikelyEdges.size()) { 731 BranchProbability UnlikelyProb = BranchProbability(LBH_UNLIKELY_WEIGHT, 732 Denom); 733 auto Prob = UnlikelyProb / numUnlikelyEdges; 734 for (unsigned SuccIdx : UnlikelyEdges) 735 EdgeProbabilities[SuccIdx] = Prob; 736 } 737 738 setEdgeProbability(BB, EdgeProbabilities); 739 return true; 740 } 741 742 bool BranchProbabilityInfo::calcZeroHeuristics(const BasicBlock *BB, 743 const TargetLibraryInfo *TLI) { 744 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator()); 745 if (!BI || !BI->isConditional()) 746 return false; 747 748 Value *Cond = BI->getCondition(); 749 ICmpInst *CI = dyn_cast<ICmpInst>(Cond); 750 if (!CI) 751 return false; 752 753 auto GetConstantInt = [](Value *V) { 754 if (auto *I = dyn_cast<BitCastInst>(V)) 755 return dyn_cast<ConstantInt>(I->getOperand(0)); 756 return dyn_cast<ConstantInt>(V); 757 }; 758 759 Value *RHS = CI->getOperand(1); 760 ConstantInt *CV = GetConstantInt(RHS); 761 if (!CV) 762 return false; 763 764 // If the LHS is the result of AND'ing a value with a single bit bitmask, 765 // we don't have information about probabilities. 766 if (Instruction *LHS = dyn_cast<Instruction>(CI->getOperand(0))) 767 if (LHS->getOpcode() == Instruction::And) 768 if (ConstantInt *AndRHS = dyn_cast<ConstantInt>(LHS->getOperand(1))) 769 if (AndRHS->getValue().isPowerOf2()) 770 return false; 771 772 // Check if the LHS is the return value of a library function 773 LibFunc Func = NumLibFuncs; 774 if (TLI) 775 if (CallInst *Call = dyn_cast<CallInst>(CI->getOperand(0))) 776 if (Function *CalledFn = Call->getCalledFunction()) 777 TLI->getLibFunc(*CalledFn, Func); 778 779 bool isProb; 780 if (Func == LibFunc_strcasecmp || 781 Func == LibFunc_strcmp || 782 Func == LibFunc_strncasecmp || 783 Func == LibFunc_strncmp || 784 Func == LibFunc_memcmp) { 785 // strcmp and similar functions return zero, negative, or positive, if the 786 // first string is equal, less, or greater than the second. We consider it 787 // likely that the strings are not equal, so a comparison with zero is 788 // probably false, but also a comparison with any other number is also 789 // probably false given that what exactly is returned for nonzero values is 790 // not specified. Any kind of comparison other than equality we know 791 // nothing about. 792 switch (CI->getPredicate()) { 793 case CmpInst::ICMP_EQ: 794 isProb = false; 795 break; 796 case CmpInst::ICMP_NE: 797 isProb = true; 798 break; 799 default: 800 return false; 801 } 802 } else if (CV->isZero()) { 803 switch (CI->getPredicate()) { 804 case CmpInst::ICMP_EQ: 805 // X == 0 -> Unlikely 806 isProb = false; 807 break; 808 case CmpInst::ICMP_NE: 809 // X != 0 -> Likely 810 isProb = true; 811 break; 812 case CmpInst::ICMP_SLT: 813 // X < 0 -> Unlikely 814 isProb = false; 815 break; 816 case CmpInst::ICMP_SGT: 817 // X > 0 -> Likely 818 isProb = true; 819 break; 820 default: 821 return false; 822 } 823 } else if (CV->isOne() && CI->getPredicate() == CmpInst::ICMP_SLT) { 824 // InstCombine canonicalizes X <= 0 into X < 1. 825 // X <= 0 -> Unlikely 826 isProb = false; 827 } else if (CV->isMinusOne()) { 828 switch (CI->getPredicate()) { 829 case CmpInst::ICMP_EQ: 830 // X == -1 -> Unlikely 831 isProb = false; 832 break; 833 case CmpInst::ICMP_NE: 834 // X != -1 -> Likely 835 isProb = true; 836 break; 837 case CmpInst::ICMP_SGT: 838 // InstCombine canonicalizes X >= 0 into X > -1. 839 // X >= 0 -> Likely 840 isProb = true; 841 break; 842 default: 843 return false; 844 } 845 } else { 846 return false; 847 } 848 849 BranchProbability TakenProb(ZH_TAKEN_WEIGHT, 850 ZH_TAKEN_WEIGHT + ZH_NONTAKEN_WEIGHT); 851 BranchProbability UntakenProb(ZH_NONTAKEN_WEIGHT, 852 ZH_TAKEN_WEIGHT + ZH_NONTAKEN_WEIGHT); 853 if (!isProb) 854 std::swap(TakenProb, UntakenProb); 855 856 setEdgeProbability( 857 BB, SmallVector<BranchProbability, 2>({TakenProb, UntakenProb})); 858 return true; 859 } 860 861 bool BranchProbabilityInfo::calcFloatingPointHeuristics(const BasicBlock *BB) { 862 const BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator()); 863 if (!BI || !BI->isConditional()) 864 return false; 865 866 Value *Cond = BI->getCondition(); 867 FCmpInst *FCmp = dyn_cast<FCmpInst>(Cond); 868 if (!FCmp) 869 return false; 870 871 uint32_t TakenWeight = FPH_TAKEN_WEIGHT; 872 uint32_t NontakenWeight = FPH_NONTAKEN_WEIGHT; 873 bool isProb; 874 if (FCmp->isEquality()) { 875 // f1 == f2 -> Unlikely 876 // f1 != f2 -> Likely 877 isProb = !FCmp->isTrueWhenEqual(); 878 } else if (FCmp->getPredicate() == FCmpInst::FCMP_ORD) { 879 // !isnan -> Likely 880 isProb = true; 881 TakenWeight = FPH_ORD_WEIGHT; 882 NontakenWeight = FPH_UNO_WEIGHT; 883 } else if (FCmp->getPredicate() == FCmpInst::FCMP_UNO) { 884 // isnan -> Unlikely 885 isProb = false; 886 TakenWeight = FPH_ORD_WEIGHT; 887 NontakenWeight = FPH_UNO_WEIGHT; 888 } else { 889 return false; 890 } 891 892 BranchProbability TakenProb(TakenWeight, TakenWeight + NontakenWeight); 893 BranchProbability UntakenProb(NontakenWeight, TakenWeight + NontakenWeight); 894 if (!isProb) 895 std::swap(TakenProb, UntakenProb); 896 897 setEdgeProbability( 898 BB, SmallVector<BranchProbability, 2>({TakenProb, UntakenProb})); 899 return true; 900 } 901 902 bool BranchProbabilityInfo::calcInvokeHeuristics(const BasicBlock *BB) { 903 const InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator()); 904 if (!II) 905 return false; 906 907 BranchProbability TakenProb(IH_TAKEN_WEIGHT, 908 IH_TAKEN_WEIGHT + IH_NONTAKEN_WEIGHT); 909 setEdgeProbability( 910 BB, SmallVector<BranchProbability, 2>({TakenProb, TakenProb.getCompl()})); 911 return true; 912 } 913 914 void BranchProbabilityInfo::releaseMemory() { 915 Probs.clear(); 916 Handles.clear(); 917 } 918 919 bool BranchProbabilityInfo::invalidate(Function &, const PreservedAnalyses &PA, 920 FunctionAnalysisManager::Invalidator &) { 921 // Check whether the analysis, all analyses on functions, or the function's 922 // CFG have been preserved. 923 auto PAC = PA.getChecker<BranchProbabilityAnalysis>(); 924 return !(PAC.preserved() || PAC.preservedSet<AllAnalysesOn<Function>>() || 925 PAC.preservedSet<CFGAnalyses>()); 926 } 927 928 void BranchProbabilityInfo::print(raw_ostream &OS) const { 929 OS << "---- Branch Probabilities ----\n"; 930 // We print the probabilities from the last function the analysis ran over, 931 // or the function it is currently running over. 932 assert(LastF && "Cannot print prior to running over a function"); 933 for (const auto &BI : *LastF) { 934 for (const_succ_iterator SI = succ_begin(&BI), SE = succ_end(&BI); SI != SE; 935 ++SI) { 936 printEdgeProbability(OS << " ", &BI, *SI); 937 } 938 } 939 } 940 941 bool BranchProbabilityInfo:: 942 isEdgeHot(const BasicBlock *Src, const BasicBlock *Dst) const { 943 // Hot probability is at least 4/5 = 80% 944 // FIXME: Compare against a static "hot" BranchProbability. 945 return getEdgeProbability(Src, Dst) > BranchProbability(4, 5); 946 } 947 948 const BasicBlock * 949 BranchProbabilityInfo::getHotSucc(const BasicBlock *BB) const { 950 auto MaxProb = BranchProbability::getZero(); 951 const BasicBlock *MaxSucc = nullptr; 952 953 for (const_succ_iterator I = succ_begin(BB), E = succ_end(BB); I != E; ++I) { 954 const BasicBlock *Succ = *I; 955 auto Prob = getEdgeProbability(BB, Succ); 956 if (Prob > MaxProb) { 957 MaxProb = Prob; 958 MaxSucc = Succ; 959 } 960 } 961 962 // Hot probability is at least 4/5 = 80% 963 if (MaxProb > BranchProbability(4, 5)) 964 return MaxSucc; 965 966 return nullptr; 967 } 968 969 /// Get the raw edge probability for the edge. If can't find it, return a 970 /// default probability 1/N where N is the number of successors. Here an edge is 971 /// specified using PredBlock and an 972 /// index to the successors. 973 BranchProbability 974 BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src, 975 unsigned IndexInSuccessors) const { 976 auto I = Probs.find(std::make_pair(Src, IndexInSuccessors)); 977 978 if (I != Probs.end()) 979 return I->second; 980 981 return {1, static_cast<uint32_t>(succ_size(Src))}; 982 } 983 984 BranchProbability 985 BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src, 986 const_succ_iterator Dst) const { 987 return getEdgeProbability(Src, Dst.getSuccessorIndex()); 988 } 989 990 /// Get the raw edge probability calculated for the block pair. This returns the 991 /// sum of all raw edge probabilities from Src to Dst. 992 BranchProbability 993 BranchProbabilityInfo::getEdgeProbability(const BasicBlock *Src, 994 const BasicBlock *Dst) const { 995 auto Prob = BranchProbability::getZero(); 996 bool FoundProb = false; 997 uint32_t EdgeCount = 0; 998 for (const_succ_iterator I = succ_begin(Src), E = succ_end(Src); I != E; ++I) 999 if (*I == Dst) { 1000 ++EdgeCount; 1001 auto MapI = Probs.find(std::make_pair(Src, I.getSuccessorIndex())); 1002 if (MapI != Probs.end()) { 1003 FoundProb = true; 1004 Prob += MapI->second; 1005 } 1006 } 1007 uint32_t succ_num = std::distance(succ_begin(Src), succ_end(Src)); 1008 return FoundProb ? Prob : BranchProbability(EdgeCount, succ_num); 1009 } 1010 1011 /// Set the edge probability for a given edge specified by PredBlock and an 1012 /// index to the successors. 1013 void BranchProbabilityInfo::setEdgeProbability(const BasicBlock *Src, 1014 unsigned IndexInSuccessors, 1015 BranchProbability Prob) { 1016 Probs[std::make_pair(Src, IndexInSuccessors)] = Prob; 1017 Handles.insert(BasicBlockCallbackVH(Src, this)); 1018 LLVM_DEBUG(dbgs() << "set edge " << Src->getName() << " -> " 1019 << IndexInSuccessors << " successor probability to " << Prob 1020 << "\n"); 1021 } 1022 1023 /// Set the edge probability for all edges at once. 1024 void BranchProbabilityInfo::setEdgeProbability( 1025 const BasicBlock *Src, const SmallVectorImpl<BranchProbability> &Probs) { 1026 assert(Src->getTerminator()->getNumSuccessors() == Probs.size()); 1027 if (Probs.size() == 0) 1028 return; // Nothing to set. 1029 1030 uint64_t TotalNumerator = 0; 1031 for (unsigned SuccIdx = 0; SuccIdx < Probs.size(); ++SuccIdx) { 1032 setEdgeProbability(Src, SuccIdx, Probs[SuccIdx]); 1033 TotalNumerator += Probs[SuccIdx].getNumerator(); 1034 } 1035 1036 // Because of rounding errors the total probability cannot be checked to be 1037 // 1.0 exactly. That is TotalNumerator == BranchProbability::getDenominator. 1038 // Instead, every single probability in Probs must be as accurate as possible. 1039 // This results in error 1/denominator at most, thus the total absolute error 1040 // should be within Probs.size / BranchProbability::getDenominator. 1041 assert(TotalNumerator <= BranchProbability::getDenominator() + Probs.size()); 1042 assert(TotalNumerator >= BranchProbability::getDenominator() - Probs.size()); 1043 } 1044 1045 raw_ostream & 1046 BranchProbabilityInfo::printEdgeProbability(raw_ostream &OS, 1047 const BasicBlock *Src, 1048 const BasicBlock *Dst) const { 1049 const BranchProbability Prob = getEdgeProbability(Src, Dst); 1050 OS << "edge " << Src->getName() << " -> " << Dst->getName() 1051 << " probability is " << Prob 1052 << (isEdgeHot(Src, Dst) ? " [HOT edge]\n" : "\n"); 1053 1054 return OS; 1055 } 1056 1057 void BranchProbabilityInfo::eraseBlock(const BasicBlock *BB) { 1058 for (auto I = Probs.begin(), E = Probs.end(); I != E; ++I) { 1059 auto Key = I->first; 1060 if (Key.first == BB) 1061 Probs.erase(Key); 1062 } 1063 } 1064 1065 void BranchProbabilityInfo::calculate(const Function &F, const LoopInfo &LI, 1066 const TargetLibraryInfo *TLI, 1067 PostDominatorTree *PDT) { 1068 LLVM_DEBUG(dbgs() << "---- Branch Probability Info : " << F.getName() 1069 << " ----\n\n"); 1070 LastF = &F; // Store the last function we ran on for printing. 1071 assert(PostDominatedByUnreachable.empty()); 1072 assert(PostDominatedByColdCall.empty()); 1073 1074 // Record SCC numbers of blocks in the CFG to identify irreducible loops. 1075 // FIXME: We could only calculate this if the CFG is known to be irreducible 1076 // (perhaps cache this info in LoopInfo if we can easily calculate it there?). 1077 int SccNum = 0; 1078 SccInfo SccI; 1079 for (scc_iterator<const Function *> It = scc_begin(&F); !It.isAtEnd(); 1080 ++It, ++SccNum) { 1081 // Ignore single-block SCCs since they either aren't loops or LoopInfo will 1082 // catch them. 1083 const std::vector<const BasicBlock *> &Scc = *It; 1084 if (Scc.size() == 1) 1085 continue; 1086 1087 LLVM_DEBUG(dbgs() << "BPI: SCC " << SccNum << ":"); 1088 for (auto *BB : Scc) { 1089 LLVM_DEBUG(dbgs() << " " << BB->getName()); 1090 SccI.SccNums[BB] = SccNum; 1091 } 1092 LLVM_DEBUG(dbgs() << "\n"); 1093 } 1094 1095 std::unique_ptr<PostDominatorTree> PDTPtr; 1096 1097 if (!PDT) { 1098 PDTPtr = std::make_unique<PostDominatorTree>(const_cast<Function &>(F)); 1099 PDT = PDTPtr.get(); 1100 } 1101 1102 computePostDominatedByUnreachable(F, PDT); 1103 computePostDominatedByColdCall(F, PDT); 1104 1105 // Walk the basic blocks in post-order so that we can build up state about 1106 // the successors of a block iteratively. 1107 for (auto BB : post_order(&F.getEntryBlock())) { 1108 LLVM_DEBUG(dbgs() << "Computing probabilities for " << BB->getName() 1109 << "\n"); 1110 // If there is no at least two successors, no sense to set probability. 1111 if (BB->getTerminator()->getNumSuccessors() < 2) 1112 continue; 1113 if (calcMetadataWeights(BB)) 1114 continue; 1115 if (calcInvokeHeuristics(BB)) 1116 continue; 1117 if (calcUnreachableHeuristics(BB)) 1118 continue; 1119 if (calcColdCallHeuristics(BB)) 1120 continue; 1121 if (calcLoopBranchHeuristics(BB, LI, SccI)) 1122 continue; 1123 if (calcPointerHeuristics(BB)) 1124 continue; 1125 if (calcZeroHeuristics(BB, TLI)) 1126 continue; 1127 if (calcFloatingPointHeuristics(BB)) 1128 continue; 1129 } 1130 1131 PostDominatedByUnreachable.clear(); 1132 PostDominatedByColdCall.clear(); 1133 1134 if (PrintBranchProb && 1135 (PrintBranchProbFuncName.empty() || 1136 F.getName().equals(PrintBranchProbFuncName))) { 1137 print(dbgs()); 1138 } 1139 } 1140 1141 void BranchProbabilityInfoWrapperPass::getAnalysisUsage( 1142 AnalysisUsage &AU) const { 1143 // We require DT so it's available when LI is available. The LI updating code 1144 // asserts that DT is also present so if we don't make sure that we have DT 1145 // here, that assert will trigger. 1146 AU.addRequired<DominatorTreeWrapperPass>(); 1147 AU.addRequired<LoopInfoWrapperPass>(); 1148 AU.addRequired<TargetLibraryInfoWrapperPass>(); 1149 AU.addRequired<PostDominatorTreeWrapperPass>(); 1150 AU.setPreservesAll(); 1151 } 1152 1153 bool BranchProbabilityInfoWrapperPass::runOnFunction(Function &F) { 1154 const LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); 1155 const TargetLibraryInfo &TLI = 1156 getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(F); 1157 PostDominatorTree &PDT = 1158 getAnalysis<PostDominatorTreeWrapperPass>().getPostDomTree(); 1159 BPI.calculate(F, LI, &TLI, &PDT); 1160 return false; 1161 } 1162 1163 void BranchProbabilityInfoWrapperPass::releaseMemory() { BPI.releaseMemory(); } 1164 1165 void BranchProbabilityInfoWrapperPass::print(raw_ostream &OS, 1166 const Module *) const { 1167 BPI.print(OS); 1168 } 1169 1170 AnalysisKey BranchProbabilityAnalysis::Key; 1171 BranchProbabilityInfo 1172 BranchProbabilityAnalysis::run(Function &F, FunctionAnalysisManager &AM) { 1173 BranchProbabilityInfo BPI; 1174 BPI.calculate(F, AM.getResult<LoopAnalysis>(F), 1175 &AM.getResult<TargetLibraryAnalysis>(F), 1176 &AM.getResult<PostDominatorTreeAnalysis>(F)); 1177 return BPI; 1178 } 1179 1180 PreservedAnalyses 1181 BranchProbabilityPrinterPass::run(Function &F, FunctionAnalysisManager &AM) { 1182 OS << "Printing analysis results of BPI for function " 1183 << "'" << F.getName() << "':" 1184 << "\n"; 1185 AM.getResult<BranchProbabilityAnalysis>(F).print(OS); 1186 return PreservedAnalyses::all(); 1187 } 1188