mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-05 17:18:55 +00:00
Reduce the inlining cost of functions that contain calls to easily,
and frequently optimized functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93448 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d7e6457c3f
commit
2d59ae6a35
@ -102,6 +102,32 @@ unsigned InlineCostAnalyzer::FunctionInfo::
|
||||
return Reduction;
|
||||
}
|
||||
|
||||
// callIsSmall - If a call will lower to a single selection DAG node, or
|
||||
// is otherwise deemed small return true.
|
||||
// TODO: Perhaps calls like memcpy, strcpy, etc?
|
||||
static bool callIsSmall(const Function *F) {
|
||||
if (F && !F->hasLocalLinkage() && F->hasName()) {
|
||||
StringRef Name = F->getName();
|
||||
|
||||
// These will all likely lower to a single selection DAG node.
|
||||
if (Name == "copysign" || Name == "copysignf" ||
|
||||
Name == "fabs" || Name == "fabsf" || Name == "fabsl" ||
|
||||
Name == "sin" || Name == "sinf" || Name == "sinl" ||
|
||||
Name == "cos" || Name == "cosf" || Name == "cosl" ||
|
||||
Name == "sqrt" || Name == "sqrtf" || Name == "sqrtl" )
|
||||
return true;
|
||||
|
||||
// These are all likely to be optimized into something smaller.
|
||||
if (Name == "pow" || Name == "powf" || Name == "powl" ||
|
||||
Name == "exp2" || Name == "exp2l" || Name == "exp2f" ||
|
||||
Name == "floor" || Name == "floorf" || Name == "ceil" ||
|
||||
Name == "round" || Name == "ffs" || Name == "ffsl" ||
|
||||
Name == "abs" || Name == "labs" || Name == "llabs")
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// analyzeBasicBlock - Fill in the current structure with information gleaned
|
||||
/// from the specified block.
|
||||
void CodeMetrics::analyzeBasicBlock(const BasicBlock *BB) {
|
||||
@ -129,7 +155,7 @@ void CodeMetrics::analyzeBasicBlock(const BasicBlock *BB) {
|
||||
|
||||
// Calls often compile into many machine instructions. Bump up their
|
||||
// cost to reflect this.
|
||||
if (!isa<IntrinsicInst>(II))
|
||||
if (!isa<IntrinsicInst>(II) && !callIsSmall(CS.getCalledFunction()))
|
||||
NumInsts += InlineConstants::CallPenalty;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user