diff options
author | Bill Wendling <isanbard@gmail.com> | 2012-10-08 23:27:46 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2012-10-08 23:27:46 +0000 |
commit | f385f4ca1c7c3975779400dc2acf494878a8d6d4 (patch) | |
tree | 26f28e35a7802a07d71c8ef60d4e6d27383a1fe6 /lib/VMCore | |
parent | 315dc1745b6f81eca278a476f029212d9a4880ed (diff) |
Use the Attributes::Builder to build the attributes in the parser.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165458 91177308-0d34-0410-b5e6-96231b3b80d8
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 //===----------------------------------------------------------------------===// |