diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-02-22 20:53:29 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-02-22 20:53:29 +0000 |
commit | 2f81db66afd54612937ac36a24d271e4b1b849ef (patch) | |
tree | 1bf4e8ee1cf93957b896f6ccb3f4d291fe5b3c9e /clang/lib/CodeGen/CGCall.cpp | |
parent | da6921eb554f9a39df72e8c39a43284ecbab326f (diff) | |
download | bcm5719-llvm-2f81db66afd54612937ac36a24d271e4b1b849ef.tar.gz bcm5719-llvm-2f81db66afd54612937ac36a24d271e4b1b849ef.zip |
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
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index f2c2d0a85d4..fe0088dc0b0 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -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 (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) { + // 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 (AttrOnCallSite && !CodeGenOpts.SimplifyLibCalls) - FuncAttrs.addAttribute(llvm::Attribute::NoBuiltin); - QualType RetTy = FI.getReturnType(); unsigned Index = 1; const ABIArgInfo &RetAI = FI.getReturnInfo(); |