forked from OSchip/llvm-project
Use updated threshold for indirect call bonus
When considering foo->bar inlining, if there is an indirect call in foo which gets resolved to a direct call (say baz), then we try to inline baz into bar with a threshold T and subtract max(T - Cost(bar->baz), 0) from Cost(foo->bar). This patch uses max(Threshold(bar->baz) - Cost(bar->baz)) instead, where Thresheld(bar->baz) could be different from T due to bonuses or subtractions. Threshold(bar->baz) - Cost(bar->baz) better represents the desirability of inlining baz into bar. Differential Revision: http://reviews.llvm.org/D14309 llvm-svn: 254945
This commit is contained in:
parent
1f1a15332b
commit
6d90d9f102
|
@ -834,8 +834,8 @@ bool CallAnalyzer::visitCallSite(CallSite CS) {
|
|||
CallAnalyzer CA(TTI, ACT, *F, InlineConstants::IndirectCallThreshold, CS);
|
||||
if (CA.analyzeCall(CS)) {
|
||||
// We were able to inline the indirect call! Subtract the cost from the
|
||||
// bonus we want to apply, but don't go below zero.
|
||||
Cost -= std::max(0, InlineConstants::IndirectCallThreshold - CA.getCost());
|
||||
// threshold to get the bonus we want to apply, but don't go below zero.
|
||||
Cost -= std::max(0, CA.getThreshold() - CA.getCost());
|
||||
}
|
||||
|
||||
return Base::visitCallSite(CS);
|
||||
|
|
Loading…
Reference in New Issue