1 //===- Inliner.cpp - Code common to all inliners --------------------------===// 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 // This file implements the mechanics required to implement inlining without 11 // missing any calls and updating the call graph. The decisions of which calls 12 // are profitable to inline are implemented elsewhere. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #define DEBUG_TYPE "inline" 17 #include "llvm/Transforms/IPO/InlinerPass.h" 18 #include "llvm/ADT/SmallPtrSet.h" 19 #include "llvm/ADT/Statistic.h" 20 #include "llvm/Analysis/CallGraph.h" 21 #include "llvm/Analysis/InlineCost.h" 22 #include "llvm/IR/CallSite.h" 23 #include "llvm/IR/DataLayout.h" 24 #include "llvm/IR/DiagnosticInfo.h" 25 #include "llvm/IR/Instructions.h" 26 #include "llvm/IR/IntrinsicInst.h" 27 #include "llvm/IR/Module.h" 28 #include "llvm/Support/CommandLine.h" 29 #include "llvm/Support/Debug.h" 30 #include "llvm/Support/raw_ostream.h" 31 #include "llvm/Target/TargetLibraryInfo.h" 32 #include "llvm/Transforms/Utils/Cloning.h" 33 #include "llvm/Transforms/Utils/Local.h" 34 using namespace llvm; 35 36 STATISTIC(NumInlined, "Number of functions inlined"); 37 STATISTIC(NumCallsDeleted, "Number of call sites deleted, not inlined"); 38 STATISTIC(NumDeleted, "Number of functions deleted because all callers found"); 39 STATISTIC(NumMergedAllocas, "Number of allocas merged together"); 40 41 // This weirdly named statistic tracks the number of times that, when attempting 42 // to inline a function A into B, we analyze the callers of B in order to see 43 // if those would be more profitable and blocked inline steps. 44 STATISTIC(NumCallerCallersAnalyzed, "Number of caller-callers analyzed"); 45 46 static cl::opt<int> 47 InlineLimit("inline-threshold", cl::Hidden, cl::init(225), cl::ZeroOrMore, 48 cl::desc("Control the amount of inlining to perform (default = 225)")); 49 50 static cl::opt<int> 51 HintThreshold("inlinehint-threshold", cl::Hidden, cl::init(325), 52 cl::desc("Threshold for inlining functions with inline hint")); 53 54 // We instroduce this threshold to help performance of instrumentation based 55 // PGO before we actually hook up inliner with analysis passes such as BPI and 56 // BFI. 57 static cl::opt<int> 58 ColdThreshold("inlinecold-threshold", cl::Hidden, cl::init(225), 59 cl::desc("Threshold for inlining functions with cold attribute")); 60 61 // Threshold to use when optsize is specified (and there is no -inline-limit). 62 const int OptSizeThreshold = 75; 63 64 Inliner::Inliner(char &ID) 65 : CallGraphSCCPass(ID), InlineThreshold(InlineLimit), InsertLifetime(true) {} 66 67 Inliner::Inliner(char &ID, int Threshold, bool InsertLifetime) 68 : CallGraphSCCPass(ID), InlineThreshold(InlineLimit.getNumOccurrences() > 0 ? 69 InlineLimit : Threshold), 70 InsertLifetime(InsertLifetime) {} 71 72 /// getAnalysisUsage - For this class, we declare that we require and preserve 73 /// the call graph. If the derived class implements this method, it should 74 /// always explicitly call the implementation here. 75 void Inliner::getAnalysisUsage(AnalysisUsage &AU) const { 76 CallGraphSCCPass::getAnalysisUsage(AU); 77 } 78 79 80 typedef DenseMap<ArrayType*, std::vector<AllocaInst*> > 81 InlinedArrayAllocasTy; 82 83 /// \brief If the inlined function had a higher stack protection level than the 84 /// calling function, then bump up the caller's stack protection level. 85 static void AdjustCallerSSPLevel(Function *Caller, Function *Callee) { 86 // If upgrading the SSP attribute, clear out the old SSP Attributes first. 87 // Having multiple SSP attributes doesn't actually hurt, but it adds useless 88 // clutter to the IR. 89 AttrBuilder B; 90 B.addAttribute(Attribute::StackProtect) 91 .addAttribute(Attribute::StackProtectStrong); 92 AttributeSet OldSSPAttr = AttributeSet::get(Caller->getContext(), 93 AttributeSet::FunctionIndex, 94 B); 95 AttributeSet CallerAttr = Caller->getAttributes(), 96 CalleeAttr = Callee->getAttributes(); 97 98 if (CalleeAttr.hasAttribute(AttributeSet::FunctionIndex, 99 Attribute::StackProtectReq)) { 100 Caller->removeAttributes(AttributeSet::FunctionIndex, OldSSPAttr); 101 Caller->addFnAttr(Attribute::StackProtectReq); 102 } else if (CalleeAttr.hasAttribute(AttributeSet::FunctionIndex, 103 Attribute::StackProtectStrong) && 104 !CallerAttr.hasAttribute(AttributeSet::FunctionIndex, 105 Attribute::StackProtectReq)) { 106 Caller->removeAttributes(AttributeSet::FunctionIndex, OldSSPAttr); 107 Caller->addFnAttr(Attribute::StackProtectStrong); 108 } else if (CalleeAttr.hasAttribute(AttributeSet::FunctionIndex, 109 Attribute::StackProtect) && 110 !CallerAttr.hasAttribute(AttributeSet::FunctionIndex, 111 Attribute::StackProtectReq) && 112 !CallerAttr.hasAttribute(AttributeSet::FunctionIndex, 113 Attribute::StackProtectStrong)) 114 Caller->addFnAttr(Attribute::StackProtect); 115 } 116 117 /// InlineCallIfPossible - If it is possible to inline the specified call site, 118 /// do so and update the CallGraph for this operation. 119 /// 120 /// This function also does some basic book-keeping to update the IR. The 121 /// InlinedArrayAllocas map keeps track of any allocas that are already 122 /// available from other functions inlined into the caller. If we are able to 123 /// inline this call site we attempt to reuse already available allocas or add 124 /// any new allocas to the set if not possible. 125 static bool InlineCallIfPossible(CallSite CS, InlineFunctionInfo &IFI, 126 InlinedArrayAllocasTy &InlinedArrayAllocas, 127 int InlineHistory, bool InsertLifetime, 128 const DataLayout *DL) { 129 Function *Callee = CS.getCalledFunction(); 130 Function *Caller = CS.getCaller(); 131 132 // Try to inline the function. Get the list of static allocas that were 133 // inlined. 134 if (!InlineFunction(CS, IFI, InsertLifetime)) 135 return false; 136 137 AdjustCallerSSPLevel(Caller, Callee); 138 139 // Look at all of the allocas that we inlined through this call site. If we 140 // have already inlined other allocas through other calls into this function, 141 // then we know that they have disjoint lifetimes and that we can merge them. 142 // 143 // There are many heuristics possible for merging these allocas, and the 144 // different options have different tradeoffs. One thing that we *really* 145 // don't want to hurt is SRoA: once inlining happens, often allocas are no 146 // longer address taken and so they can be promoted. 147 // 148 // Our "solution" for that is to only merge allocas whose outermost type is an 149 // array type. These are usually not promoted because someone is using a 150 // variable index into them. These are also often the most important ones to 151 // merge. 152 // 153 // A better solution would be to have real memory lifetime markers in the IR 154 // and not have the inliner do any merging of allocas at all. This would 155 // allow the backend to do proper stack slot coloring of all allocas that 156 // *actually make it to the backend*, which is really what we want. 157 // 158 // Because we don't have this information, we do this simple and useful hack. 159 // 160 SmallPtrSet<AllocaInst*, 16> UsedAllocas; 161 162 // When processing our SCC, check to see if CS was inlined from some other 163 // call site. For example, if we're processing "A" in this code: 164 // A() { B() } 165 // B() { x = alloca ... C() } 166 // C() { y = alloca ... } 167 // Assume that C was not inlined into B initially, and so we're processing A 168 // and decide to inline B into A. Doing this makes an alloca available for 169 // reuse and makes a callsite (C) available for inlining. When we process 170 // the C call site we don't want to do any alloca merging between X and Y 171 // because their scopes are not disjoint. We could make this smarter by 172 // keeping track of the inline history for each alloca in the 173 // InlinedArrayAllocas but this isn't likely to be a significant win. 174 if (InlineHistory != -1) // Only do merging for top-level call sites in SCC. 175 return true; 176 177 // Loop over all the allocas we have so far and see if they can be merged with 178 // a previously inlined alloca. If not, remember that we had it. 179 for (unsigned AllocaNo = 0, e = IFI.StaticAllocas.size(); 180 AllocaNo != e; ++AllocaNo) { 181 AllocaInst *AI = IFI.StaticAllocas[AllocaNo]; 182 183 // Don't bother trying to merge array allocations (they will usually be 184 // canonicalized to be an allocation *of* an array), or allocations whose 185 // type is not itself an array (because we're afraid of pessimizing SRoA). 186 ArrayType *ATy = dyn_cast<ArrayType>(AI->getAllocatedType()); 187 if (ATy == 0 || AI->isArrayAllocation()) 188 continue; 189 190 // Get the list of all available allocas for this array type. 191 std::vector<AllocaInst*> &AllocasForType = InlinedArrayAllocas[ATy]; 192 193 // Loop over the allocas in AllocasForType to see if we can reuse one. Note 194 // that we have to be careful not to reuse the same "available" alloca for 195 // multiple different allocas that we just inlined, we use the 'UsedAllocas' 196 // set to keep track of which "available" allocas are being used by this 197 // function. Also, AllocasForType can be empty of course! 198 bool MergedAwayAlloca = false; 199 for (unsigned i = 0, e = AllocasForType.size(); i != e; ++i) { 200 AllocaInst *AvailableAlloca = AllocasForType[i]; 201 202 unsigned Align1 = AI->getAlignment(), 203 Align2 = AvailableAlloca->getAlignment(); 204 // If we don't have data layout information, and only one alloca is using 205 // the target default, then we can't safely merge them because we can't 206 // pick the greater alignment. 207 if (!DL && (!Align1 || !Align2) && Align1 != Align2) 208 continue; 209 210 // The available alloca has to be in the right function, not in some other 211 // function in this SCC. 212 if (AvailableAlloca->getParent() != AI->getParent()) 213 continue; 214 215 // If the inlined function already uses this alloca then we can't reuse 216 // it. 217 if (!UsedAllocas.insert(AvailableAlloca)) 218 continue; 219 220 // Otherwise, we *can* reuse it, RAUW AI into AvailableAlloca and declare 221 // success! 222 DEBUG(dbgs() << " ***MERGED ALLOCA: " << *AI << "\n\t\tINTO: " 223 << *AvailableAlloca << '\n'); 224 225 AI->replaceAllUsesWith(AvailableAlloca); 226 227 if (Align1 != Align2) { 228 if (!Align1 || !Align2) { 229 assert(DL && "DataLayout required to compare default alignments"); 230 unsigned TypeAlign = DL->getABITypeAlignment(AI->getAllocatedType()); 231 232 Align1 = Align1 ? Align1 : TypeAlign; 233 Align2 = Align2 ? Align2 : TypeAlign; 234 } 235 236 if (Align1 > Align2) 237 AvailableAlloca->setAlignment(AI->getAlignment()); 238 } 239 240 AI->eraseFromParent(); 241 MergedAwayAlloca = true; 242 ++NumMergedAllocas; 243 IFI.StaticAllocas[AllocaNo] = 0; 244 break; 245 } 246 247 // If we already nuked the alloca, we're done with it. 248 if (MergedAwayAlloca) 249 continue; 250 251 // If we were unable to merge away the alloca either because there are no 252 // allocas of the right type available or because we reused them all 253 // already, remember that this alloca came from an inlined function and mark 254 // it used so we don't reuse it for other allocas from this inline 255 // operation. 256 AllocasForType.push_back(AI); 257 UsedAllocas.insert(AI); 258 } 259 260 return true; 261 } 262 263 unsigned Inliner::getInlineThreshold(CallSite CS) const { 264 int thres = InlineThreshold; // -inline-threshold or else selected by 265 // overall opt level 266 267 // If -inline-threshold is not given, listen to the optsize attribute when it 268 // would decrease the threshold. 269 Function *Caller = CS.getCaller(); 270 bool OptSize = Caller && !Caller->isDeclaration() && 271 Caller->getAttributes().hasAttribute(AttributeSet::FunctionIndex, 272 Attribute::OptimizeForSize); 273 if (!(InlineLimit.getNumOccurrences() > 0) && OptSize && 274 OptSizeThreshold < thres) 275 thres = OptSizeThreshold; 276 277 // Listen to the inlinehint attribute when it would increase the threshold 278 // and the caller does not need to minimize its size. 279 Function *Callee = CS.getCalledFunction(); 280 bool InlineHint = Callee && !Callee->isDeclaration() && 281 Callee->getAttributes().hasAttribute(AttributeSet::FunctionIndex, 282 Attribute::InlineHint); 283 if (InlineHint && HintThreshold > thres 284 && !Caller->getAttributes().hasAttribute(AttributeSet::FunctionIndex, 285 Attribute::MinSize)) 286 thres = HintThreshold; 287 288 // Listen to the cold attribute when it would decrease the threshold. 289 bool ColdCallee = Callee && !Callee->isDeclaration() && 290 Callee->getAttributes().hasAttribute(AttributeSet::FunctionIndex, 291 Attribute::Cold); 292 if (ColdCallee && ColdThreshold < thres) 293 thres = ColdThreshold; 294 295 return thres; 296 } 297 298 /// shouldInline - Return true if the inliner should attempt to inline 299 /// at the given CallSite. 300 bool Inliner::shouldInline(CallSite CS) { 301 InlineCost IC = getInlineCost(CS); 302 303 if (IC.isAlways()) { 304 DEBUG(dbgs() << " Inlining: cost=always" 305 << ", Call: " << *CS.getInstruction() << "\n"); 306 return true; 307 } 308 309 if (IC.isNever()) { 310 DEBUG(dbgs() << " NOT Inlining: cost=never" 311 << ", Call: " << *CS.getInstruction() << "\n"); 312 return false; 313 } 314 315 Function *Caller = CS.getCaller(); 316 if (!IC) { 317 DEBUG(dbgs() << " NOT Inlining: cost=" << IC.getCost() 318 << ", thres=" << (IC.getCostDelta() + IC.getCost()) 319 << ", Call: " << *CS.getInstruction() << "\n"); 320 return false; 321 } 322 323 // Try to detect the case where the current inlining candidate caller (call 324 // it B) is a static or linkonce-ODR function and is an inlining candidate 325 // elsewhere, and the current candidate callee (call it C) is large enough 326 // that inlining it into B would make B too big to inline later. In these 327 // circumstances it may be best not to inline C into B, but to inline B into 328 // its callers. 329 // 330 // This only applies to static and linkonce-ODR functions because those are 331 // expected to be available for inlining in the translation units where they 332 // are used. Thus we will always have the opportunity to make local inlining 333 // decisions. Importantly the linkonce-ODR linkage covers inline functions 334 // and templates in C++. 335 // 336 // FIXME: All of this logic should be sunk into getInlineCost. It relies on 337 // the internal implementation of the inline cost metrics rather than 338 // treating them as truly abstract units etc. 339 if (Caller->hasLocalLinkage() || 340 Caller->getLinkage() == GlobalValue::LinkOnceODRLinkage) { 341 int TotalSecondaryCost = 0; 342 // The candidate cost to be imposed upon the current function. 343 int CandidateCost = IC.getCost() - (InlineConstants::CallPenalty + 1); 344 // This bool tracks what happens if we do NOT inline C into B. 345 bool callerWillBeRemoved = Caller->hasLocalLinkage(); 346 // This bool tracks what happens if we DO inline C into B. 347 bool inliningPreventsSomeOuterInline = false; 348 for (User *U : Caller->users()) { 349 CallSite CS2(U); 350 351 // If this isn't a call to Caller (it could be some other sort 352 // of reference) skip it. Such references will prevent the caller 353 // from being removed. 354 if (!CS2 || CS2.getCalledFunction() != Caller) { 355 callerWillBeRemoved = false; 356 continue; 357 } 358 359 InlineCost IC2 = getInlineCost(CS2); 360 ++NumCallerCallersAnalyzed; 361 if (!IC2) { 362 callerWillBeRemoved = false; 363 continue; 364 } 365 if (IC2.isAlways()) 366 continue; 367 368 // See if inlining or original callsite would erase the cost delta of 369 // this callsite. We subtract off the penalty for the call instruction, 370 // which we would be deleting. 371 if (IC2.getCostDelta() <= CandidateCost) { 372 inliningPreventsSomeOuterInline = true; 373 TotalSecondaryCost += IC2.getCost(); 374 } 375 } 376 // If all outer calls to Caller would get inlined, the cost for the last 377 // one is set very low by getInlineCost, in anticipation that Caller will 378 // be removed entirely. We did not account for this above unless there 379 // is only one caller of Caller. 380 if (callerWillBeRemoved && !Caller->use_empty()) 381 TotalSecondaryCost += InlineConstants::LastCallToStaticBonus; 382 383 if (inliningPreventsSomeOuterInline && TotalSecondaryCost < IC.getCost()) { 384 DEBUG(dbgs() << " NOT Inlining: " << *CS.getInstruction() << 385 " Cost = " << IC.getCost() << 386 ", outer Cost = " << TotalSecondaryCost << '\n'); 387 return false; 388 } 389 } 390 391 DEBUG(dbgs() << " Inlining: cost=" << IC.getCost() 392 << ", thres=" << (IC.getCostDelta() + IC.getCost()) 393 << ", Call: " << *CS.getInstruction() << '\n'); 394 return true; 395 } 396 397 /// InlineHistoryIncludes - Return true if the specified inline history ID 398 /// indicates an inline history that includes the specified function. 399 static bool InlineHistoryIncludes(Function *F, int InlineHistoryID, 400 const SmallVectorImpl<std::pair<Function*, int> > &InlineHistory) { 401 while (InlineHistoryID != -1) { 402 assert(unsigned(InlineHistoryID) < InlineHistory.size() && 403 "Invalid inline history ID"); 404 if (InlineHistory[InlineHistoryID].first == F) 405 return true; 406 InlineHistoryID = InlineHistory[InlineHistoryID].second; 407 } 408 return false; 409 } 410 411 bool Inliner::runOnSCC(CallGraphSCC &SCC) { 412 CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph(); 413 DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>(); 414 const DataLayout *DL = DLP ? &DLP->getDataLayout() : 0; 415 const TargetLibraryInfo *TLI = getAnalysisIfAvailable<TargetLibraryInfo>(); 416 417 SmallPtrSet<Function*, 8> SCCFunctions; 418 DEBUG(dbgs() << "Inliner visiting SCC:"); 419 for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) { 420 Function *F = (*I)->getFunction(); 421 if (F) SCCFunctions.insert(F); 422 DEBUG(dbgs() << " " << (F ? F->getName() : "INDIRECTNODE")); 423 } 424 425 // Scan through and identify all call sites ahead of time so that we only 426 // inline call sites in the original functions, not call sites that result 427 // from inlining other functions. 428 SmallVector<std::pair<CallSite, int>, 16> CallSites; 429 430 // When inlining a callee produces new call sites, we want to keep track of 431 // the fact that they were inlined from the callee. This allows us to avoid 432 // infinite inlining in some obscure cases. To represent this, we use an 433 // index into the InlineHistory vector. 434 SmallVector<std::pair<Function*, int>, 8> InlineHistory; 435 436 for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) { 437 Function *F = (*I)->getFunction(); 438 if (!F) continue; 439 440 for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) 441 for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { 442 CallSite CS(cast<Value>(I)); 443 // If this isn't a call, or it is a call to an intrinsic, it can 444 // never be inlined. 445 if (!CS || isa<IntrinsicInst>(I)) 446 continue; 447 448 // If this is a direct call to an external function, we can never inline 449 // it. If it is an indirect call, inlining may resolve it to be a 450 // direct call, so we keep it. 451 if (CS.getCalledFunction() && CS.getCalledFunction()->isDeclaration()) 452 continue; 453 454 CallSites.push_back(std::make_pair(CS, -1)); 455 } 456 } 457 458 DEBUG(dbgs() << ": " << CallSites.size() << " call sites.\n"); 459 460 // If there are no calls in this function, exit early. 461 if (CallSites.empty()) 462 return false; 463 464 // Now that we have all of the call sites, move the ones to functions in the 465 // current SCC to the end of the list. 466 unsigned FirstCallInSCC = CallSites.size(); 467 for (unsigned i = 0; i < FirstCallInSCC; ++i) 468 if (Function *F = CallSites[i].first.getCalledFunction()) 469 if (SCCFunctions.count(F)) 470 std::swap(CallSites[i--], CallSites[--FirstCallInSCC]); 471 472 473 InlinedArrayAllocasTy InlinedArrayAllocas; 474 InlineFunctionInfo InlineInfo(&CG, DL); 475 476 // Now that we have all of the call sites, loop over them and inline them if 477 // it looks profitable to do so. 478 bool Changed = false; 479 bool LocalChange; 480 do { 481 LocalChange = false; 482 // Iterate over the outer loop because inlining functions can cause indirect 483 // calls to become direct calls. 484 for (unsigned CSi = 0; CSi != CallSites.size(); ++CSi) { 485 CallSite CS = CallSites[CSi].first; 486 487 Function *Caller = CS.getCaller(); 488 Function *Callee = CS.getCalledFunction(); 489 490 // If this call site is dead and it is to a readonly function, we should 491 // just delete the call instead of trying to inline it, regardless of 492 // size. This happens because IPSCCP propagates the result out of the 493 // call and then we're left with the dead call. 494 if (isInstructionTriviallyDead(CS.getInstruction(), TLI)) { 495 DEBUG(dbgs() << " -> Deleting dead call: " 496 << *CS.getInstruction() << "\n"); 497 // Update the call graph by deleting the edge from Callee to Caller. 498 CG[Caller]->removeCallEdgeFor(CS); 499 CS.getInstruction()->eraseFromParent(); 500 ++NumCallsDeleted; 501 } else { 502 // We can only inline direct calls to non-declarations. 503 if (Callee == 0 || Callee->isDeclaration()) continue; 504 505 // If this call site was obtained by inlining another function, verify 506 // that the include path for the function did not include the callee 507 // itself. If so, we'd be recursively inlining the same function, 508 // which would provide the same callsites, which would cause us to 509 // infinitely inline. 510 int InlineHistoryID = CallSites[CSi].second; 511 if (InlineHistoryID != -1 && 512 InlineHistoryIncludes(Callee, InlineHistoryID, InlineHistory)) 513 continue; 514 515 516 // If the policy determines that we should inline this function, 517 // try to do so. 518 if (!shouldInline(CS)) 519 continue; 520 521 // Attempt to inline the function. 522 if (!InlineCallIfPossible(CS, InlineInfo, InlinedArrayAllocas, 523 InlineHistoryID, InsertLifetime, DL)) 524 continue; 525 ++NumInlined; 526 527 // Report the inline decision. 528 Caller->getContext().emitOptimizationRemark( 529 DEBUG_TYPE, *Caller, CS.getInstruction()->getDebugLoc(), 530 Twine(Callee->getName() + " inlined into " + Caller->getName())); 531 532 // If inlining this function gave us any new call sites, throw them 533 // onto our worklist to process. They are useful inline candidates. 534 if (!InlineInfo.InlinedCalls.empty()) { 535 // Create a new inline history entry for this, so that we remember 536 // that these new callsites came about due to inlining Callee. 537 int NewHistoryID = InlineHistory.size(); 538 InlineHistory.push_back(std::make_pair(Callee, InlineHistoryID)); 539 540 for (unsigned i = 0, e = InlineInfo.InlinedCalls.size(); 541 i != e; ++i) { 542 Value *Ptr = InlineInfo.InlinedCalls[i]; 543 CallSites.push_back(std::make_pair(CallSite(Ptr), NewHistoryID)); 544 } 545 } 546 } 547 548 // If we inlined or deleted the last possible call site to the function, 549 // delete the function body now. 550 if (Callee && Callee->use_empty() && Callee->hasLocalLinkage() && 551 // TODO: Can remove if in SCC now. 552 !SCCFunctions.count(Callee) && 553 554 // The function may be apparently dead, but if there are indirect 555 // callgraph references to the node, we cannot delete it yet, this 556 // could invalidate the CGSCC iterator. 557 CG[Callee]->getNumReferences() == 0) { 558 DEBUG(dbgs() << " -> Deleting dead function: " 559 << Callee->getName() << "\n"); 560 CallGraphNode *CalleeNode = CG[Callee]; 561 562 // Remove any call graph edges from the callee to its callees. 563 CalleeNode->removeAllCalledFunctions(); 564 565 // Removing the node for callee from the call graph and delete it. 566 delete CG.removeFunctionFromModule(CalleeNode); 567 ++NumDeleted; 568 } 569 570 // Remove this call site from the list. If possible, use 571 // swap/pop_back for efficiency, but do not use it if doing so would 572 // move a call site to a function in this SCC before the 573 // 'FirstCallInSCC' barrier. 574 if (SCC.isSingular()) { 575 CallSites[CSi] = CallSites.back(); 576 CallSites.pop_back(); 577 } else { 578 CallSites.erase(CallSites.begin()+CSi); 579 } 580 --CSi; 581 582 Changed = true; 583 LocalChange = true; 584 } 585 } while (LocalChange); 586 587 return Changed; 588 } 589 590 // doFinalization - Remove now-dead linkonce functions at the end of 591 // processing to avoid breaking the SCC traversal. 592 bool Inliner::doFinalization(CallGraph &CG) { 593 return removeDeadFunctions(CG); 594 } 595 596 /// removeDeadFunctions - Remove dead functions that are not included in 597 /// DNR (Do Not Remove) list. 598 bool Inliner::removeDeadFunctions(CallGraph &CG, bool AlwaysInlineOnly) { 599 SmallVector<CallGraphNode*, 16> FunctionsToRemove; 600 601 // Scan for all of the functions, looking for ones that should now be removed 602 // from the program. Insert the dead ones in the FunctionsToRemove set. 603 for (CallGraph::iterator I = CG.begin(), E = CG.end(); I != E; ++I) { 604 CallGraphNode *CGN = I->second; 605 Function *F = CGN->getFunction(); 606 if (!F || F->isDeclaration()) 607 continue; 608 609 // Handle the case when this function is called and we only want to care 610 // about always-inline functions. This is a bit of a hack to share code 611 // between here and the InlineAlways pass. 612 if (AlwaysInlineOnly && 613 !F->getAttributes().hasAttribute(AttributeSet::FunctionIndex, 614 Attribute::AlwaysInline)) 615 continue; 616 617 // If the only remaining users of the function are dead constants, remove 618 // them. 619 F->removeDeadConstantUsers(); 620 621 if (!F->isDefTriviallyDead()) 622 continue; 623 624 // Remove any call graph edges from the function to its callees. 625 CGN->removeAllCalledFunctions(); 626 627 // Remove any edges from the external node to the function's call graph 628 // node. These edges might have been made irrelegant due to 629 // optimization of the program. 630 CG.getExternalCallingNode()->removeAnyCallEdgeTo(CGN); 631 632 // Removing the node for callee from the call graph and delete it. 633 FunctionsToRemove.push_back(CGN); 634 } 635 if (FunctionsToRemove.empty()) 636 return false; 637 638 // Now that we know which functions to delete, do so. We didn't want to do 639 // this inline, because that would invalidate our CallGraph::iterator 640 // objects. :( 641 // 642 // Note that it doesn't matter that we are iterating over a non-stable order 643 // here to do this, it doesn't matter which order the functions are deleted 644 // in. 645 array_pod_sort(FunctionsToRemove.begin(), FunctionsToRemove.end()); 646 FunctionsToRemove.erase(std::unique(FunctionsToRemove.begin(), 647 FunctionsToRemove.end()), 648 FunctionsToRemove.end()); 649 for (SmallVectorImpl<CallGraphNode *>::iterator I = FunctionsToRemove.begin(), 650 E = FunctionsToRemove.end(); 651 I != E; ++I) { 652 delete CG.removeFunctionFromModule(*I); 653 ++NumDeleted; 654 } 655 return true; 656 } 657