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:
Evan Cheng 2008-04-01 23:59:29 +00:00
parent 48afd9f8a9
commit 7c3becd9d7
2 changed files with 15 additions and 10 deletions

View File

@ -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)

View File

@ -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;
}