summaryrefslogtreecommitdiff
path: root/lib/VMCore
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2012-10-08 23:27:46 +0000
committerBill Wendling <isanbard@gmail.com>2012-10-08 23:27:46 +0000
commitf385f4ca1c7c3975779400dc2acf494878a8d6d4 (patch)
tree26f28e35a7802a07d71c8ef60d4e6d27383a1fe6 /lib/VMCore
parent315dc1745b6f81eca278a476f029212d9a4880ed (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.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/VMCore/Attributes.cpp b/lib/VMCore/Attributes.cpp
index 1fcebdf5ba2..6905e4df39c 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
//===----------------------------------------------------------------------===//