mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-21 11:38:35 +00:00
1. Drop default inline threshold back down to 200.
2. Do not use # of basic blocks as part of the cost computation since it doesn't really figure into function size. 3. More aggressively inline function with vector code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49061 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
48afd9f8a9
commit
7c3becd9d7
@ -32,8 +32,8 @@ STATISTIC(NumDeleted, "Number of functions deleted because all callers found");
|
||||
|
||||
namespace {
|
||||
cl::opt<int>
|
||||
InlineLimit("inline-threshold", cl::Hidden, cl::init(400),
|
||||
cl::desc("Control the amount of inlining to perform (default = 400)"));
|
||||
InlineLimit("inline-threshold", cl::Hidden, cl::init(200),
|
||||
cl::desc("Control the amount of inlining to perform (default = 200)"));
|
||||
}
|
||||
|
||||
Inliner::Inliner(const void *ID)
|
||||
|
@ -234,14 +234,12 @@ int InlineCostAnalyzer::getInlineCost(CallSite CS,
|
||||
// Now that we have considered all of the factors that make the call site more
|
||||
// likely to be inlined, look at factors that make us not want to inline it.
|
||||
|
||||
// Don't inline into something too big, which would make it bigger. Here, we
|
||||
// count each basic block as a single unit.
|
||||
// Don't inline into something too big, which would make it bigger.
|
||||
//
|
||||
InlineCost += Caller->size()/20;
|
||||
|
||||
// Look at the size of the callee. Each basic block counts as 20 units, and
|
||||
// each instruction counts as 5.
|
||||
InlineCost += CalleeFI.NumInsts*5 + CalleeFI.NumBlocks*20;
|
||||
// Look at the size of the callee. Each instruction counts as 5.
|
||||
InlineCost += CalleeFI.NumInsts*5;
|
||||
|
||||
return InlineCost;
|
||||
}
|
||||
@ -258,9 +256,16 @@ float InlineCostAnalyzer::getInlineFudgeFactor(CallSite CS) {
|
||||
if (CalleeFI.NumBlocks == 0)
|
||||
CalleeFI.analyzeFunction(Callee);
|
||||
|
||||
float Factor = 1.0f;
|
||||
// Single BB functions are often written to be inlined.
|
||||
if (CalleeFI.NumBlocks == 1)
|
||||
Factor += 0.5f;
|
||||
|
||||
// Be more aggressive if the function contains a good chunk (if it mades up
|
||||
// at least 10% of the instructions) of vector instructions.
|
||||
if (CalleeFI.NumVectorInsts > CalleeFI.NumInsts/10)
|
||||
return 1.5f;
|
||||
return 1.0f;
|
||||
if (CalleeFI.NumVectorInsts > CalleeFI.NumInsts/2)
|
||||
Factor += 2.0f;
|
||||
else if (CalleeFI.NumVectorInsts > CalleeFI.NumInsts/10)
|
||||
Factor += 1.5f;
|
||||
return Factor;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user