Make more fields of InlineParams Optional.

Differential revision: https://reviews.llvm.org/D23386

llvm-svn: 278312
This commit is contained in:
Easwaran Raman 2016-08-11 03:58:05 +00:00
parent 18dd773016
commit 0d58fcac99
2 changed files with 10 additions and 6 deletions

View File

@ -124,7 +124,7 @@ struct InlineParams {
int DefaultThreshold;
/// Threshold to use for callees with inline hint.
int HintThreshold;
Optional<int> HintThreshold;
/// Threshold to use for cold callees.
Optional<int> ColdThreshold;
@ -136,7 +136,7 @@ struct InlineParams {
Optional<int> OptMinSizeThreshold;
/// Threshold to use when the callsite is considered hot.
int HotCallSiteThreshold;
Optional<int> HotCallSiteThreshold;
};
/// Generate the parameters to tune the inline cost analysis based only on the

View File

@ -624,6 +624,11 @@ void CallAnalyzer::updateThreshold(CallSite CS, Function &Callee) {
return B ? std::min(A, B.getValue()) : A;
};
// return max(A, B) if B is valid.
auto MaxIfValid = [](int A, Optional<int> B) {
return B ? std::max(A, B.getValue()) : A;
};
// Use the OptMinSizeThreshold or OptSizeThreshold knob if they are available
// and reduce the threshold if the caller has the necessary attribute.
if (Caller->optForMinSize())
@ -644,11 +649,10 @@ void CallAnalyzer::updateThreshold(CallSite CS, Function &Callee) {
bool InlineHint = Callee.hasFnAttribute(Attribute::InlineHint) ||
PSI->isHotFunction(&Callee);
if (InlineHint && !Caller->optForMinSize())
Threshold = std::max(Threshold, Params.HintThreshold);
Threshold = MaxIfValid(Threshold, Params.HintThreshold);
if (HotCallsite && HotCallSiteThreshold > Threshold &&
!Caller->optForMinSize())
Threshold = std::max(Threshold, Params.HotCallSiteThreshold);
if (HotCallsite && !Caller->optForMinSize())
Threshold = MaxIfValid(Threshold, Params.HotCallSiteThreshold);
bool ColdCallee = PSI->isColdFunction(&Callee);
// For cold callees, use the ColdThreshold knob if it is available and reduces