summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGCall.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2013-02-22 20:53:29 +0000
committerBill Wendling <isanbard@gmail.com>2013-02-22 20:53:29 +0000
commit2f81db66afd54612937ac36a24d271e4b1b849ef (patch)
tree1bf4e8ee1cf93957b896f6ccb3f4d291fe5b3c9e /clang/lib/CodeGen/CGCall.cpp
parentda6921eb554f9a39df72e8c39a43284ecbab326f (diff)
downloadbcm5719-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.cpp30
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();
OpenPOWER on IntegriCloud