Clarify and elaborate the conditions on which we're checking target

features for calls.

llvm-svn: 253117
This commit is contained in:
Eric Christopher 2015-11-14 01:56:04 +00:00
parent 2cdcfd23cd
commit 39db726093
1 changed files with 6 additions and 4 deletions

View File

@ -3748,10 +3748,12 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee,
"Call must have function pointer type!");
if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl))
// If this isn't an always_inline function we can't guarantee that any
// function isn't being used correctly so only check if we have the
// attribute and a set of target attributes that might be different from
// our default.
// We can only guarantee that a function is called from the correct
// context/function based on the appropriate target attributes,
// so only check in the case where we have both always_inline and target
// since otherwise we could be making a conditional call after a check for
// the proper cpu features (and it won't cause code generation issues due to
// function based code generation).
if (TargetDecl->hasAttr<AlwaysInlineAttr>() &&
TargetDecl->hasAttr<TargetAttr>())
checkTargetFeatures(E, FD);