mirror of
https://github.com/intel/llvm.git
synced 2026-01-25 10:55:58 +08:00
Make sure we apply attributes to correct places.
Some attributes make sense only on the function or on the call site, but not both. Make this distinction here. llvm-svn: 175918
This commit is contained in:
@@ -1021,21 +1021,25 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
|
||||
if (CodeGenOpts.NoImplicitFloat)
|
||||
FuncAttrs.addAttribute(llvm::Attribute::NoImplicitFloat);
|
||||
|
||||
if (!TargetOpts.CPU.empty())
|
||||
FuncAttrs.addAttribute("target-cpu", TargetOpts.CPU);
|
||||
if (AttrOnCallSite) {
|
||||
// Attributes that should go on the call site only.
|
||||
if (!CodeGenOpts.SimplifyLibCalls)
|
||||
FuncAttrs.addAttribute(llvm::Attribute::NoBuiltin);
|
||||
} else {
|
||||
// Attributes that should go on the function, but not the call site.
|
||||
if (!TargetOpts.CPU.empty())
|
||||
FuncAttrs.addAttribute("target-cpu", TargetOpts.CPU);
|
||||
|
||||
if (TargetOpts.Features.size()) {
|
||||
llvm::SubtargetFeatures Features;
|
||||
for (std::vector<std::string>::const_iterator
|
||||
it = TargetOpts.Features.begin(),
|
||||
ie = TargetOpts.Features.end(); it != ie; ++it)
|
||||
Features.AddFeature(*it);
|
||||
FuncAttrs.addAttribute("target-features", Features.getString());
|
||||
if (TargetOpts.Features.size()) {
|
||||
llvm::SubtargetFeatures Features;
|
||||
for (std::vector<std::string>::const_iterator
|
||||
it = TargetOpts.Features.begin(),
|
||||
ie = TargetOpts.Features.end(); it != ie; ++it)
|
||||
Features.AddFeature(*it);
|
||||
FuncAttrs.addAttribute("target-features", Features.getString());
|
||||
}
|
||||
}
|
||||
|
||||
if (AttrOnCallSite && !CodeGenOpts.SimplifyLibCalls)
|
||||
FuncAttrs.addAttribute(llvm::Attribute::NoBuiltin);
|
||||
|
||||
QualType RetTy = FI.getReturnType();
|
||||
unsigned Index = 1;
|
||||
const ABIArgInfo &RetAI = FI.getReturnInfo();
|
||||
|
||||
Reference in New Issue
Block a user