Index: include/llvm/Analysis/InlineCost.h =================================================================== --- include/llvm/Analysis/InlineCost.h +++ include/llvm/Analysis/InlineCost.h @@ -152,6 +152,9 @@ /// Threshold to use when the callsite is considered cold. Optional ColdCallSiteThreshold; + + /// Compute inline cost even when the cost has exceeded the threshold. + Optional ComputeFullInlineCost; }; /// Generate the parameters to tune the inline cost analysis based only on the Index: lib/Analysis/InlineCost.cpp =================================================================== --- lib/Analysis/InlineCost.cpp +++ lib/Analysis/InlineCost.cpp @@ -82,7 +82,7 @@ "entry frequency, for a callsite to be hot in the absence of " "profile information.")); -static cl::opt ComputeFullInlineCost( +static cl::opt OptComputeFullInlineCost( "inline-cost-full", cl::Hidden, cl::init(false), cl::desc("Compute the full inline cost of a call site even when the cost " "exceeds the threshold.")); @@ -124,6 +124,7 @@ int Threshold; int Cost; + bool ComputeFullInlineCost; bool IsCallerRecursive; bool IsRecursiveCall; @@ -256,7 +257,9 @@ : TTI(TTI), GetAssumptionCache(GetAssumptionCache), GetBFI(GetBFI), PSI(PSI), F(Callee), DL(F.getParent()->getDataLayout()), ORE(ORE), CandidateCS(CSArg), Params(Params), Threshold(Params.DefaultThreshold), - Cost(0), IsCallerRecursive(false), IsRecursiveCall(false), + Cost(0), ComputeFullInlineCost(OptComputeFullInlineCost || + Params.ComputeFullInlineCost || ORE), + IsCallerRecursive(false), IsRecursiveCall(false), ExposesReturnsTwice(false), HasDynamicAlloca(false), ContainsNoDuplicateCall(false), HasReturn(false), HasIndirectBr(false), HasFrameEscape(false), AllocatedSize(0), NumInstructions(0), @@ -1722,9 +1725,6 @@ CS.isNoInline()) return llvm::InlineCost::getNever(); - if (ORE) - ComputeFullInlineCost = true; - DEBUG(llvm::dbgs() << " Analyzing call of " << Callee->getName() << "... (caller:" << Caller->getName() << ")\n");