1 //===- InlineCost.cpp - Cost analysis for inliner -------------------------===// 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 // This file implements inline cost analysis. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "llvm/Analysis/InlineCost.h" 14 #include "llvm/ADT/STLExtras.h" 15 #include "llvm/ADT/SetVector.h" 16 #include "llvm/ADT/SmallPtrSet.h" 17 #include "llvm/ADT/SmallVector.h" 18 #include "llvm/ADT/Statistic.h" 19 #include "llvm/Analysis/AssumptionCache.h" 20 #include "llvm/Analysis/BlockFrequencyInfo.h" 21 #include "llvm/Analysis/CodeMetrics.h" 22 #include "llvm/Analysis/ConstantFolding.h" 23 #include "llvm/Analysis/CFG.h" 24 #include "llvm/Analysis/InstructionSimplify.h" 25 #include "llvm/Analysis/LoopInfo.h" 26 #include "llvm/Analysis/ProfileSummaryInfo.h" 27 #include "llvm/Analysis/TargetTransformInfo.h" 28 #include "llvm/Analysis/ValueTracking.h" 29 #include "llvm/Config/llvm-config.h" 30 #include "llvm/IR/CallSite.h" 31 #include "llvm/IR/CallingConv.h" 32 #include "llvm/IR/DataLayout.h" 33 #include "llvm/IR/Dominators.h" 34 #include "llvm/IR/GetElementPtrTypeIterator.h" 35 #include "llvm/IR/GlobalAlias.h" 36 #include "llvm/IR/InstVisitor.h" 37 #include "llvm/IR/IntrinsicInst.h" 38 #include "llvm/IR/Operator.h" 39 #include "llvm/Support/Debug.h" 40 #include "llvm/Support/raw_ostream.h" 41 42 using namespace llvm; 43 44 #define DEBUG_TYPE "inline-cost" 45 46 STATISTIC(NumCallsAnalyzed, "Number of call sites analyzed"); 47 48 static cl::opt<int> InlineThreshold( 49 "inline-threshold", cl::Hidden, cl::init(225), cl::ZeroOrMore, 50 cl::desc("Control the amount of inlining to perform (default = 225)")); 51 52 static cl::opt<int> HintThreshold( 53 "inlinehint-threshold", cl::Hidden, cl::init(325), cl::ZeroOrMore, 54 cl::desc("Threshold for inlining functions with inline hint")); 55 56 static cl::opt<int> 57 ColdCallSiteThreshold("inline-cold-callsite-threshold", cl::Hidden, 58 cl::init(45), cl::ZeroOrMore, 59 cl::desc("Threshold for inlining cold callsites")); 60 61 // We introduce this threshold to help performance of instrumentation based 62 // PGO before we actually hook up inliner with analysis passes such as BPI and 63 // BFI. 64 static cl::opt<int> ColdThreshold( 65 "inlinecold-threshold", cl::Hidden, cl::init(45), cl::ZeroOrMore, 66 cl::desc("Threshold for inlining functions with cold attribute")); 67 68 static cl::opt<int> 69 HotCallSiteThreshold("hot-callsite-threshold", cl::Hidden, cl::init(3000), 70 cl::ZeroOrMore, 71 cl::desc("Threshold for hot callsites ")); 72 73 static cl::opt<int> LocallyHotCallSiteThreshold( 74 "locally-hot-callsite-threshold", cl::Hidden, cl::init(525), cl::ZeroOrMore, 75 cl::desc("Threshold for locally hot callsites ")); 76 77 static cl::opt<int> ColdCallSiteRelFreq( 78 "cold-callsite-rel-freq", cl::Hidden, cl::init(2), cl::ZeroOrMore, 79 cl::desc("Maximum block frequency, expressed as a percentage of caller's " 80 "entry frequency, for a callsite to be cold in the absence of " 81 "profile information.")); 82 83 static cl::opt<int> HotCallSiteRelFreq( 84 "hot-callsite-rel-freq", cl::Hidden, cl::init(60), cl::ZeroOrMore, 85 cl::desc("Minimum block frequency, expressed as a multiple of caller's " 86 "entry frequency, for a callsite to be hot in the absence of " 87 "profile information.")); 88 89 static cl::opt<bool> OptComputeFullInlineCost( 90 "inline-cost-full", cl::Hidden, cl::init(false), cl::ZeroOrMore, 91 cl::desc("Compute the full inline cost of a call site even when the cost " 92 "exceeds the threshold.")); 93 94 namespace { 95 96 class CallAnalyzer : public InstVisitor<CallAnalyzer, bool> { 97 typedef InstVisitor<CallAnalyzer, bool> Base; 98 friend class InstVisitor<CallAnalyzer, bool>; 99 100 /// The TargetTransformInfo available for this compilation. 101 const TargetTransformInfo &TTI; 102 103 /// Getter for the cache of @llvm.assume intrinsics. 104 std::function<AssumptionCache &(Function &)> &GetAssumptionCache; 105 106 /// Getter for BlockFrequencyInfo 107 Optional<function_ref<BlockFrequencyInfo &(Function &)>> &GetBFI; 108 109 /// Profile summary information. 110 ProfileSummaryInfo *PSI; 111 112 /// The called function. 113 Function &F; 114 115 // Cache the DataLayout since we use it a lot. 116 const DataLayout &DL; 117 118 /// The OptimizationRemarkEmitter available for this compilation. 119 OptimizationRemarkEmitter *ORE; 120 121 /// The candidate callsite being analyzed. Please do not use this to do 122 /// analysis in the caller function; we want the inline cost query to be 123 /// easily cacheable. Instead, use the cover function paramHasAttr. 124 CallSite CandidateCS; 125 126 /// Tunable parameters that control the analysis. 127 const InlineParams &Params; 128 129 int Threshold; 130 int Cost; 131 bool ComputeFullInlineCost; 132 133 bool IsCallerRecursive; 134 bool IsRecursiveCall; 135 bool ExposesReturnsTwice; 136 bool HasDynamicAlloca; 137 bool ContainsNoDuplicateCall; 138 bool HasReturn; 139 bool HasIndirectBr; 140 bool HasUninlineableIntrinsic; 141 bool InitsVargArgs; 142 143 /// Number of bytes allocated statically by the callee. 144 uint64_t AllocatedSize; 145 unsigned NumInstructions, NumVectorInstructions; 146 int VectorBonus, TenPercentVectorBonus; 147 // Bonus to be applied when the callee has only one reachable basic block. 148 int SingleBBBonus; 149 150 /// While we walk the potentially-inlined instructions, we build up and 151 /// maintain a mapping of simplified values specific to this callsite. The 152 /// idea is to propagate any special information we have about arguments to 153 /// this call through the inlinable section of the function, and account for 154 /// likely simplifications post-inlining. The most important aspect we track 155 /// is CFG altering simplifications -- when we prove a basic block dead, that 156 /// can cause dramatic shifts in the cost of inlining a function. 157 DenseMap<Value *, Constant *> SimplifiedValues; 158 159 /// Keep track of the values which map back (through function arguments) to 160 /// allocas on the caller stack which could be simplified through SROA. 161 DenseMap<Value *, Value *> SROAArgValues; 162 163 /// The mapping of caller Alloca values to their accumulated cost savings. If 164 /// we have to disable SROA for one of the allocas, this tells us how much 165 /// cost must be added. 166 DenseMap<Value *, int> SROAArgCosts; 167 168 /// Keep track of values which map to a pointer base and constant offset. 169 DenseMap<Value *, std::pair<Value *, APInt>> ConstantOffsetPtrs; 170 171 /// Keep track of dead blocks due to the constant arguments. 172 SetVector<BasicBlock *> DeadBlocks; 173 174 /// The mapping of the blocks to their known unique successors due to the 175 /// constant arguments. 176 DenseMap<BasicBlock *, BasicBlock *> KnownSuccessors; 177 178 /// Model the elimination of repeated loads that is expected to happen 179 /// whenever we simplify away the stores that would otherwise cause them to be 180 /// loads. 181 bool EnableLoadElimination; 182 SmallPtrSet<Value *, 16> LoadAddrSet; 183 int LoadEliminationCost; 184 185 // Custom simplification helper routines. 186 bool isAllocaDerivedArg(Value *V); 187 bool lookupSROAArgAndCost(Value *V, Value *&Arg, 188 DenseMap<Value *, int>::iterator &CostIt); 189 void disableSROA(DenseMap<Value *, int>::iterator CostIt); 190 void disableSROA(Value *V); 191 void findDeadBlocks(BasicBlock *CurrBB, BasicBlock *NextBB); 192 void accumulateSROACost(DenseMap<Value *, int>::iterator CostIt, 193 int InstructionCost); 194 void disableLoadElimination(); 195 bool isGEPFree(GetElementPtrInst &GEP); 196 bool canFoldInboundsGEP(GetElementPtrInst &I); 197 bool accumulateGEPOffset(GEPOperator &GEP, APInt &Offset); 198 bool simplifyCallSite(Function *F, CallSite CS); 199 template <typename Callable> 200 bool simplifyInstruction(Instruction &I, Callable Evaluate); 201 ConstantInt *stripAndComputeInBoundsConstantOffsets(Value *&V); 202 203 /// Return true if the given argument to the function being considered for 204 /// inlining has the given attribute set either at the call site or the 205 /// function declaration. Primarily used to inspect call site specific 206 /// attributes since these can be more precise than the ones on the callee 207 /// itself. 208 bool paramHasAttr(Argument *A, Attribute::AttrKind Attr); 209 210 /// Return true if the given value is known non null within the callee if 211 /// inlined through this particular callsite. 212 bool isKnownNonNullInCallee(Value *V); 213 214 /// Update Threshold based on callsite properties such as callee 215 /// attributes and callee hotness for PGO builds. The Callee is explicitly 216 /// passed to support analyzing indirect calls whose target is inferred by 217 /// analysis. 218 void updateThreshold(CallSite CS, Function &Callee); 219 220 /// Return true if size growth is allowed when inlining the callee at CS. 221 bool allowSizeGrowth(CallSite CS); 222 223 /// Return true if \p CS is a cold callsite. 224 bool isColdCallSite(CallSite CS, BlockFrequencyInfo *CallerBFI); 225 226 /// Return a higher threshold if \p CS is a hot callsite. 227 Optional<int> getHotCallSiteThreshold(CallSite CS, 228 BlockFrequencyInfo *CallerBFI); 229 230 // Custom analysis routines. 231 InlineResult analyzeBlock(BasicBlock *BB, 232 SmallPtrSetImpl<const Value *> &EphValues); 233 234 // Disable several entry points to the visitor so we don't accidentally use 235 // them by declaring but not defining them here. 236 void visit(Module *); 237 void visit(Module &); 238 void visit(Function *); 239 void visit(Function &); 240 void visit(BasicBlock *); 241 void visit(BasicBlock &); 242 243 // Provide base case for our instruction visit. 244 bool visitInstruction(Instruction &I); 245 246 // Our visit overrides. 247 bool visitAlloca(AllocaInst &I); 248 bool visitPHI(PHINode &I); 249 bool visitGetElementPtr(GetElementPtrInst &I); 250 bool visitBitCast(BitCastInst &I); 251 bool visitPtrToInt(PtrToIntInst &I); 252 bool visitIntToPtr(IntToPtrInst &I); 253 bool visitCastInst(CastInst &I); 254 bool visitUnaryInstruction(UnaryInstruction &I); 255 bool visitCmpInst(CmpInst &I); 256 bool visitSub(BinaryOperator &I); 257 bool visitBinaryOperator(BinaryOperator &I); 258 bool visitLoad(LoadInst &I); 259 bool visitStore(StoreInst &I); 260 bool visitExtractValue(ExtractValueInst &I); 261 bool visitInsertValue(InsertValueInst &I); 262 bool visitCallSite(CallSite CS); 263 bool visitReturnInst(ReturnInst &RI); 264 bool visitBranchInst(BranchInst &BI); 265 bool visitSelectInst(SelectInst &SI); 266 bool visitSwitchInst(SwitchInst &SI); 267 bool visitIndirectBrInst(IndirectBrInst &IBI); 268 bool visitResumeInst(ResumeInst &RI); 269 bool visitCleanupReturnInst(CleanupReturnInst &RI); 270 bool visitCatchReturnInst(CatchReturnInst &RI); 271 bool visitUnreachableInst(UnreachableInst &I); 272 273 public: 274 CallAnalyzer(const TargetTransformInfo &TTI, 275 std::function<AssumptionCache &(Function &)> &GetAssumptionCache, 276 Optional<function_ref<BlockFrequencyInfo &(Function &)>> &GetBFI, 277 ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE, 278 Function &Callee, CallSite CSArg, const InlineParams &Params) 279 : TTI(TTI), GetAssumptionCache(GetAssumptionCache), GetBFI(GetBFI), 280 PSI(PSI), F(Callee), DL(F.getParent()->getDataLayout()), ORE(ORE), 281 CandidateCS(CSArg), Params(Params), Threshold(Params.DefaultThreshold), 282 Cost(0), ComputeFullInlineCost(OptComputeFullInlineCost || 283 Params.ComputeFullInlineCost || ORE), 284 IsCallerRecursive(false), IsRecursiveCall(false), 285 ExposesReturnsTwice(false), HasDynamicAlloca(false), 286 ContainsNoDuplicateCall(false), HasReturn(false), HasIndirectBr(false), 287 HasUninlineableIntrinsic(false), InitsVargArgs(false), AllocatedSize(0), 288 NumInstructions(0), NumVectorInstructions(0), VectorBonus(0), 289 SingleBBBonus(0), EnableLoadElimination(true), LoadEliminationCost(0), 290 NumConstantArgs(0), NumConstantOffsetPtrArgs(0), NumAllocaArgs(0), 291 NumConstantPtrCmps(0), NumConstantPtrDiffs(0), 292 NumInstructionsSimplified(0), SROACostSavings(0), 293 SROACostSavingsLost(0) {} 294 295 InlineResult analyzeCall(CallSite CS); 296 297 int getThreshold() { return Threshold; } 298 int getCost() { return Cost; } 299 300 // Keep a bunch of stats about the cost savings found so we can print them 301 // out when debugging. 302 unsigned NumConstantArgs; 303 unsigned NumConstantOffsetPtrArgs; 304 unsigned NumAllocaArgs; 305 unsigned NumConstantPtrCmps; 306 unsigned NumConstantPtrDiffs; 307 unsigned NumInstructionsSimplified; 308 unsigned SROACostSavings; 309 unsigned SROACostSavingsLost; 310 311 void dump(); 312 }; 313 314 } // namespace 315 316 /// Test whether the given value is an Alloca-derived function argument. 317 bool CallAnalyzer::isAllocaDerivedArg(Value *V) { 318 return SROAArgValues.count(V); 319 } 320 321 /// Lookup the SROA-candidate argument and cost iterator which V maps to. 322 /// Returns false if V does not map to a SROA-candidate. 323 bool CallAnalyzer::lookupSROAArgAndCost( 324 Value *V, Value *&Arg, DenseMap<Value *, int>::iterator &CostIt) { 325 if (SROAArgValues.empty() || SROAArgCosts.empty()) 326 return false; 327 328 DenseMap<Value *, Value *>::iterator ArgIt = SROAArgValues.find(V); 329 if (ArgIt == SROAArgValues.end()) 330 return false; 331 332 Arg = ArgIt->second; 333 CostIt = SROAArgCosts.find(Arg); 334 return CostIt != SROAArgCosts.end(); 335 } 336 337 /// Disable SROA for the candidate marked by this cost iterator. 338 /// 339 /// This marks the candidate as no longer viable for SROA, and adds the cost 340 /// savings associated with it back into the inline cost measurement. 341 void CallAnalyzer::disableSROA(DenseMap<Value *, int>::iterator CostIt) { 342 // If we're no longer able to perform SROA we need to undo its cost savings 343 // and prevent subsequent analysis. 344 Cost += CostIt->second; 345 SROACostSavings -= CostIt->second; 346 SROACostSavingsLost += CostIt->second; 347 SROAArgCosts.erase(CostIt); 348 disableLoadElimination(); 349 } 350 351 /// If 'V' maps to a SROA candidate, disable SROA for it. 352 void CallAnalyzer::disableSROA(Value *V) { 353 Value *SROAArg; 354 DenseMap<Value *, int>::iterator CostIt; 355 if (lookupSROAArgAndCost(V, SROAArg, CostIt)) 356 disableSROA(CostIt); 357 } 358 359 /// Accumulate the given cost for a particular SROA candidate. 360 void CallAnalyzer::accumulateSROACost(DenseMap<Value *, int>::iterator CostIt, 361 int InstructionCost) { 362 CostIt->second += InstructionCost; 363 SROACostSavings += InstructionCost; 364 } 365 366 void CallAnalyzer::disableLoadElimination() { 367 if (EnableLoadElimination) { 368 Cost += LoadEliminationCost; 369 LoadEliminationCost = 0; 370 EnableLoadElimination = false; 371 } 372 } 373 374 /// Accumulate a constant GEP offset into an APInt if possible. 375 /// 376 /// Returns false if unable to compute the offset for any reason. Respects any 377 /// simplified values known during the analysis of this callsite. 378 bool CallAnalyzer::accumulateGEPOffset(GEPOperator &GEP, APInt &Offset) { 379 unsigned IntPtrWidth = DL.getIndexTypeSizeInBits(GEP.getType()); 380 assert(IntPtrWidth == Offset.getBitWidth()); 381 382 for (gep_type_iterator GTI = gep_type_begin(GEP), GTE = gep_type_end(GEP); 383 GTI != GTE; ++GTI) { 384 ConstantInt *OpC = dyn_cast<ConstantInt>(GTI.getOperand()); 385 if (!OpC) 386 if (Constant *SimpleOp = SimplifiedValues.lookup(GTI.getOperand())) 387 OpC = dyn_cast<ConstantInt>(SimpleOp); 388 if (!OpC) 389 return false; 390 if (OpC->isZero()) 391 continue; 392 393 // Handle a struct index, which adds its field offset to the pointer. 394 if (StructType *STy = GTI.getStructTypeOrNull()) { 395 unsigned ElementIdx = OpC->getZExtValue(); 396 const StructLayout *SL = DL.getStructLayout(STy); 397 Offset += APInt(IntPtrWidth, SL->getElementOffset(ElementIdx)); 398 continue; 399 } 400 401 APInt TypeSize(IntPtrWidth, DL.getTypeAllocSize(GTI.getIndexedType())); 402 Offset += OpC->getValue().sextOrTrunc(IntPtrWidth) * TypeSize; 403 } 404 return true; 405 } 406 407 /// Use TTI to check whether a GEP is free. 408 /// 409 /// Respects any simplified values known during the analysis of this callsite. 410 bool CallAnalyzer::isGEPFree(GetElementPtrInst &GEP) { 411 SmallVector<Value *, 4> Operands; 412 Operands.push_back(GEP.getOperand(0)); 413 for (User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end(); I != E; ++I) 414 if (Constant *SimpleOp = SimplifiedValues.lookup(*I)) 415 Operands.push_back(SimpleOp); 416 else 417 Operands.push_back(*I); 418 return TargetTransformInfo::TCC_Free == TTI.getUserCost(&GEP, Operands); 419 } 420 421 bool CallAnalyzer::visitAlloca(AllocaInst &I) { 422 // Check whether inlining will turn a dynamic alloca into a static 423 // alloca and handle that case. 424 if (I.isArrayAllocation()) { 425 Constant *Size = SimplifiedValues.lookup(I.getArraySize()); 426 if (auto *AllocSize = dyn_cast_or_null<ConstantInt>(Size)) { 427 Type *Ty = I.getAllocatedType(); 428 AllocatedSize = SaturatingMultiplyAdd( 429 AllocSize->getLimitedValue(), DL.getTypeAllocSize(Ty), AllocatedSize); 430 return Base::visitAlloca(I); 431 } 432 } 433 434 // Accumulate the allocated size. 435 if (I.isStaticAlloca()) { 436 Type *Ty = I.getAllocatedType(); 437 AllocatedSize = SaturatingAdd(DL.getTypeAllocSize(Ty), AllocatedSize); 438 } 439 440 // We will happily inline static alloca instructions. 441 if (I.isStaticAlloca()) 442 return Base::visitAlloca(I); 443 444 // FIXME: This is overly conservative. Dynamic allocas are inefficient for 445 // a variety of reasons, and so we would like to not inline them into 446 // functions which don't currently have a dynamic alloca. This simply 447 // disables inlining altogether in the presence of a dynamic alloca. 448 HasDynamicAlloca = true; 449 return false; 450 } 451 452 bool CallAnalyzer::visitPHI(PHINode &I) { 453 // FIXME: We need to propagate SROA *disabling* through phi nodes, even 454 // though we don't want to propagate it's bonuses. The idea is to disable 455 // SROA if it *might* be used in an inappropriate manner. 456 457 // Phi nodes are always zero-cost. 458 // FIXME: Pointer sizes may differ between different address spaces, so do we 459 // need to use correct address space in the call to getPointerSizeInBits here? 460 // Or could we skip the getPointerSizeInBits call completely? As far as I can 461 // see the ZeroOffset is used as a dummy value, so we can probably use any 462 // bit width for the ZeroOffset? 463 APInt ZeroOffset = APInt::getNullValue(DL.getPointerSizeInBits(0)); 464 bool CheckSROA = I.getType()->isPointerTy(); 465 466 // Track the constant or pointer with constant offset we've seen so far. 467 Constant *FirstC = nullptr; 468 std::pair<Value *, APInt> FirstBaseAndOffset = {nullptr, ZeroOffset}; 469 Value *FirstV = nullptr; 470 471 for (unsigned i = 0, e = I.getNumIncomingValues(); i != e; ++i) { 472 BasicBlock *Pred = I.getIncomingBlock(i); 473 // If the incoming block is dead, skip the incoming block. 474 if (DeadBlocks.count(Pred)) 475 continue; 476 // If the parent block of phi is not the known successor of the incoming 477 // block, skip the incoming block. 478 BasicBlock *KnownSuccessor = KnownSuccessors[Pred]; 479 if (KnownSuccessor && KnownSuccessor != I.getParent()) 480 continue; 481 482 Value *V = I.getIncomingValue(i); 483 // If the incoming value is this phi itself, skip the incoming value. 484 if (&I == V) 485 continue; 486 487 Constant *C = dyn_cast<Constant>(V); 488 if (!C) 489 C = SimplifiedValues.lookup(V); 490 491 std::pair<Value *, APInt> BaseAndOffset = {nullptr, ZeroOffset}; 492 if (!C && CheckSROA) 493 BaseAndOffset = ConstantOffsetPtrs.lookup(V); 494 495 if (!C && !BaseAndOffset.first) 496 // The incoming value is neither a constant nor a pointer with constant 497 // offset, exit early. 498 return true; 499 500 if (FirstC) { 501 if (FirstC == C) 502 // If we've seen a constant incoming value before and it is the same 503 // constant we see this time, continue checking the next incoming value. 504 continue; 505 // Otherwise early exit because we either see a different constant or saw 506 // a constant before but we have a pointer with constant offset this time. 507 return true; 508 } 509 510 if (FirstV) { 511 // The same logic as above, but check pointer with constant offset here. 512 if (FirstBaseAndOffset == BaseAndOffset) 513 continue; 514 return true; 515 } 516 517 if (C) { 518 // This is the 1st time we've seen a constant, record it. 519 FirstC = C; 520 continue; 521 } 522 523 // The remaining case is that this is the 1st time we've seen a pointer with 524 // constant offset, record it. 525 FirstV = V; 526 FirstBaseAndOffset = BaseAndOffset; 527 } 528 529 // Check if we can map phi to a constant. 530 if (FirstC) { 531 SimplifiedValues[&I] = FirstC; 532 return true; 533 } 534 535 // Check if we can map phi to a pointer with constant offset. 536 if (FirstBaseAndOffset.first) { 537 ConstantOffsetPtrs[&I] = FirstBaseAndOffset; 538 539 Value *SROAArg; 540 DenseMap<Value *, int>::iterator CostIt; 541 if (lookupSROAArgAndCost(FirstV, SROAArg, CostIt)) 542 SROAArgValues[&I] = SROAArg; 543 } 544 545 return true; 546 } 547 548 /// Check we can fold GEPs of constant-offset call site argument pointers. 549 /// This requires target data and inbounds GEPs. 550 /// 551 /// \return true if the specified GEP can be folded. 552 bool CallAnalyzer::canFoldInboundsGEP(GetElementPtrInst &I) { 553 // Check if we have a base + offset for the pointer. 554 std::pair<Value *, APInt> BaseAndOffset = 555 ConstantOffsetPtrs.lookup(I.getPointerOperand()); 556 if (!BaseAndOffset.first) 557 return false; 558 559 // Check if the offset of this GEP is constant, and if so accumulate it 560 // into Offset. 561 if (!accumulateGEPOffset(cast<GEPOperator>(I), BaseAndOffset.second)) 562 return false; 563 564 // Add the result as a new mapping to Base + Offset. 565 ConstantOffsetPtrs[&I] = BaseAndOffset; 566 567 return true; 568 } 569 570 bool CallAnalyzer::visitGetElementPtr(GetElementPtrInst &I) { 571 Value *SROAArg; 572 DenseMap<Value *, int>::iterator CostIt; 573 bool SROACandidate = 574 lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt); 575 576 // Lambda to check whether a GEP's indices are all constant. 577 auto IsGEPOffsetConstant = [&](GetElementPtrInst &GEP) { 578 for (User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end(); I != E; ++I) 579 if (!isa<Constant>(*I) && !SimplifiedValues.lookup(*I)) 580 return false; 581 return true; 582 }; 583 584 if ((I.isInBounds() && canFoldInboundsGEP(I)) || IsGEPOffsetConstant(I)) { 585 if (SROACandidate) 586 SROAArgValues[&I] = SROAArg; 587 588 // Constant GEPs are modeled as free. 589 return true; 590 } 591 592 // Variable GEPs will require math and will disable SROA. 593 if (SROACandidate) 594 disableSROA(CostIt); 595 return isGEPFree(I); 596 } 597 598 /// Simplify \p I if its operands are constants and update SimplifiedValues. 599 /// \p Evaluate is a callable specific to instruction type that evaluates the 600 /// instruction when all the operands are constants. 601 template <typename Callable> 602 bool CallAnalyzer::simplifyInstruction(Instruction &I, Callable Evaluate) { 603 SmallVector<Constant *, 2> COps; 604 for (Value *Op : I.operands()) { 605 Constant *COp = dyn_cast<Constant>(Op); 606 if (!COp) 607 COp = SimplifiedValues.lookup(Op); 608 if (!COp) 609 return false; 610 COps.push_back(COp); 611 } 612 auto *C = Evaluate(COps); 613 if (!C) 614 return false; 615 SimplifiedValues[&I] = C; 616 return true; 617 } 618 619 bool CallAnalyzer::visitBitCast(BitCastInst &I) { 620 // Propagate constants through bitcasts. 621 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 622 return ConstantExpr::getBitCast(COps[0], I.getType()); 623 })) 624 return true; 625 626 // Track base/offsets through casts 627 std::pair<Value *, APInt> BaseAndOffset = 628 ConstantOffsetPtrs.lookup(I.getOperand(0)); 629 // Casts don't change the offset, just wrap it up. 630 if (BaseAndOffset.first) 631 ConstantOffsetPtrs[&I] = BaseAndOffset; 632 633 // Also look for SROA candidates here. 634 Value *SROAArg; 635 DenseMap<Value *, int>::iterator CostIt; 636 if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt)) 637 SROAArgValues[&I] = SROAArg; 638 639 // Bitcasts are always zero cost. 640 return true; 641 } 642 643 bool CallAnalyzer::visitPtrToInt(PtrToIntInst &I) { 644 // Propagate constants through ptrtoint. 645 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 646 return ConstantExpr::getPtrToInt(COps[0], I.getType()); 647 })) 648 return true; 649 650 // Track base/offset pairs when converted to a plain integer provided the 651 // integer is large enough to represent the pointer. 652 unsigned IntegerSize = I.getType()->getScalarSizeInBits(); 653 unsigned AS = I.getOperand(0)->getType()->getPointerAddressSpace(); 654 if (IntegerSize >= DL.getPointerSizeInBits(AS)) { 655 std::pair<Value *, APInt> BaseAndOffset = 656 ConstantOffsetPtrs.lookup(I.getOperand(0)); 657 if (BaseAndOffset.first) 658 ConstantOffsetPtrs[&I] = BaseAndOffset; 659 } 660 661 // This is really weird. Technically, ptrtoint will disable SROA. However, 662 // unless that ptrtoint is *used* somewhere in the live basic blocks after 663 // inlining, it will be nuked, and SROA should proceed. All of the uses which 664 // would block SROA would also block SROA if applied directly to a pointer, 665 // and so we can just add the integer in here. The only places where SROA is 666 // preserved either cannot fire on an integer, or won't in-and-of themselves 667 // disable SROA (ext) w/o some later use that we would see and disable. 668 Value *SROAArg; 669 DenseMap<Value *, int>::iterator CostIt; 670 if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt)) 671 SROAArgValues[&I] = SROAArg; 672 673 return TargetTransformInfo::TCC_Free == TTI.getUserCost(&I); 674 } 675 676 bool CallAnalyzer::visitIntToPtr(IntToPtrInst &I) { 677 // Propagate constants through ptrtoint. 678 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 679 return ConstantExpr::getIntToPtr(COps[0], I.getType()); 680 })) 681 return true; 682 683 // Track base/offset pairs when round-tripped through a pointer without 684 // modifications provided the integer is not too large. 685 Value *Op = I.getOperand(0); 686 unsigned IntegerSize = Op->getType()->getScalarSizeInBits(); 687 if (IntegerSize <= DL.getPointerTypeSizeInBits(I.getType())) { 688 std::pair<Value *, APInt> BaseAndOffset = ConstantOffsetPtrs.lookup(Op); 689 if (BaseAndOffset.first) 690 ConstantOffsetPtrs[&I] = BaseAndOffset; 691 } 692 693 // "Propagate" SROA here in the same manner as we do for ptrtoint above. 694 Value *SROAArg; 695 DenseMap<Value *, int>::iterator CostIt; 696 if (lookupSROAArgAndCost(Op, SROAArg, CostIt)) 697 SROAArgValues[&I] = SROAArg; 698 699 return TargetTransformInfo::TCC_Free == TTI.getUserCost(&I); 700 } 701 702 bool CallAnalyzer::visitCastInst(CastInst &I) { 703 // Propagate constants through ptrtoint. 704 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 705 return ConstantExpr::getCast(I.getOpcode(), COps[0], I.getType()); 706 })) 707 return true; 708 709 // Disable SROA in the face of arbitrary casts we don't whitelist elsewhere. 710 disableSROA(I.getOperand(0)); 711 712 // If this is a floating-point cast, and the target says this operation 713 // is expensive, this may eventually become a library call. Treat the cost 714 // as such. 715 switch (I.getOpcode()) { 716 case Instruction::FPTrunc: 717 case Instruction::FPExt: 718 case Instruction::UIToFP: 719 case Instruction::SIToFP: 720 case Instruction::FPToUI: 721 case Instruction::FPToSI: 722 if (TTI.getFPOpCost(I.getType()) == TargetTransformInfo::TCC_Expensive) 723 Cost += InlineConstants::CallPenalty; 724 break; 725 default: 726 break; 727 } 728 729 return TargetTransformInfo::TCC_Free == TTI.getUserCost(&I); 730 } 731 732 bool CallAnalyzer::visitUnaryInstruction(UnaryInstruction &I) { 733 Value *Operand = I.getOperand(0); 734 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 735 return ConstantFoldInstOperands(&I, COps[0], DL); 736 })) 737 return true; 738 739 // Disable any SROA on the argument to arbitrary unary operators. 740 disableSROA(Operand); 741 742 return false; 743 } 744 745 bool CallAnalyzer::paramHasAttr(Argument *A, Attribute::AttrKind Attr) { 746 return CandidateCS.paramHasAttr(A->getArgNo(), Attr); 747 } 748 749 bool CallAnalyzer::isKnownNonNullInCallee(Value *V) { 750 // Does the *call site* have the NonNull attribute set on an argument? We 751 // use the attribute on the call site to memoize any analysis done in the 752 // caller. This will also trip if the callee function has a non-null 753 // parameter attribute, but that's a less interesting case because hopefully 754 // the callee would already have been simplified based on that. 755 if (Argument *A = dyn_cast<Argument>(V)) 756 if (paramHasAttr(A, Attribute::NonNull)) 757 return true; 758 759 // Is this an alloca in the caller? This is distinct from the attribute case 760 // above because attributes aren't updated within the inliner itself and we 761 // always want to catch the alloca derived case. 762 if (isAllocaDerivedArg(V)) 763 // We can actually predict the result of comparisons between an 764 // alloca-derived value and null. Note that this fires regardless of 765 // SROA firing. 766 return true; 767 768 return false; 769 } 770 771 bool CallAnalyzer::allowSizeGrowth(CallSite CS) { 772 // If the normal destination of the invoke or the parent block of the call 773 // site is unreachable-terminated, there is little point in inlining this 774 // unless there is literally zero cost. 775 // FIXME: Note that it is possible that an unreachable-terminated block has a 776 // hot entry. For example, in below scenario inlining hot_call_X() may be 777 // beneficial : 778 // main() { 779 // hot_call_1(); 780 // ... 781 // hot_call_N() 782 // exit(0); 783 // } 784 // For now, we are not handling this corner case here as it is rare in real 785 // code. In future, we should elaborate this based on BPI and BFI in more 786 // general threshold adjusting heuristics in updateThreshold(). 787 Instruction *Instr = CS.getInstruction(); 788 if (InvokeInst *II = dyn_cast<InvokeInst>(Instr)) { 789 if (isa<UnreachableInst>(II->getNormalDest()->getTerminator())) 790 return false; 791 } else if (isa<UnreachableInst>(Instr->getParent()->getTerminator())) 792 return false; 793 794 return true; 795 } 796 797 bool CallAnalyzer::isColdCallSite(CallSite CS, BlockFrequencyInfo *CallerBFI) { 798 // If global profile summary is available, then callsite's coldness is 799 // determined based on that. 800 if (PSI && PSI->hasProfileSummary()) 801 return PSI->isColdCallSite(CS, CallerBFI); 802 803 // Otherwise we need BFI to be available. 804 if (!CallerBFI) 805 return false; 806 807 // Determine if the callsite is cold relative to caller's entry. We could 808 // potentially cache the computation of scaled entry frequency, but the added 809 // complexity is not worth it unless this scaling shows up high in the 810 // profiles. 811 const BranchProbability ColdProb(ColdCallSiteRelFreq, 100); 812 auto CallSiteBB = CS.getInstruction()->getParent(); 813 auto CallSiteFreq = CallerBFI->getBlockFreq(CallSiteBB); 814 auto CallerEntryFreq = 815 CallerBFI->getBlockFreq(&(CS.getCaller()->getEntryBlock())); 816 return CallSiteFreq < CallerEntryFreq * ColdProb; 817 } 818 819 Optional<int> 820 CallAnalyzer::getHotCallSiteThreshold(CallSite CS, 821 BlockFrequencyInfo *CallerBFI) { 822 823 // If global profile summary is available, then callsite's hotness is 824 // determined based on that. 825 if (PSI && PSI->hasProfileSummary() && PSI->isHotCallSite(CS, CallerBFI)) 826 return Params.HotCallSiteThreshold; 827 828 // Otherwise we need BFI to be available and to have a locally hot callsite 829 // threshold. 830 if (!CallerBFI || !Params.LocallyHotCallSiteThreshold) 831 return None; 832 833 // Determine if the callsite is hot relative to caller's entry. We could 834 // potentially cache the computation of scaled entry frequency, but the added 835 // complexity is not worth it unless this scaling shows up high in the 836 // profiles. 837 auto CallSiteBB = CS.getInstruction()->getParent(); 838 auto CallSiteFreq = CallerBFI->getBlockFreq(CallSiteBB).getFrequency(); 839 auto CallerEntryFreq = CallerBFI->getEntryFreq(); 840 if (CallSiteFreq >= CallerEntryFreq * HotCallSiteRelFreq) 841 return Params.LocallyHotCallSiteThreshold; 842 843 // Otherwise treat it normally. 844 return None; 845 } 846 847 void CallAnalyzer::updateThreshold(CallSite CS, Function &Callee) { 848 // If no size growth is allowed for this inlining, set Threshold to 0. 849 if (!allowSizeGrowth(CS)) { 850 Threshold = 0; 851 return; 852 } 853 854 Function *Caller = CS.getCaller(); 855 856 // return min(A, B) if B is valid. 857 auto MinIfValid = [](int A, Optional<int> B) { 858 return B ? std::min(A, B.getValue()) : A; 859 }; 860 861 // return max(A, B) if B is valid. 862 auto MaxIfValid = [](int A, Optional<int> B) { 863 return B ? std::max(A, B.getValue()) : A; 864 }; 865 866 // Various bonus percentages. These are multiplied by Threshold to get the 867 // bonus values. 868 // SingleBBBonus: This bonus is applied if the callee has a single reachable 869 // basic block at the given callsite context. This is speculatively applied 870 // and withdrawn if more than one basic block is seen. 871 // 872 // Vector bonuses: We want to more aggressively inline vector-dense kernels 873 // and apply this bonus based on the percentage of vector instructions. A 874 // bonus is applied if the vector instructions exceed 50% and half that amount 875 // is applied if it exceeds 10%. Note that these bonuses are some what 876 // arbitrary and evolved over time by accident as much as because they are 877 // principled bonuses. 878 // FIXME: It would be nice to base the bonus values on something more 879 // scientific. 880 // 881 // LstCallToStaticBonus: This large bonus is applied to ensure the inlining 882 // of the last call to a static function as inlining such functions is 883 // guaranteed to reduce code size. 884 // 885 // These bonus percentages may be set to 0 based on properties of the caller 886 // and the callsite. 887 int SingleBBBonusPercent = 50; 888 int VectorBonusPercent = 150; 889 int LastCallToStaticBonus = InlineConstants::LastCallToStaticBonus; 890 891 // Lambda to set all the above bonus and bonus percentages to 0. 892 auto DisallowAllBonuses = [&]() { 893 SingleBBBonusPercent = 0; 894 VectorBonusPercent = 0; 895 LastCallToStaticBonus = 0; 896 }; 897 898 // Use the OptMinSizeThreshold or OptSizeThreshold knob if they are available 899 // and reduce the threshold if the caller has the necessary attribute. 900 if (Caller->optForMinSize()) { 901 Threshold = MinIfValid(Threshold, Params.OptMinSizeThreshold); 902 // For minsize, we want to disable the single BB bonus and the vector 903 // bonuses, but not the last-call-to-static bonus. Inlining the last call to 904 // a static function will, at the minimum, eliminate the parameter setup and 905 // call/return instructions. 906 SingleBBBonusPercent = 0; 907 VectorBonusPercent = 0; 908 } else if (Caller->optForSize()) 909 Threshold = MinIfValid(Threshold, Params.OptSizeThreshold); 910 911 // Adjust the threshold based on inlinehint attribute and profile based 912 // hotness information if the caller does not have MinSize attribute. 913 if (!Caller->optForMinSize()) { 914 if (Callee.hasFnAttribute(Attribute::InlineHint)) 915 Threshold = MaxIfValid(Threshold, Params.HintThreshold); 916 917 // FIXME: After switching to the new passmanager, simplify the logic below 918 // by checking only the callsite hotness/coldness as we will reliably 919 // have local profile information. 920 // 921 // Callsite hotness and coldness can be determined if sample profile is 922 // used (which adds hotness metadata to calls) or if caller's 923 // BlockFrequencyInfo is available. 924 BlockFrequencyInfo *CallerBFI = GetBFI ? &((*GetBFI)(*Caller)) : nullptr; 925 auto HotCallSiteThreshold = getHotCallSiteThreshold(CS, CallerBFI); 926 if (!Caller->optForSize() && HotCallSiteThreshold) { 927 LLVM_DEBUG(dbgs() << "Hot callsite.\n"); 928 // FIXME: This should update the threshold only if it exceeds the 929 // current threshold, but AutoFDO + ThinLTO currently relies on this 930 // behavior to prevent inlining of hot callsites during ThinLTO 931 // compile phase. 932 Threshold = HotCallSiteThreshold.getValue(); 933 } else if (isColdCallSite(CS, CallerBFI)) { 934 LLVM_DEBUG(dbgs() << "Cold callsite.\n"); 935 // Do not apply bonuses for a cold callsite including the 936 // LastCallToStatic bonus. While this bonus might result in code size 937 // reduction, it can cause the size of a non-cold caller to increase 938 // preventing it from being inlined. 939 DisallowAllBonuses(); 940 Threshold = MinIfValid(Threshold, Params.ColdCallSiteThreshold); 941 } else if (PSI) { 942 // Use callee's global profile information only if we have no way of 943 // determining this via callsite information. 944 if (PSI->isFunctionEntryHot(&Callee)) { 945 LLVM_DEBUG(dbgs() << "Hot callee.\n"); 946 // If callsite hotness can not be determined, we may still know 947 // that the callee is hot and treat it as a weaker hint for threshold 948 // increase. 949 Threshold = MaxIfValid(Threshold, Params.HintThreshold); 950 } else if (PSI->isFunctionEntryCold(&Callee)) { 951 LLVM_DEBUG(dbgs() << "Cold callee.\n"); 952 // Do not apply bonuses for a cold callee including the 953 // LastCallToStatic bonus. While this bonus might result in code size 954 // reduction, it can cause the size of a non-cold caller to increase 955 // preventing it from being inlined. 956 DisallowAllBonuses(); 957 Threshold = MinIfValid(Threshold, Params.ColdThreshold); 958 } 959 } 960 } 961 962 // Finally, take the target-specific inlining threshold multiplier into 963 // account. 964 Threshold *= TTI.getInliningThresholdMultiplier(); 965 966 SingleBBBonus = Threshold * SingleBBBonusPercent / 100; 967 VectorBonus = Threshold * VectorBonusPercent / 100; 968 969 bool OnlyOneCallAndLocalLinkage = 970 F.hasLocalLinkage() && F.hasOneUse() && &F == CS.getCalledFunction(); 971 // If there is only one call of the function, and it has internal linkage, 972 // the cost of inlining it drops dramatically. It may seem odd to update 973 // Cost in updateThreshold, but the bonus depends on the logic in this method. 974 if (OnlyOneCallAndLocalLinkage) 975 Cost -= LastCallToStaticBonus; 976 } 977 978 bool CallAnalyzer::visitCmpInst(CmpInst &I) { 979 Value *LHS = I.getOperand(0), *RHS = I.getOperand(1); 980 // First try to handle simplified comparisons. 981 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 982 return ConstantExpr::getCompare(I.getPredicate(), COps[0], COps[1]); 983 })) 984 return true; 985 986 if (I.getOpcode() == Instruction::FCmp) 987 return false; 988 989 // Otherwise look for a comparison between constant offset pointers with 990 // a common base. 991 Value *LHSBase, *RHSBase; 992 APInt LHSOffset, RHSOffset; 993 std::tie(LHSBase, LHSOffset) = ConstantOffsetPtrs.lookup(LHS); 994 if (LHSBase) { 995 std::tie(RHSBase, RHSOffset) = ConstantOffsetPtrs.lookup(RHS); 996 if (RHSBase && LHSBase == RHSBase) { 997 // We have common bases, fold the icmp to a constant based on the 998 // offsets. 999 Constant *CLHS = ConstantInt::get(LHS->getContext(), LHSOffset); 1000 Constant *CRHS = ConstantInt::get(RHS->getContext(), RHSOffset); 1001 if (Constant *C = ConstantExpr::getICmp(I.getPredicate(), CLHS, CRHS)) { 1002 SimplifiedValues[&I] = C; 1003 ++NumConstantPtrCmps; 1004 return true; 1005 } 1006 } 1007 } 1008 1009 // If the comparison is an equality comparison with null, we can simplify it 1010 // if we know the value (argument) can't be null 1011 if (I.isEquality() && isa<ConstantPointerNull>(I.getOperand(1)) && 1012 isKnownNonNullInCallee(I.getOperand(0))) { 1013 bool IsNotEqual = I.getPredicate() == CmpInst::ICMP_NE; 1014 SimplifiedValues[&I] = IsNotEqual ? ConstantInt::getTrue(I.getType()) 1015 : ConstantInt::getFalse(I.getType()); 1016 return true; 1017 } 1018 // Finally check for SROA candidates in comparisons. 1019 Value *SROAArg; 1020 DenseMap<Value *, int>::iterator CostIt; 1021 if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt)) { 1022 if (isa<ConstantPointerNull>(I.getOperand(1))) { 1023 accumulateSROACost(CostIt, InlineConstants::InstrCost); 1024 return true; 1025 } 1026 1027 disableSROA(CostIt); 1028 } 1029 1030 return false; 1031 } 1032 1033 bool CallAnalyzer::visitSub(BinaryOperator &I) { 1034 // Try to handle a special case: we can fold computing the difference of two 1035 // constant-related pointers. 1036 Value *LHS = I.getOperand(0), *RHS = I.getOperand(1); 1037 Value *LHSBase, *RHSBase; 1038 APInt LHSOffset, RHSOffset; 1039 std::tie(LHSBase, LHSOffset) = ConstantOffsetPtrs.lookup(LHS); 1040 if (LHSBase) { 1041 std::tie(RHSBase, RHSOffset) = ConstantOffsetPtrs.lookup(RHS); 1042 if (RHSBase && LHSBase == RHSBase) { 1043 // We have common bases, fold the subtract to a constant based on the 1044 // offsets. 1045 Constant *CLHS = ConstantInt::get(LHS->getContext(), LHSOffset); 1046 Constant *CRHS = ConstantInt::get(RHS->getContext(), RHSOffset); 1047 if (Constant *C = ConstantExpr::getSub(CLHS, CRHS)) { 1048 SimplifiedValues[&I] = C; 1049 ++NumConstantPtrDiffs; 1050 return true; 1051 } 1052 } 1053 } 1054 1055 // Otherwise, fall back to the generic logic for simplifying and handling 1056 // instructions. 1057 return Base::visitSub(I); 1058 } 1059 1060 bool CallAnalyzer::visitBinaryOperator(BinaryOperator &I) { 1061 Value *LHS = I.getOperand(0), *RHS = I.getOperand(1); 1062 Constant *CLHS = dyn_cast<Constant>(LHS); 1063 if (!CLHS) 1064 CLHS = SimplifiedValues.lookup(LHS); 1065 Constant *CRHS = dyn_cast<Constant>(RHS); 1066 if (!CRHS) 1067 CRHS = SimplifiedValues.lookup(RHS); 1068 1069 Value *SimpleV = nullptr; 1070 if (auto FI = dyn_cast<FPMathOperator>(&I)) 1071 SimpleV = SimplifyFPBinOp(I.getOpcode(), CLHS ? CLHS : LHS, 1072 CRHS ? CRHS : RHS, FI->getFastMathFlags(), DL); 1073 else 1074 SimpleV = 1075 SimplifyBinOp(I.getOpcode(), CLHS ? CLHS : LHS, CRHS ? CRHS : RHS, DL); 1076 1077 if (Constant *C = dyn_cast_or_null<Constant>(SimpleV)) 1078 SimplifiedValues[&I] = C; 1079 1080 if (SimpleV) 1081 return true; 1082 1083 // Disable any SROA on arguments to arbitrary, unsimplified binary operators. 1084 disableSROA(LHS); 1085 disableSROA(RHS); 1086 1087 // If the instruction is floating point, and the target says this operation 1088 // is expensive, this may eventually become a library call. Treat the cost 1089 // as such. 1090 if (I.getType()->isFloatingPointTy() && 1091 TTI.getFPOpCost(I.getType()) == TargetTransformInfo::TCC_Expensive) 1092 Cost += InlineConstants::CallPenalty; 1093 1094 return false; 1095 } 1096 1097 bool CallAnalyzer::visitLoad(LoadInst &I) { 1098 Value *SROAArg; 1099 DenseMap<Value *, int>::iterator CostIt; 1100 if (lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt)) { 1101 if (I.isSimple()) { 1102 accumulateSROACost(CostIt, InlineConstants::InstrCost); 1103 return true; 1104 } 1105 1106 disableSROA(CostIt); 1107 } 1108 1109 // If the data is already loaded from this address and hasn't been clobbered 1110 // by any stores or calls, this load is likely to be redundant and can be 1111 // eliminated. 1112 if (EnableLoadElimination && 1113 !LoadAddrSet.insert(I.getPointerOperand()).second && I.isUnordered()) { 1114 LoadEliminationCost += InlineConstants::InstrCost; 1115 return true; 1116 } 1117 1118 return false; 1119 } 1120 1121 bool CallAnalyzer::visitStore(StoreInst &I) { 1122 Value *SROAArg; 1123 DenseMap<Value *, int>::iterator CostIt; 1124 if (lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt)) { 1125 if (I.isSimple()) { 1126 accumulateSROACost(CostIt, InlineConstants::InstrCost); 1127 return true; 1128 } 1129 1130 disableSROA(CostIt); 1131 } 1132 1133 // The store can potentially clobber loads and prevent repeated loads from 1134 // being eliminated. 1135 // FIXME: 1136 // 1. We can probably keep an initial set of eliminatable loads substracted 1137 // from the cost even when we finally see a store. We just need to disable 1138 // *further* accumulation of elimination savings. 1139 // 2. We should probably at some point thread MemorySSA for the callee into 1140 // this and then use that to actually compute *really* precise savings. 1141 disableLoadElimination(); 1142 return false; 1143 } 1144 1145 bool CallAnalyzer::visitExtractValue(ExtractValueInst &I) { 1146 // Constant folding for extract value is trivial. 1147 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 1148 return ConstantExpr::getExtractValue(COps[0], I.getIndices()); 1149 })) 1150 return true; 1151 1152 // SROA can look through these but give them a cost. 1153 return false; 1154 } 1155 1156 bool CallAnalyzer::visitInsertValue(InsertValueInst &I) { 1157 // Constant folding for insert value is trivial. 1158 if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) { 1159 return ConstantExpr::getInsertValue(/*AggregateOperand*/ COps[0], 1160 /*InsertedValueOperand*/ COps[1], 1161 I.getIndices()); 1162 })) 1163 return true; 1164 1165 // SROA can look through these but give them a cost. 1166 return false; 1167 } 1168 1169 /// Try to simplify a call site. 1170 /// 1171 /// Takes a concrete function and callsite and tries to actually simplify it by 1172 /// analyzing the arguments and call itself with instsimplify. Returns true if 1173 /// it has simplified the callsite to some other entity (a constant), making it 1174 /// free. 1175 bool CallAnalyzer::simplifyCallSite(Function *F, CallSite CS) { 1176 // FIXME: Using the instsimplify logic directly for this is inefficient 1177 // because we have to continually rebuild the argument list even when no 1178 // simplifications can be performed. Until that is fixed with remapping 1179 // inside of instsimplify, directly constant fold calls here. 1180 if (!canConstantFoldCallTo(cast<CallBase>(CS.getInstruction()), F)) 1181 return false; 1182 1183 // Try to re-map the arguments to constants. 1184 SmallVector<Constant *, 4> ConstantArgs; 1185 ConstantArgs.reserve(CS.arg_size()); 1186 for (CallSite::arg_iterator I = CS.arg_begin(), E = CS.arg_end(); I != E; 1187 ++I) { 1188 Constant *C = dyn_cast<Constant>(*I); 1189 if (!C) 1190 C = dyn_cast_or_null<Constant>(SimplifiedValues.lookup(*I)); 1191 if (!C) 1192 return false; // This argument doesn't map to a constant. 1193 1194 ConstantArgs.push_back(C); 1195 } 1196 if (Constant *C = ConstantFoldCall(cast<CallBase>(CS.getInstruction()), F, 1197 ConstantArgs)) { 1198 SimplifiedValues[CS.getInstruction()] = C; 1199 return true; 1200 } 1201 1202 return false; 1203 } 1204 1205 bool CallAnalyzer::visitCallSite(CallSite CS) { 1206 if (CS.hasFnAttr(Attribute::ReturnsTwice) && 1207 !F.hasFnAttribute(Attribute::ReturnsTwice)) { 1208 // This aborts the entire analysis. 1209 ExposesReturnsTwice = true; 1210 return false; 1211 } 1212 if (CS.isCall() && cast<CallInst>(CS.getInstruction())->cannotDuplicate()) 1213 ContainsNoDuplicateCall = true; 1214 1215 if (Function *F = CS.getCalledFunction()) { 1216 // When we have a concrete function, first try to simplify it directly. 1217 if (simplifyCallSite(F, CS)) 1218 return true; 1219 1220 // Next check if it is an intrinsic we know about. 1221 // FIXME: Lift this into part of the InstVisitor. 1222 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(CS.getInstruction())) { 1223 switch (II->getIntrinsicID()) { 1224 default: 1225 if (!CS.onlyReadsMemory() && !isAssumeLikeIntrinsic(II)) 1226 disableLoadElimination(); 1227 return Base::visitCallSite(CS); 1228 1229 case Intrinsic::load_relative: 1230 // This is normally lowered to 4 LLVM instructions. 1231 Cost += 3 * InlineConstants::InstrCost; 1232 return false; 1233 1234 case Intrinsic::memset: 1235 case Intrinsic::memcpy: 1236 case Intrinsic::memmove: 1237 disableLoadElimination(); 1238 // SROA can usually chew through these intrinsics, but they aren't free. 1239 return false; 1240 case Intrinsic::icall_branch_funnel: 1241 case Intrinsic::localescape: 1242 HasUninlineableIntrinsic = true; 1243 return false; 1244 case Intrinsic::vastart: 1245 InitsVargArgs = true; 1246 return false; 1247 } 1248 } 1249 1250 if (F == CS.getInstruction()->getFunction()) { 1251 // This flag will fully abort the analysis, so don't bother with anything 1252 // else. 1253 IsRecursiveCall = true; 1254 return false; 1255 } 1256 1257 if (TTI.isLoweredToCall(F)) { 1258 // We account for the average 1 instruction per call argument setup 1259 // here. 1260 Cost += CS.arg_size() * InlineConstants::InstrCost; 1261 1262 // Everything other than inline ASM will also have a significant cost 1263 // merely from making the call. 1264 if (!isa<InlineAsm>(CS.getCalledValue())) 1265 Cost += InlineConstants::CallPenalty; 1266 } 1267 1268 if (!CS.onlyReadsMemory()) 1269 disableLoadElimination(); 1270 return Base::visitCallSite(CS); 1271 } 1272 1273 // Otherwise we're in a very special case -- an indirect function call. See 1274 // if we can be particularly clever about this. 1275 Value *Callee = CS.getCalledValue(); 1276 1277 // First, pay the price of the argument setup. We account for the average 1278 // 1 instruction per call argument setup here. 1279 Cost += CS.arg_size() * InlineConstants::InstrCost; 1280 1281 // Next, check if this happens to be an indirect function call to a known 1282 // function in this inline context. If not, we've done all we can. 1283 Function *F = dyn_cast_or_null<Function>(SimplifiedValues.lookup(Callee)); 1284 if (!F) { 1285 if (!CS.onlyReadsMemory()) 1286 disableLoadElimination(); 1287 return Base::visitCallSite(CS); 1288 } 1289 1290 // If we have a constant that we are calling as a function, we can peer 1291 // through it and see the function target. This happens not infrequently 1292 // during devirtualization and so we want to give it a hefty bonus for 1293 // inlining, but cap that bonus in the event that inlining wouldn't pan 1294 // out. Pretend to inline the function, with a custom threshold. 1295 auto IndirectCallParams = Params; 1296 IndirectCallParams.DefaultThreshold = InlineConstants::IndirectCallThreshold; 1297 CallAnalyzer CA(TTI, GetAssumptionCache, GetBFI, PSI, ORE, *F, CS, 1298 IndirectCallParams); 1299 if (CA.analyzeCall(CS)) { 1300 // We were able to inline the indirect call! Subtract the cost from the 1301 // threshold to get the bonus we want to apply, but don't go below zero. 1302 Cost -= std::max(0, CA.getThreshold() - CA.getCost()); 1303 } 1304 1305 if (!F->onlyReadsMemory()) 1306 disableLoadElimination(); 1307 return Base::visitCallSite(CS); 1308 } 1309 1310 bool CallAnalyzer::visitReturnInst(ReturnInst &RI) { 1311 // At least one return instruction will be free after inlining. 1312 bool Free = !HasReturn; 1313 HasReturn = true; 1314 return Free; 1315 } 1316 1317 bool CallAnalyzer::visitBranchInst(BranchInst &BI) { 1318 // We model unconditional branches as essentially free -- they really 1319 // shouldn't exist at all, but handling them makes the behavior of the 1320 // inliner more regular and predictable. Interestingly, conditional branches 1321 // which will fold away are also free. 1322 return BI.isUnconditional() || isa<ConstantInt>(BI.getCondition()) || 1323 dyn_cast_or_null<ConstantInt>( 1324 SimplifiedValues.lookup(BI.getCondition())); 1325 } 1326 1327 bool CallAnalyzer::visitSelectInst(SelectInst &SI) { 1328 bool CheckSROA = SI.getType()->isPointerTy(); 1329 Value *TrueVal = SI.getTrueValue(); 1330 Value *FalseVal = SI.getFalseValue(); 1331 1332 Constant *TrueC = dyn_cast<Constant>(TrueVal); 1333 if (!TrueC) 1334 TrueC = SimplifiedValues.lookup(TrueVal); 1335 Constant *FalseC = dyn_cast<Constant>(FalseVal); 1336 if (!FalseC) 1337 FalseC = SimplifiedValues.lookup(FalseVal); 1338 Constant *CondC = 1339 dyn_cast_or_null<Constant>(SimplifiedValues.lookup(SI.getCondition())); 1340 1341 if (!CondC) { 1342 // Select C, X, X => X 1343 if (TrueC == FalseC && TrueC) { 1344 SimplifiedValues[&SI] = TrueC; 1345 return true; 1346 } 1347 1348 if (!CheckSROA) 1349 return Base::visitSelectInst(SI); 1350 1351 std::pair<Value *, APInt> TrueBaseAndOffset = 1352 ConstantOffsetPtrs.lookup(TrueVal); 1353 std::pair<Value *, APInt> FalseBaseAndOffset = 1354 ConstantOffsetPtrs.lookup(FalseVal); 1355 if (TrueBaseAndOffset == FalseBaseAndOffset && TrueBaseAndOffset.first) { 1356 ConstantOffsetPtrs[&SI] = TrueBaseAndOffset; 1357 1358 Value *SROAArg; 1359 DenseMap<Value *, int>::iterator CostIt; 1360 if (lookupSROAArgAndCost(TrueVal, SROAArg, CostIt)) 1361 SROAArgValues[&SI] = SROAArg; 1362 return true; 1363 } 1364 1365 return Base::visitSelectInst(SI); 1366 } 1367 1368 // Select condition is a constant. 1369 Value *SelectedV = CondC->isAllOnesValue() 1370 ? TrueVal 1371 : (CondC->isNullValue()) ? FalseVal : nullptr; 1372 if (!SelectedV) { 1373 // Condition is a vector constant that is not all 1s or all 0s. If all 1374 // operands are constants, ConstantExpr::getSelect() can handle the cases 1375 // such as select vectors. 1376 if (TrueC && FalseC) { 1377 if (auto *C = ConstantExpr::getSelect(CondC, TrueC, FalseC)) { 1378 SimplifiedValues[&SI] = C; 1379 return true; 1380 } 1381 } 1382 return Base::visitSelectInst(SI); 1383 } 1384 1385 // Condition is either all 1s or all 0s. SI can be simplified. 1386 if (Constant *SelectedC = dyn_cast<Constant>(SelectedV)) { 1387 SimplifiedValues[&SI] = SelectedC; 1388 return true; 1389 } 1390 1391 if (!CheckSROA) 1392 return true; 1393 1394 std::pair<Value *, APInt> BaseAndOffset = 1395 ConstantOffsetPtrs.lookup(SelectedV); 1396 if (BaseAndOffset.first) { 1397 ConstantOffsetPtrs[&SI] = BaseAndOffset; 1398 1399 Value *SROAArg; 1400 DenseMap<Value *, int>::iterator CostIt; 1401 if (lookupSROAArgAndCost(SelectedV, SROAArg, CostIt)) 1402 SROAArgValues[&SI] = SROAArg; 1403 } 1404 1405 return true; 1406 } 1407 1408 bool CallAnalyzer::visitSwitchInst(SwitchInst &SI) { 1409 // We model unconditional switches as free, see the comments on handling 1410 // branches. 1411 if (isa<ConstantInt>(SI.getCondition())) 1412 return true; 1413 if (Value *V = SimplifiedValues.lookup(SI.getCondition())) 1414 if (isa<ConstantInt>(V)) 1415 return true; 1416 1417 // Assume the most general case where the switch is lowered into 1418 // either a jump table, bit test, or a balanced binary tree consisting of 1419 // case clusters without merging adjacent clusters with the same 1420 // destination. We do not consider the switches that are lowered with a mix 1421 // of jump table/bit test/binary search tree. The cost of the switch is 1422 // proportional to the size of the tree or the size of jump table range. 1423 // 1424 // NB: We convert large switches which are just used to initialize large phi 1425 // nodes to lookup tables instead in simplify-cfg, so this shouldn't prevent 1426 // inlining those. It will prevent inlining in cases where the optimization 1427 // does not (yet) fire. 1428 1429 // Maximum valid cost increased in this function. 1430 int CostUpperBound = INT_MAX - InlineConstants::InstrCost - 1; 1431 1432 // Exit early for a large switch, assuming one case needs at least one 1433 // instruction. 1434 // FIXME: This is not true for a bit test, but ignore such case for now to 1435 // save compile-time. 1436 int64_t CostLowerBound = 1437 std::min((int64_t)CostUpperBound, 1438 (int64_t)SI.getNumCases() * InlineConstants::InstrCost + Cost); 1439 1440 if (CostLowerBound > Threshold && !ComputeFullInlineCost) { 1441 Cost = CostLowerBound; 1442 return false; 1443 } 1444 1445 unsigned JumpTableSize = 0; 1446 unsigned NumCaseCluster = 1447 TTI.getEstimatedNumberOfCaseClusters(SI, JumpTableSize); 1448 1449 // If suitable for a jump table, consider the cost for the table size and 1450 // branch to destination. 1451 if (JumpTableSize) { 1452 int64_t JTCost = (int64_t)JumpTableSize * InlineConstants::InstrCost + 1453 4 * InlineConstants::InstrCost; 1454 1455 Cost = std::min((int64_t)CostUpperBound, JTCost + Cost); 1456 return false; 1457 } 1458 1459 // Considering forming a binary search, we should find the number of nodes 1460 // which is same as the number of comparisons when lowered. For a given 1461 // number of clusters, n, we can define a recursive function, f(n), to find 1462 // the number of nodes in the tree. The recursion is : 1463 // f(n) = 1 + f(n/2) + f (n - n/2), when n > 3, 1464 // and f(n) = n, when n <= 3. 1465 // This will lead a binary tree where the leaf should be either f(2) or f(3) 1466 // when n > 3. So, the number of comparisons from leaves should be n, while 1467 // the number of non-leaf should be : 1468 // 2^(log2(n) - 1) - 1 1469 // = 2^log2(n) * 2^-1 - 1 1470 // = n / 2 - 1. 1471 // Considering comparisons from leaf and non-leaf nodes, we can estimate the 1472 // number of comparisons in a simple closed form : 1473 // n + n / 2 - 1 = n * 3 / 2 - 1 1474 if (NumCaseCluster <= 3) { 1475 // Suppose a comparison includes one compare and one conditional branch. 1476 Cost += NumCaseCluster * 2 * InlineConstants::InstrCost; 1477 return false; 1478 } 1479 1480 int64_t ExpectedNumberOfCompare = 3 * (int64_t)NumCaseCluster / 2 - 1; 1481 int64_t SwitchCost = 1482 ExpectedNumberOfCompare * 2 * InlineConstants::InstrCost; 1483 1484 Cost = std::min((int64_t)CostUpperBound, SwitchCost + Cost); 1485 return false; 1486 } 1487 1488 bool CallAnalyzer::visitIndirectBrInst(IndirectBrInst &IBI) { 1489 // We never want to inline functions that contain an indirectbr. This is 1490 // incorrect because all the blockaddress's (in static global initializers 1491 // for example) would be referring to the original function, and this 1492 // indirect jump would jump from the inlined copy of the function into the 1493 // original function which is extremely undefined behavior. 1494 // FIXME: This logic isn't really right; we can safely inline functions with 1495 // indirectbr's as long as no other function or global references the 1496 // blockaddress of a block within the current function. 1497 HasIndirectBr = true; 1498 return false; 1499 } 1500 1501 bool CallAnalyzer::visitResumeInst(ResumeInst &RI) { 1502 // FIXME: It's not clear that a single instruction is an accurate model for 1503 // the inline cost of a resume instruction. 1504 return false; 1505 } 1506 1507 bool CallAnalyzer::visitCleanupReturnInst(CleanupReturnInst &CRI) { 1508 // FIXME: It's not clear that a single instruction is an accurate model for 1509 // the inline cost of a cleanupret instruction. 1510 return false; 1511 } 1512 1513 bool CallAnalyzer::visitCatchReturnInst(CatchReturnInst &CRI) { 1514 // FIXME: It's not clear that a single instruction is an accurate model for 1515 // the inline cost of a catchret instruction. 1516 return false; 1517 } 1518 1519 bool CallAnalyzer::visitUnreachableInst(UnreachableInst &I) { 1520 // FIXME: It might be reasonably to discount the cost of instructions leading 1521 // to unreachable as they have the lowest possible impact on both runtime and 1522 // code size. 1523 return true; // No actual code is needed for unreachable. 1524 } 1525 1526 bool CallAnalyzer::visitInstruction(Instruction &I) { 1527 // Some instructions are free. All of the free intrinsics can also be 1528 // handled by SROA, etc. 1529 if (TargetTransformInfo::TCC_Free == TTI.getUserCost(&I)) 1530 return true; 1531 1532 // We found something we don't understand or can't handle. Mark any SROA-able 1533 // values in the operand list as no longer viable. 1534 for (User::op_iterator OI = I.op_begin(), OE = I.op_end(); OI != OE; ++OI) 1535 disableSROA(*OI); 1536 1537 return false; 1538 } 1539 1540 /// Analyze a basic block for its contribution to the inline cost. 1541 /// 1542 /// This method walks the analyzer over every instruction in the given basic 1543 /// block and accounts for their cost during inlining at this callsite. It 1544 /// aborts early if the threshold has been exceeded or an impossible to inline 1545 /// construct has been detected. It returns false if inlining is no longer 1546 /// viable, and true if inlining remains viable. 1547 InlineResult 1548 CallAnalyzer::analyzeBlock(BasicBlock *BB, 1549 SmallPtrSetImpl<const Value *> &EphValues) { 1550 for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { 1551 // FIXME: Currently, the number of instructions in a function regardless of 1552 // our ability to simplify them during inline to constants or dead code, 1553 // are actually used by the vector bonus heuristic. As long as that's true, 1554 // we have to special case debug intrinsics here to prevent differences in 1555 // inlining due to debug symbols. Eventually, the number of unsimplified 1556 // instructions shouldn't factor into the cost computation, but until then, 1557 // hack around it here. 1558 if (isa<DbgInfoIntrinsic>(I)) 1559 continue; 1560 1561 // Skip ephemeral values. 1562 if (EphValues.count(&*I)) 1563 continue; 1564 1565 ++NumInstructions; 1566 if (isa<ExtractElementInst>(I) || I->getType()->isVectorTy()) 1567 ++NumVectorInstructions; 1568 1569 // If the instruction simplified to a constant, there is no cost to this 1570 // instruction. Visit the instructions using our InstVisitor to account for 1571 // all of the per-instruction logic. The visit tree returns true if we 1572 // consumed the instruction in any way, and false if the instruction's base 1573 // cost should count against inlining. 1574 if (Base::visit(&*I)) 1575 ++NumInstructionsSimplified; 1576 else 1577 Cost += InlineConstants::InstrCost; 1578 1579 using namespace ore; 1580 // If the visit this instruction detected an uninlinable pattern, abort. 1581 InlineResult IR; 1582 if (IsRecursiveCall) 1583 IR = "recursive"; 1584 else if (ExposesReturnsTwice) 1585 IR = "exposes returns twice"; 1586 else if (HasDynamicAlloca) 1587 IR = "dynamic alloca"; 1588 else if (HasIndirectBr) 1589 IR = "indirect branch"; 1590 else if (HasUninlineableIntrinsic) 1591 IR = "uninlinable intrinsic"; 1592 else if (InitsVargArgs) 1593 IR = "varargs"; 1594 if (!IR) { 1595 if (ORE) 1596 ORE->emit([&]() { 1597 return OptimizationRemarkMissed(DEBUG_TYPE, "NeverInline", 1598 CandidateCS.getInstruction()) 1599 << NV("Callee", &F) << " has uninlinable pattern (" 1600 << NV("InlineResult", IR.message) 1601 << ") and cost is not fully computed"; 1602 }); 1603 return IR; 1604 } 1605 1606 // If the caller is a recursive function then we don't want to inline 1607 // functions which allocate a lot of stack space because it would increase 1608 // the caller stack usage dramatically. 1609 if (IsCallerRecursive && 1610 AllocatedSize > InlineConstants::TotalAllocaSizeRecursiveCaller) { 1611 InlineResult IR = "recursive and allocates too much stack space"; 1612 if (ORE) 1613 ORE->emit([&]() { 1614 return OptimizationRemarkMissed(DEBUG_TYPE, "NeverInline", 1615 CandidateCS.getInstruction()) 1616 << NV("Callee", &F) << " is " << NV("InlineResult", IR.message) 1617 << ". Cost is not fully computed"; 1618 }); 1619 return IR; 1620 } 1621 1622 // Check if we've past the maximum possible threshold so we don't spin in 1623 // huge basic blocks that will never inline. 1624 if (Cost >= Threshold && !ComputeFullInlineCost) 1625 return false; 1626 } 1627 1628 return true; 1629 } 1630 1631 /// Compute the base pointer and cumulative constant offsets for V. 1632 /// 1633 /// This strips all constant offsets off of V, leaving it the base pointer, and 1634 /// accumulates the total constant offset applied in the returned constant. It 1635 /// returns 0 if V is not a pointer, and returns the constant '0' if there are 1636 /// no constant offsets applied. 1637 ConstantInt *CallAnalyzer::stripAndComputeInBoundsConstantOffsets(Value *&V) { 1638 if (!V->getType()->isPointerTy()) 1639 return nullptr; 1640 1641 unsigned AS = V->getType()->getPointerAddressSpace(); 1642 unsigned IntPtrWidth = DL.getIndexSizeInBits(AS); 1643 APInt Offset = APInt::getNullValue(IntPtrWidth); 1644 1645 // Even though we don't look through PHI nodes, we could be called on an 1646 // instruction in an unreachable block, which may be on a cycle. 1647 SmallPtrSet<Value *, 4> Visited; 1648 Visited.insert(V); 1649 do { 1650 if (GEPOperator *GEP = dyn_cast<GEPOperator>(V)) { 1651 if (!GEP->isInBounds() || !accumulateGEPOffset(*GEP, Offset)) 1652 return nullptr; 1653 V = GEP->getPointerOperand(); 1654 } else if (Operator::getOpcode(V) == Instruction::BitCast) { 1655 V = cast<Operator>(V)->getOperand(0); 1656 } else if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) { 1657 if (GA->isInterposable()) 1658 break; 1659 V = GA->getAliasee(); 1660 } else { 1661 break; 1662 } 1663 assert(V->getType()->isPointerTy() && "Unexpected operand type!"); 1664 } while (Visited.insert(V).second); 1665 1666 Type *IntPtrTy = DL.getIntPtrType(V->getContext(), AS); 1667 return cast<ConstantInt>(ConstantInt::get(IntPtrTy, Offset)); 1668 } 1669 1670 /// Find dead blocks due to deleted CFG edges during inlining. 1671 /// 1672 /// If we know the successor of the current block, \p CurrBB, has to be \p 1673 /// NextBB, the other successors of \p CurrBB are dead if these successors have 1674 /// no live incoming CFG edges. If one block is found to be dead, we can 1675 /// continue growing the dead block list by checking the successors of the dead 1676 /// blocks to see if all their incoming edges are dead or not. 1677 void CallAnalyzer::findDeadBlocks(BasicBlock *CurrBB, BasicBlock *NextBB) { 1678 auto IsEdgeDead = [&](BasicBlock *Pred, BasicBlock *Succ) { 1679 // A CFG edge is dead if the predecessor is dead or the predecessor has a 1680 // known successor which is not the one under exam. 1681 return (DeadBlocks.count(Pred) || 1682 (KnownSuccessors[Pred] && KnownSuccessors[Pred] != Succ)); 1683 }; 1684 1685 auto IsNewlyDead = [&](BasicBlock *BB) { 1686 // If all the edges to a block are dead, the block is also dead. 1687 return (!DeadBlocks.count(BB) && 1688 llvm::all_of(predecessors(BB), 1689 [&](BasicBlock *P) { return IsEdgeDead(P, BB); })); 1690 }; 1691 1692 for (BasicBlock *Succ : successors(CurrBB)) { 1693 if (Succ == NextBB || !IsNewlyDead(Succ)) 1694 continue; 1695 SmallVector<BasicBlock *, 4> NewDead; 1696 NewDead.push_back(Succ); 1697 while (!NewDead.empty()) { 1698 BasicBlock *Dead = NewDead.pop_back_val(); 1699 if (DeadBlocks.insert(Dead)) 1700 // Continue growing the dead block lists. 1701 for (BasicBlock *S : successors(Dead)) 1702 if (IsNewlyDead(S)) 1703 NewDead.push_back(S); 1704 } 1705 } 1706 } 1707 1708 /// Analyze a call site for potential inlining. 1709 /// 1710 /// Returns true if inlining this call is viable, and false if it is not 1711 /// viable. It computes the cost and adjusts the threshold based on numerous 1712 /// factors and heuristics. If this method returns false but the computed cost 1713 /// is below the computed threshold, then inlining was forcibly disabled by 1714 /// some artifact of the routine. 1715 InlineResult CallAnalyzer::analyzeCall(CallSite CS) { 1716 ++NumCallsAnalyzed; 1717 1718 // Perform some tweaks to the cost and threshold based on the direct 1719 // callsite information. 1720 1721 // We want to more aggressively inline vector-dense kernels, so up the 1722 // threshold, and we'll lower it if the % of vector instructions gets too 1723 // low. Note that these bonuses are some what arbitrary and evolved over time 1724 // by accident as much as because they are principled bonuses. 1725 // 1726 // FIXME: It would be nice to remove all such bonuses. At least it would be 1727 // nice to base the bonus values on something more scientific. 1728 assert(NumInstructions == 0); 1729 assert(NumVectorInstructions == 0); 1730 1731 // Update the threshold based on callsite properties 1732 updateThreshold(CS, F); 1733 1734 // While Threshold depends on commandline options that can take negative 1735 // values, we want to enforce the invariant that the computed threshold and 1736 // bonuses are non-negative. 1737 assert(Threshold >= 0); 1738 assert(SingleBBBonus >= 0); 1739 assert(VectorBonus >= 0); 1740 1741 // Speculatively apply all possible bonuses to Threshold. If cost exceeds 1742 // this Threshold any time, and cost cannot decrease, we can stop processing 1743 // the rest of the function body. 1744 Threshold += (SingleBBBonus + VectorBonus); 1745 1746 // Give out bonuses for the callsite, as the instructions setting them up 1747 // will be gone after inlining. 1748 Cost -= getCallsiteCost(CS, DL); 1749 1750 // If this function uses the coldcc calling convention, prefer not to inline 1751 // it. 1752 if (F.getCallingConv() == CallingConv::Cold) 1753 Cost += InlineConstants::ColdccPenalty; 1754 1755 // Check if we're done. This can happen due to bonuses and penalties. 1756 if (Cost >= Threshold && !ComputeFullInlineCost) 1757 return "high cost"; 1758 1759 if (F.empty()) 1760 return true; 1761 1762 Function *Caller = CS.getInstruction()->getFunction(); 1763 // Check if the caller function is recursive itself. 1764 for (User *U : Caller->users()) { 1765 CallSite Site(U); 1766 if (!Site) 1767 continue; 1768 Instruction *I = Site.getInstruction(); 1769 if (I->getFunction() == Caller) { 1770 IsCallerRecursive = true; 1771 break; 1772 } 1773 } 1774 1775 // Populate our simplified values by mapping from function arguments to call 1776 // arguments with known important simplifications. 1777 CallSite::arg_iterator CAI = CS.arg_begin(); 1778 for (Function::arg_iterator FAI = F.arg_begin(), FAE = F.arg_end(); 1779 FAI != FAE; ++FAI, ++CAI) { 1780 assert(CAI != CS.arg_end()); 1781 if (Constant *C = dyn_cast<Constant>(CAI)) 1782 SimplifiedValues[&*FAI] = C; 1783 1784 Value *PtrArg = *CAI; 1785 if (ConstantInt *C = stripAndComputeInBoundsConstantOffsets(PtrArg)) { 1786 ConstantOffsetPtrs[&*FAI] = std::make_pair(PtrArg, C->getValue()); 1787 1788 // We can SROA any pointer arguments derived from alloca instructions. 1789 if (isa<AllocaInst>(PtrArg)) { 1790 SROAArgValues[&*FAI] = PtrArg; 1791 SROAArgCosts[PtrArg] = 0; 1792 } 1793 } 1794 } 1795 NumConstantArgs = SimplifiedValues.size(); 1796 NumConstantOffsetPtrArgs = ConstantOffsetPtrs.size(); 1797 NumAllocaArgs = SROAArgValues.size(); 1798 1799 // FIXME: If a caller has multiple calls to a callee, we end up recomputing 1800 // the ephemeral values multiple times (and they're completely determined by 1801 // the callee, so this is purely duplicate work). 1802 SmallPtrSet<const Value *, 32> EphValues; 1803 CodeMetrics::collectEphemeralValues(&F, &GetAssumptionCache(F), EphValues); 1804 1805 // The worklist of live basic blocks in the callee *after* inlining. We avoid 1806 // adding basic blocks of the callee which can be proven to be dead for this 1807 // particular call site in order to get more accurate cost estimates. This 1808 // requires a somewhat heavyweight iteration pattern: we need to walk the 1809 // basic blocks in a breadth-first order as we insert live successors. To 1810 // accomplish this, prioritizing for small iterations because we exit after 1811 // crossing our threshold, we use a small-size optimized SetVector. 1812 typedef SetVector<BasicBlock *, SmallVector<BasicBlock *, 16>, 1813 SmallPtrSet<BasicBlock *, 16>> 1814 BBSetVector; 1815 BBSetVector BBWorklist; 1816 BBWorklist.insert(&F.getEntryBlock()); 1817 bool SingleBB = true; 1818 // Note that we *must not* cache the size, this loop grows the worklist. 1819 for (unsigned Idx = 0; Idx != BBWorklist.size(); ++Idx) { 1820 // Bail out the moment we cross the threshold. This means we'll under-count 1821 // the cost, but only when undercounting doesn't matter. 1822 if (Cost >= Threshold && !ComputeFullInlineCost) 1823 break; 1824 1825 BasicBlock *BB = BBWorklist[Idx]; 1826 if (BB->empty()) 1827 continue; 1828 1829 // Disallow inlining a blockaddress. A blockaddress only has defined 1830 // behavior for an indirect branch in the same function, and we do not 1831 // currently support inlining indirect branches. But, the inliner may not 1832 // see an indirect branch that ends up being dead code at a particular call 1833 // site. If the blockaddress escapes the function, e.g., via a global 1834 // variable, inlining may lead to an invalid cross-function reference. 1835 if (BB->hasAddressTaken()) 1836 return "blockaddress"; 1837 1838 // Analyze the cost of this block. If we blow through the threshold, this 1839 // returns false, and we can bail on out. 1840 InlineResult IR = analyzeBlock(BB, EphValues); 1841 if (!IR) 1842 return IR; 1843 1844 Instruction *TI = BB->getTerminator(); 1845 1846 // Add in the live successors by first checking whether we have terminator 1847 // that may be simplified based on the values simplified by this call. 1848 if (BranchInst *BI = dyn_cast<BranchInst>(TI)) { 1849 if (BI->isConditional()) { 1850 Value *Cond = BI->getCondition(); 1851 if (ConstantInt *SimpleCond = 1852 dyn_cast_or_null<ConstantInt>(SimplifiedValues.lookup(Cond))) { 1853 BasicBlock *NextBB = BI->getSuccessor(SimpleCond->isZero() ? 1 : 0); 1854 BBWorklist.insert(NextBB); 1855 KnownSuccessors[BB] = NextBB; 1856 findDeadBlocks(BB, NextBB); 1857 continue; 1858 } 1859 } 1860 } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { 1861 Value *Cond = SI->getCondition(); 1862 if (ConstantInt *SimpleCond = 1863 dyn_cast_or_null<ConstantInt>(SimplifiedValues.lookup(Cond))) { 1864 BasicBlock *NextBB = SI->findCaseValue(SimpleCond)->getCaseSuccessor(); 1865 BBWorklist.insert(NextBB); 1866 KnownSuccessors[BB] = NextBB; 1867 findDeadBlocks(BB, NextBB); 1868 continue; 1869 } 1870 } 1871 1872 // If we're unable to select a particular successor, just count all of 1873 // them. 1874 for (unsigned TIdx = 0, TSize = TI->getNumSuccessors(); TIdx != TSize; 1875 ++TIdx) 1876 BBWorklist.insert(TI->getSuccessor(TIdx)); 1877 1878 // If we had any successors at this point, than post-inlining is likely to 1879 // have them as well. Note that we assume any basic blocks which existed 1880 // due to branches or switches which folded above will also fold after 1881 // inlining. 1882 if (SingleBB && TI->getNumSuccessors() > 1) { 1883 // Take off the bonus we applied to the threshold. 1884 Threshold -= SingleBBBonus; 1885 SingleBB = false; 1886 } 1887 } 1888 1889 bool OnlyOneCallAndLocalLinkage = 1890 F.hasLocalLinkage() && F.hasOneUse() && &F == CS.getCalledFunction(); 1891 // If this is a noduplicate call, we can still inline as long as 1892 // inlining this would cause the removal of the caller (so the instruction 1893 // is not actually duplicated, just moved). 1894 if (!OnlyOneCallAndLocalLinkage && ContainsNoDuplicateCall) 1895 return "noduplicate"; 1896 1897 // Loops generally act a lot like calls in that they act like barriers to 1898 // movement, require a certain amount of setup, etc. So when optimising for 1899 // size, we penalise any call sites that perform loops. We do this after all 1900 // other costs here, so will likely only be dealing with relatively small 1901 // functions (and hence DT and LI will hopefully be cheap). 1902 if (Caller->optForMinSize()) { 1903 DominatorTree DT(F); 1904 LoopInfo LI(DT); 1905 int NumLoops = 0; 1906 for (Loop *L : LI) { 1907 // Ignore loops that will not be executed 1908 if (DeadBlocks.count(L->getHeader())) 1909 continue; 1910 NumLoops++; 1911 } 1912 Cost += NumLoops * InlineConstants::CallPenalty; 1913 } 1914 1915 // We applied the maximum possible vector bonus at the beginning. Now, 1916 // subtract the excess bonus, if any, from the Threshold before 1917 // comparing against Cost. 1918 if (NumVectorInstructions <= NumInstructions / 10) 1919 Threshold -= VectorBonus; 1920 else if (NumVectorInstructions <= NumInstructions / 2) 1921 Threshold -= VectorBonus/2; 1922 1923 return Cost < std::max(1, Threshold); 1924 } 1925 1926 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 1927 /// Dump stats about this call's analysis. 1928 LLVM_DUMP_METHOD void CallAnalyzer::dump() { 1929 #define DEBUG_PRINT_STAT(x) dbgs() << " " #x ": " << x << "\n" 1930 DEBUG_PRINT_STAT(NumConstantArgs); 1931 DEBUG_PRINT_STAT(NumConstantOffsetPtrArgs); 1932 DEBUG_PRINT_STAT(NumAllocaArgs); 1933 DEBUG_PRINT_STAT(NumConstantPtrCmps); 1934 DEBUG_PRINT_STAT(NumConstantPtrDiffs); 1935 DEBUG_PRINT_STAT(NumInstructionsSimplified); 1936 DEBUG_PRINT_STAT(NumInstructions); 1937 DEBUG_PRINT_STAT(SROACostSavings); 1938 DEBUG_PRINT_STAT(SROACostSavingsLost); 1939 DEBUG_PRINT_STAT(LoadEliminationCost); 1940 DEBUG_PRINT_STAT(ContainsNoDuplicateCall); 1941 DEBUG_PRINT_STAT(Cost); 1942 DEBUG_PRINT_STAT(Threshold); 1943 #undef DEBUG_PRINT_STAT 1944 } 1945 #endif 1946 1947 /// Test that there are no attribute conflicts between Caller and Callee 1948 /// that prevent inlining. 1949 static bool functionsHaveCompatibleAttributes(Function *Caller, 1950 Function *Callee, 1951 TargetTransformInfo &TTI) { 1952 return TTI.areInlineCompatible(Caller, Callee) && 1953 AttributeFuncs::areInlineCompatible(*Caller, *Callee); 1954 } 1955 1956 int llvm::getCallsiteCost(CallSite CS, const DataLayout &DL) { 1957 int Cost = 0; 1958 for (unsigned I = 0, E = CS.arg_size(); I != E; ++I) { 1959 if (CS.isByValArgument(I)) { 1960 // We approximate the number of loads and stores needed by dividing the 1961 // size of the byval type by the target's pointer size. 1962 PointerType *PTy = cast<PointerType>(CS.getArgument(I)->getType()); 1963 unsigned TypeSize = DL.getTypeSizeInBits(PTy->getElementType()); 1964 unsigned AS = PTy->getAddressSpace(); 1965 unsigned PointerSize = DL.getPointerSizeInBits(AS); 1966 // Ceiling division. 1967 unsigned NumStores = (TypeSize + PointerSize - 1) / PointerSize; 1968 1969 // If it generates more than 8 stores it is likely to be expanded as an 1970 // inline memcpy so we take that as an upper bound. Otherwise we assume 1971 // one load and one store per word copied. 1972 // FIXME: The maxStoresPerMemcpy setting from the target should be used 1973 // here instead of a magic number of 8, but it's not available via 1974 // DataLayout. 1975 NumStores = std::min(NumStores, 8U); 1976 1977 Cost += 2 * NumStores * InlineConstants::InstrCost; 1978 } else { 1979 // For non-byval arguments subtract off one instruction per call 1980 // argument. 1981 Cost += InlineConstants::InstrCost; 1982 } 1983 } 1984 // The call instruction also disappears after inlining. 1985 Cost += InlineConstants::InstrCost + InlineConstants::CallPenalty; 1986 return Cost; 1987 } 1988 1989 InlineCost llvm::getInlineCost( 1990 CallSite CS, const InlineParams &Params, TargetTransformInfo &CalleeTTI, 1991 std::function<AssumptionCache &(Function &)> &GetAssumptionCache, 1992 Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI, 1993 ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE) { 1994 return getInlineCost(CS, CS.getCalledFunction(), Params, CalleeTTI, 1995 GetAssumptionCache, GetBFI, PSI, ORE); 1996 } 1997 1998 InlineCost llvm::getInlineCost( 1999 CallSite CS, Function *Callee, const InlineParams &Params, 2000 TargetTransformInfo &CalleeTTI, 2001 std::function<AssumptionCache &(Function &)> &GetAssumptionCache, 2002 Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI, 2003 ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE) { 2004 2005 // Cannot inline indirect calls. 2006 if (!Callee) 2007 return llvm::InlineCost::getNever("indirect call"); 2008 2009 // Never inline calls with byval arguments that does not have the alloca 2010 // address space. Since byval arguments can be replaced with a copy to an 2011 // alloca, the inlined code would need to be adjusted to handle that the 2012 // argument is in the alloca address space (so it is a little bit complicated 2013 // to solve). 2014 unsigned AllocaAS = Callee->getParent()->getDataLayout().getAllocaAddrSpace(); 2015 for (unsigned I = 0, E = CS.arg_size(); I != E; ++I) 2016 if (CS.isByValArgument(I)) { 2017 PointerType *PTy = cast<PointerType>(CS.getArgument(I)->getType()); 2018 if (PTy->getAddressSpace() != AllocaAS) 2019 return llvm::InlineCost::getNever("byval arguments without alloca" 2020 " address space"); 2021 } 2022 2023 // Calls to functions with always-inline attributes should be inlined 2024 // whenever possible. 2025 if (CS.hasFnAttr(Attribute::AlwaysInline)) { 2026 auto IsViable = isInlineViable(*Callee); 2027 if (IsViable) 2028 return llvm::InlineCost::getAlways("always inline attribute"); 2029 return llvm::InlineCost::getNever(IsViable.message); 2030 } 2031 2032 // Never inline functions with conflicting attributes (unless callee has 2033 // always-inline attribute). 2034 Function *Caller = CS.getCaller(); 2035 if (!functionsHaveCompatibleAttributes(Caller, Callee, CalleeTTI)) 2036 return llvm::InlineCost::getNever("conflicting attributes"); 2037 2038 // Don't inline this call if the caller has the optnone attribute. 2039 if (Caller->hasFnAttribute(Attribute::OptimizeNone)) 2040 return llvm::InlineCost::getNever("optnone attribute"); 2041 2042 // Don't inline a function that treats null pointer as valid into a caller 2043 // that does not have this attribute. 2044 if (!Caller->nullPointerIsDefined() && Callee->nullPointerIsDefined()) 2045 return llvm::InlineCost::getNever("nullptr definitions incompatible"); 2046 2047 // Don't inline functions which can be interposed at link-time. 2048 if (Callee->isInterposable()) 2049 return llvm::InlineCost::getNever("interposable"); 2050 2051 // Don't inline functions marked noinline. 2052 if (Callee->hasFnAttribute(Attribute::NoInline)) 2053 return llvm::InlineCost::getNever("noinline function attribute"); 2054 2055 // Don't inline call sites marked noinline. 2056 if (CS.isNoInline()) 2057 return llvm::InlineCost::getNever("noinline call site attribute"); 2058 2059 LLVM_DEBUG(llvm::dbgs() << " Analyzing call of " << Callee->getName() 2060 << "... (caller:" << Caller->getName() << ")\n"); 2061 2062 CallAnalyzer CA(CalleeTTI, GetAssumptionCache, GetBFI, PSI, ORE, *Callee, CS, 2063 Params); 2064 InlineResult ShouldInline = CA.analyzeCall(CS); 2065 2066 LLVM_DEBUG(CA.dump()); 2067 2068 // Check if there was a reason to force inlining or no inlining. 2069 if (!ShouldInline && CA.getCost() < CA.getThreshold()) 2070 return InlineCost::getNever(ShouldInline.message); 2071 if (ShouldInline && CA.getCost() >= CA.getThreshold()) 2072 return InlineCost::getAlways("empty function"); 2073 2074 return llvm::InlineCost::get(CA.getCost(), CA.getThreshold()); 2075 } 2076 2077 InlineResult llvm::isInlineViable(Function &F) { 2078 bool ReturnsTwice = F.hasFnAttribute(Attribute::ReturnsTwice); 2079 for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; ++BI) { 2080 // Disallow inlining of functions which contain indirect branches or 2081 // blockaddresses. 2082 if (isa<IndirectBrInst>(BI->getTerminator())) 2083 return "contains indirect branches"; 2084 2085 if (BI->hasAddressTaken()) 2086 return "uses block address"; 2087 2088 for (auto &II : *BI) { 2089 CallSite CS(&II); 2090 if (!CS) 2091 continue; 2092 2093 // Disallow recursive calls. 2094 if (&F == CS.getCalledFunction()) 2095 return "recursive call"; 2096 2097 // Disallow calls which expose returns-twice to a function not previously 2098 // attributed as such. 2099 if (!ReturnsTwice && CS.isCall() && 2100 cast<CallInst>(CS.getInstruction())->canReturnTwice()) 2101 return "exposes returns-twice attribute"; 2102 2103 if (CS.getCalledFunction()) 2104 switch (CS.getCalledFunction()->getIntrinsicID()) { 2105 default: 2106 break; 2107 // Disallow inlining of @llvm.icall.branch.funnel because current 2108 // backend can't separate call targets from call arguments. 2109 case llvm::Intrinsic::icall_branch_funnel: 2110 return "disallowed inlining of @llvm.icall.branch.funnel"; 2111 // Disallow inlining functions that call @llvm.localescape. Doing this 2112 // correctly would require major changes to the inliner. 2113 case llvm::Intrinsic::localescape: 2114 return "disallowed inlining of @llvm.localescape"; 2115 // Disallow inlining of functions that initialize VarArgs with va_start. 2116 case llvm::Intrinsic::vastart: 2117 return "contains VarArgs initialized with va_start"; 2118 } 2119 } 2120 } 2121 2122 return true; 2123 } 2124 2125 // APIs to create InlineParams based on command line flags and/or other 2126 // parameters. 2127 2128 InlineParams llvm::getInlineParams(int Threshold) { 2129 InlineParams Params; 2130 2131 // This field is the threshold to use for a callee by default. This is 2132 // derived from one or more of: 2133 // * optimization or size-optimization levels, 2134 // * a value passed to createFunctionInliningPass function, or 2135 // * the -inline-threshold flag. 2136 // If the -inline-threshold flag is explicitly specified, that is used 2137 // irrespective of anything else. 2138 if (InlineThreshold.getNumOccurrences() > 0) 2139 Params.DefaultThreshold = InlineThreshold; 2140 else 2141 Params.DefaultThreshold = Threshold; 2142 2143 // Set the HintThreshold knob from the -inlinehint-threshold. 2144 Params.HintThreshold = HintThreshold; 2145 2146 // Set the HotCallSiteThreshold knob from the -hot-callsite-threshold. 2147 Params.HotCallSiteThreshold = HotCallSiteThreshold; 2148 2149 // If the -locally-hot-callsite-threshold is explicitly specified, use it to 2150 // populate LocallyHotCallSiteThreshold. Later, we populate 2151 // Params.LocallyHotCallSiteThreshold from -locally-hot-callsite-threshold if 2152 // we know that optimization level is O3 (in the getInlineParams variant that 2153 // takes the opt and size levels). 2154 // FIXME: Remove this check (and make the assignment unconditional) after 2155 // addressing size regression issues at O2. 2156 if (LocallyHotCallSiteThreshold.getNumOccurrences() > 0) 2157 Params.LocallyHotCallSiteThreshold = LocallyHotCallSiteThreshold; 2158 2159 // Set the ColdCallSiteThreshold knob from the -inline-cold-callsite-threshold. 2160 Params.ColdCallSiteThreshold = ColdCallSiteThreshold; 2161 2162 // Set the OptMinSizeThreshold and OptSizeThreshold params only if the 2163 // -inlinehint-threshold commandline option is not explicitly given. If that 2164 // option is present, then its value applies even for callees with size and 2165 // minsize attributes. 2166 // If the -inline-threshold is not specified, set the ColdThreshold from the 2167 // -inlinecold-threshold even if it is not explicitly passed. If 2168 // -inline-threshold is specified, then -inlinecold-threshold needs to be 2169 // explicitly specified to set the ColdThreshold knob 2170 if (InlineThreshold.getNumOccurrences() == 0) { 2171 Params.OptMinSizeThreshold = InlineConstants::OptMinSizeThreshold; 2172 Params.OptSizeThreshold = InlineConstants::OptSizeThreshold; 2173 Params.ColdThreshold = ColdThreshold; 2174 } else if (ColdThreshold.getNumOccurrences() > 0) { 2175 Params.ColdThreshold = ColdThreshold; 2176 } 2177 return Params; 2178 } 2179 2180 InlineParams llvm::getInlineParams() { 2181 return getInlineParams(InlineThreshold); 2182 } 2183 2184 // Compute the default threshold for inlining based on the opt level and the 2185 // size opt level. 2186 static int computeThresholdFromOptLevels(unsigned OptLevel, 2187 unsigned SizeOptLevel) { 2188 if (OptLevel > 2) 2189 return InlineConstants::OptAggressiveThreshold; 2190 if (SizeOptLevel == 1) // -Os 2191 return InlineConstants::OptSizeThreshold; 2192 if (SizeOptLevel == 2) // -Oz 2193 return InlineConstants::OptMinSizeThreshold; 2194 return InlineThreshold; 2195 } 2196 2197 InlineParams llvm::getInlineParams(unsigned OptLevel, unsigned SizeOptLevel) { 2198 auto Params = 2199 getInlineParams(computeThresholdFromOptLevels(OptLevel, SizeOptLevel)); 2200 // At O3, use the value of -locally-hot-callsite-threshold option to populate 2201 // Params.LocallyHotCallSiteThreshold. Below O3, this flag has effect only 2202 // when it is specified explicitly. 2203 if (OptLevel > 2) 2204 Params.LocallyHotCallSiteThreshold = LocallyHotCallSiteThreshold; 2205 return Params; 2206 } 2207