diff options
author | Devang Patel <dpatel@apple.com> | 2008-09-26 22:53:57 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2008-09-26 22:53:57 +0000 |
commit | a2c6912c416c2d9f79d18f3a88ab0ae2609286c3 (patch) | |
tree | ec41d8ff8661d77c0a59605574f39c704fc4853e /lib/CodeGen/CGCall.cpp | |
parent | 02d53e76f2666dc5edd4951fd7a9ad87a3795a49 (diff) |
Now Attributes are divided in three groups
- return attributes - inreg, zext and sext
- parameter attributes
- function attributes - nounwind, readonly, readnone, noreturn
Return attributes use 0 as the index.
Function attributes use ~0U as the index.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56705 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGCall.cpp')
-rw-r--r-- | lib/CodeGen/CGCall.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 7069fee460..a1c3c33462 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -513,6 +513,7 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, ArgTypeIterator end, AttributeListType &PAL) { unsigned FuncAttrs = 0; + unsigned RetAttrs = 0; if (TargetDecl) { if (TargetDecl->getAttr<NoThrowAttr>()) @@ -528,9 +529,9 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, case ABIArgInfo::Default: if (RetTy->isPromotableIntegerType()) { if (RetTy->isSignedIntegerType()) { - FuncAttrs |= llvm::Attribute::SExt; + RetAttrs |= llvm::Attribute::SExt; } else if (RetTy->isUnsignedIntegerType()) { - FuncAttrs |= llvm::Attribute::ZExt; + RetAttrs |= llvm::Attribute::ZExt; } } break; @@ -550,8 +551,8 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, assert(0 && "Invalid ABI kind for return argument"); } - if (FuncAttrs) - PAL.push_back(llvm::AttributeWithIndex::get(0, FuncAttrs)); + if (RetAttrs) + PAL.push_back(llvm::AttributeWithIndex::get(0, RetAttrs)); for (++begin; begin != end; ++begin) { QualType ParamType = *begin; unsigned Attributes = 0; @@ -592,6 +593,9 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl, PAL.push_back(llvm::AttributeWithIndex::get(Index, Attributes)); ++Index; } + if (FuncAttrs) + PAL.push_back(llvm::AttributeWithIndex::get(~0, FuncAttrs)); + } void CodeGenFunction::EmitFunctionProlog(llvm::Function *Fn, |