diff options
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/Attributes.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/VMCore/Attributes.cpp b/lib/VMCore/Attributes.cpp index 1fcebdf5ba..6905e4df39 100644 --- a/lib/VMCore/Attributes.cpp +++ b/lib/VMCore/Attributes.cpp @@ -33,6 +33,8 @@ Attributes::Attributes(Attribute::AttrConst Val) : Attrs(Val.v) {} Attributes::Attributes(AttributesImpl *A) : Attrs(A->Bits) {} +Attributes::Attributes(const Attributes &A) : Attrs(A.Attrs) {} + // FIXME: This is temporary until we have implemented the uniquified version of // AttributesImpl. Attributes Attributes::get(Attributes::Builder &B) { @@ -451,6 +453,26 @@ void Attributes::Builder::removeZExtAttr() { Bits &= ~Attribute::ZExt_i; } +void Attributes::Builder::removeAlignmentAttr() { + Bits &= ~Attribute::Alignment_i; +} +void Attributes::Builder::removeStackAlignmentAttr() { + Bits &= ~Attribute::StackAlignment_i; +} + +bool Attributes::Builder::hasAttributes() const { + return Bits != 0; +} +bool Attributes::Builder::hasAlignmentAttr() const { + return Bits & Attribute::Alignment_i; +} + +uint64_t Attributes::Builder::getAlignment() const { + if (!hasAlignmentAttr()) + return 0; + return 1U << (((Bits & Attribute::Alignment_i) >> 16) - 1); +} + //===----------------------------------------------------------------------===// // AttributeImpl Definition //===----------------------------------------------------------------------===// |