Handle "always inline" note during inline cost analysis.

llvm-svn: 55712
This commit is contained in:
Devang Patel 2008-09-03 18:47:45 +00:00
parent 79661994b1
commit 0d442ffa2b
2 changed files with 4 additions and 6 deletions

View File

@ -140,12 +140,7 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
int InlineCost = getInlineCost(CS);
float FudgeFactor = getInlineFudgeFactor(CS);
Function *Fn = CS.getCalledFunction();
bool AlwaysInline = false;
if (Fn && (Fn->getNotes() & FN_NOTE_AlwaysInline))
AlwaysInline = true;
if (!AlwaysInline
&& InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
if (InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
DOUT << " NOT Inlining: cost=" << InlineCost
<< ", Call: " << *CS.getInstruction();
} else {

View File

@ -221,6 +221,9 @@ int InlineCostAnalyzer::getInlineCost(CallSite CS,
// If we should never inline this, return a huge cost.
if (CalleeFI.NeverInline)
return 2000000000;
if (Callee->getNotes() & FN_NOTE_AlwaysInline)
return -2000000000;
// Add to the inline quality for properties that make the call valuable to
// inline. This includes factors that indicate that the result of inlining