diff --git a/include/llvm/IR/Attributes.h b/include/llvm/IR/Attributes.h index 1578789df60..5ebb6296cd6 100644 --- a/include/llvm/IR/Attributes.h +++ b/include/llvm/IR/Attributes.h @@ -28,6 +28,7 @@ class AttrBuilder; class AttributeImpl; class AttributeSetImpl; class AttributeSetNode; +class Constant; class LLVMContext; class Type; @@ -130,6 +131,12 @@ public: /// \brief Return true if attributes exist bool hasAttributes() const; + /// \brief Return the kind of this attribute. + Constant *getAttributeKind() const; + + /// \brief Return the value (if present) of the non-target-specific attribute. + ArrayRef getAttributeValues() const; + /// \brief Returns the alignment field of an attribute as a byte alignment /// value. unsigned getAlignment() const; diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index a3f62ae0764..1a971109c22 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -83,6 +83,14 @@ bool Attribute::hasAttributes() const { return pImpl && pImpl->hasAttributes(); } +Constant *Attribute::getAttributeKind() const { + return pImpl ? pImpl->getAttributeKind() : 0; +} + +ArrayRef Attribute::getAttributeValues() const { + return pImpl ? pImpl->getAttributeValues() : ArrayRef(); +} + /// This returns the alignment field of an attribute as a byte alignment value. unsigned Attribute::getAlignment() const { if (!hasAttribute(Attribute::Alignment))