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