Make -fno-inline attach NoInline attribute to all functions that are not
marked as AlwaysInline or ForceInline. This moves us to what gcc does with -fno-inline. The attribute approach was discussed to be better than switching to InlineAlways inliner in presence of LTO. llvm-svn: 199324
This commit is contained in:
@@ -509,15 +509,20 @@ void CodeGenFunction::StartFunction(GlobalDecl GD,
|
||||
}
|
||||
|
||||
// Pass inline keyword to optimizer if it appears explicitly on any
|
||||
// declaration.
|
||||
if (!CGM.getCodeGenOpts().NoInline)
|
||||
if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
|
||||
// declaration. Also, in the case of -fno-inline attach NoInline
|
||||
// attribute to all function that are not marked AlwaysInline or ForceInline.
|
||||
if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
|
||||
if (!CGM.getCodeGenOpts().NoInline) {
|
||||
for (FunctionDecl::redecl_iterator RI = FD->redecls_begin(),
|
||||
RE = FD->redecls_end(); RI != RE; ++RI)
|
||||
if (RI->isInlineSpecified()) {
|
||||
Fn->addFnAttr(llvm::Attribute::InlineHint);
|
||||
break;
|
||||
}
|
||||
} else if (!FD->hasAttr<AlwaysInlineAttr>() &&
|
||||
!FD->hasAttr<ForceInlineAttr>())
|
||||
Fn->addFnAttr(llvm::Attribute::NoInline);
|
||||
}
|
||||
|
||||
if (getLangOpts().OpenCL) {
|
||||
// Add metadata for a kernel function.
|
||||
|
||||
Reference in New Issue
Block a user