diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-02-05 08:09:32 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-02-05 08:09:32 +0000 |
commit | ea59f896a672c2e1ef9f02277bce60257aa60989 (patch) | |
tree | ed5d0127c4dc2d60798940bdb27e1670b56d14af | |
parent | ca531fd4869a17b7a6b16008b9b85741aa6b61e8 (diff) |
Add target-dependent versions of addAttribute/removeAttribute to AttrBuilder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174356 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/IR/Attributes.h | 8 | ||||
-rw-r--r-- | lib/IR/Attributes.cpp | 14 |
2 files changed, 21 insertions, 1 deletions
diff --git a/include/llvm/IR/Attributes.h b/include/llvm/IR/Attributes.h index c726020ab8..61202eebef 100644 --- a/include/llvm/IR/Attributes.h +++ b/include/llvm/IR/Attributes.h @@ -20,6 +20,7 @@ #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/FoldingSet.h" #include <cassert> +#include <map> #include <string> namespace llvm { @@ -341,6 +342,7 @@ template<> struct DenseMapInfo<Attribute::AttrKind> { /// equality, presence of attributes, etc. class AttrBuilder { DenseSet<Attribute::AttrKind> Attrs; + std::map<std::string, std::string> TargetDepAttrs; uint64_t Alignment; uint64_t StackAlignment; public: @@ -361,12 +363,18 @@ public: /// \brief Add the Attribute object to the builder. AttrBuilder &addAttribute(Attribute A); + /// \brief Add the target-dependent attribute to the builder. + AttrBuilder &addAttribute(StringRef A, StringRef V); + /// \brief Remove an attribute from the builder. AttrBuilder &removeAttribute(Attribute::AttrKind Val); /// \brief Remove the attributes from the builder. AttrBuilder &removeAttributes(AttributeSet A, uint64_t Index); + /// \brief Remove the target-dependent attribute to the builder. + AttrBuilder &removeAttribute(StringRef A); + /// \brief Return true if the builder has the specified attribute. bool contains(Attribute::AttrKind A) const; diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index 909f22f152..8a0551cbf1 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -46,7 +46,7 @@ Attribute Attribute::get(LLVMContext &Context, Constant *Kind, Constant *Val) { pImpl->AttrsSet.InsertNode(PA, InsertPoint); } - // Return the AttributesList that we found or created. + // Return the Attribute that we found or created. return Attribute(PA); } @@ -826,6 +826,11 @@ AttrBuilder &AttrBuilder::addAttribute(Attribute Attr) { return *this; } +AttrBuilder &AttrBuilder::addAttribute(StringRef A, StringRef V) { + TargetDepAttrs[A] = V; + return *this; +} + AttrBuilder &AttrBuilder::removeAttribute(Attribute::AttrKind Val) { Attrs.erase(Val); @@ -861,6 +866,13 @@ AttrBuilder &AttrBuilder::removeAttributes(AttributeSet A, uint64_t Index) { return *this; } +AttrBuilder &AttrBuilder::removeAttribute(StringRef A) { + std::map<std::string, std::string>::iterator I = TargetDepAttrs.find(A); + if (I != TargetDepAttrs.end()) + TargetDepAttrs.erase(I); + return *this; +} + AttrBuilder &AttrBuilder::addAlignmentAttr(unsigned Align) { if (Align == 0) return *this; |