respect inline=never and inline=always notes.

llvm-svn: 55673
This commit is contained in:
Devang Patel 2008-09-02 22:16:13 +00:00
parent 09ff2e7372
commit bfa535af9f
3 changed files with 28 additions and 1 deletions

View File

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

View File

@ -0,0 +1,10 @@
; RUN: llvm-as < %s | opt -inline-threshold=0 -inline | llvm-dis | not grep call
define i32 @fn2() notes(inline=always) {
ret i32 1
}
define i32 @fn3() {
%r = call i32 @fn2()
ret i32 %r
}

View File

@ -0,0 +1,10 @@
; RUN: llvm-as < %s | opt -inline | llvm-dis | grep call | count 1
define i32 @fn2() notes(inline=never) {
ret i32 1
}
define i32 @fn3() {
%r = call i32 @fn2()
ret i32 %r
}