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