diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-02-05 23:48:36 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-02-05 23:48:36 +0000 |
commit | 64754f499058b5dc748ea6d06a084af0ed539ec4 (patch) | |
tree | 7f020dda14e1ed8c76d8b229910200b27ca2d86a /lib/IR | |
parent | 7743232775d2fe12f3152fe955218dc1fc97a497 (diff) | |
download | external_llvm-64754f499058b5dc748ea6d06a084af0ed539ec4.zip external_llvm-64754f499058b5dc748ea6d06a084af0ed539ec4.tar.gz external_llvm-64754f499058b5dc748ea6d06a084af0ed539ec4.tar.bz2 |
Add the target-dependent (string) attributes from the AttrBuilder to the AttributeSet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174467 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/IR')
-rw-r--r-- | lib/IR/Attributes.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index d61bd09..dc1a657 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -126,8 +126,13 @@ StringRef Attribute::getValueAsString() const { return pImpl ? pImpl->getValueAsString() : StringRef(); } -bool Attribute::hasAttribute(AttrKind Val) const { - return (pImpl && pImpl->hasAttribute(Val)) || (!pImpl && Val == None); +bool Attribute::hasAttribute(AttrKind Kind) const { + return (pImpl && pImpl->hasAttribute(Kind)) || (!pImpl && Kind == None); +} + +bool Attribute::hasAttribute(StringRef Kind) const { + if (!isStringAttribute()) return false; + return pImpl && pImpl->hasAttribute(Kind); } /// This returns the alignment field of an attribute as a byte alignment value. @@ -552,6 +557,7 @@ AttributeSet AttributeSet::get(LLVMContext &C, unsigned Idx, AttrBuilder &B) { if (!B.hasAttributes()) return AttributeSet(); + // Add target-independent attributes. SmallVector<std::pair<unsigned, Attribute>, 8> Attrs; for (AttrBuilder::iterator I = B.begin(), E = B.end(); I != E; ++I) { Attribute::AttrKind Kind = *I; @@ -565,6 +571,11 @@ AttributeSet AttributeSet::get(LLVMContext &C, unsigned Idx, AttrBuilder &B) { Attrs.push_back(std::make_pair(Idx, Attribute::get(C, Kind))); } + // Add target-dependent (string) attributes. + for (AttrBuilder::td_iterator I = B.td_begin(), E = B.td_end(); + I != E; ++I) + Attrs.push_back(std::make_pair(Idx, Attribute::get(C, I->first,I->second))); + return get(C, Attrs); } |