diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-02-12 07:56:49 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-02-12 07:56:49 +0000 |
commit | 7cde51d84318cf1c33ec8252bf3badf2c5755c1e (patch) | |
tree | d5fe13c8ffc908377bb12dea2adf986a62f3e789 /llvm/lib/IR/Attributes.cpp | |
parent | af77617b2111e82875935800b6afe38eea8601ca (diff) | |
download | bcm5719-llvm-7cde51d84318cf1c33ec8252bf3badf2c5755c1e.tar.gz bcm5719-llvm-7cde51d84318cf1c33ec8252bf3badf2c5755c1e.zip |
Support string attributes in the AttrBuilder.
llvm-svn: 174948
Diffstat (limited to 'llvm/lib/IR/Attributes.cpp')
-rw-r--r-- | llvm/lib/IR/Attributes.cpp | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/llvm/lib/IR/Attributes.cpp b/llvm/lib/IR/Attributes.cpp index d338d6538e8..8249be45746 100644 --- a/llvm/lib/IR/Attributes.cpp +++ b/llvm/lib/IR/Attributes.cpp @@ -938,14 +938,22 @@ AttrBuilder &AttrBuilder::removeAttributes(AttributeSet A, uint64_t Index) { assert(Idx != ~0U && "Couldn't find index in AttributeSet!"); for (AttributeSet::iterator I = A.begin(Idx), E = A.end(Idx); I != E; ++I) { - // FIXME: Support string attributes. - Attribute::AttrKind Kind = I->getKindAsEnum(); - Attrs.erase(Kind); + Attribute Attr = *I; + if (Attr.isEnumAttribute() || Attr.isAlignAttribute()) { + Attribute::AttrKind Kind = I->getKindAsEnum(); + Attrs.erase(Kind); - if (Kind == Attribute::Alignment) - Alignment = 0; - else if (Kind == Attribute::StackAlignment) - StackAlignment = 0; + if (Kind == Attribute::Alignment) + Alignment = 0; + else if (Kind == Attribute::StackAlignment) + StackAlignment = 0; + } else { + assert(Attr.isStringAttribute() && "Invalid attribute type!"); + std::map<std::string, std::string>::iterator + Iter = TargetDepAttrs.find(Attr.getKindAsString()); + if (Iter != TargetDepAttrs.end()) + TargetDepAttrs.erase(Iter); + } } return *this; @@ -1021,10 +1029,16 @@ bool AttrBuilder::hasAttributes(AttributeSet A, uint64_t Index) const { assert(Idx != ~0U && "Couldn't find the index!"); for (AttributeSet::iterator I = A.begin(Idx), E = A.end(Idx); - I != E; ++I) - // FIXME: Support string attributes. - if (Attrs.count(I->getKindAsEnum())) - return true; + I != E; ++I) { + Attribute Attr = *I; + if (Attr.isEnumAttribute() || Attr.isAlignAttribute()) { + if (Attrs.count(I->getKindAsEnum())) + return true; + } else { + assert(Attr.isStringAttribute() && "Invalid attribute kind!"); + return TargetDepAttrs.find(Attr.getKindAsString())!=TargetDepAttrs.end(); + } + } return false; } |