diff options
Diffstat (limited to 'lib/VMCore/Attributes.cpp')
-rw-r--r-- | lib/VMCore/Attributes.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/VMCore/Attributes.cpp b/lib/VMCore/Attributes.cpp index 12f0699c02..d1b693b4c6 100644 --- a/lib/VMCore/Attributes.cpp +++ b/lib/VMCore/Attributes.cpp @@ -28,6 +28,9 @@ using namespace llvm; // Attribute Function Definitions //===----------------------------------------------------------------------===// +bool Attributes::hasAttributes(const Attributes &A) const { + return Bits & A.Bits; +} bool Attributes::hasAddressSafetyAttr() const { return Bits & Attribute::AddressSafety_i; } @@ -125,6 +128,31 @@ unsigned Attributes::getStackAlignment() const { return 1U << (((Bits & Attribute::StackAlignment_i) >> 26) - 1); } +bool Attributes::isEmptyOrSingleton() const { + return (Bits & (Bits - 1)) == 0; +} + +Attributes Attributes::operator | (const Attributes &Attrs) const { + return Attributes(Bits | Attrs.Bits); +} +Attributes Attributes::operator & (const Attributes &Attrs) const { + return Attributes(Bits & Attrs.Bits); +} +Attributes Attributes::operator ^ (const Attributes &Attrs) const { + return Attributes(Bits ^ Attrs.Bits); +} +Attributes &Attributes::operator |= (const Attributes &Attrs) { + Bits |= Attrs.Bits; + return *this; +} +Attributes &Attributes::operator &= (const Attributes &Attrs) { + Bits &= Attrs.Bits; + return *this; +} +Attributes Attributes::operator ~ () const { + return Attributes(~Bits); +} + Attributes Attributes::typeIncompatible(Type *Ty) { Attributes::Builder Incompatible; |