diff options
-rw-r--r-- | include/llvm/Attributes.h | 16 | ||||
-rw-r--r-- | lib/VMCore/Attributes.cpp | 5 |
2 files changed, 14 insertions, 7 deletions
diff --git a/include/llvm/Attributes.h b/include/llvm/Attributes.h index eb1798f..ce477c8 100644 --- a/include/llvm/Attributes.h +++ b/include/llvm/Attributes.h @@ -103,6 +103,7 @@ public: uint64_t Bits; public: Builder() : Bits(0) {} + explicit Builder(uint64_t B) : Bits(B) {} Builder(const Attributes &A) : Bits(A.Raw()) {} void clear() { Bits = 0; } @@ -118,6 +119,10 @@ public: Builder &addAttribute(Attributes::AttrVal Val); Builder &removeAttribute(Attributes::AttrVal Val); + /// addRawValue - Add the raw value to the internal representation. This + /// should be used ONLY for decoding bitcode! + Builder &addRawValue(uint64_t Val); + /// addAlignmentAttr - This turns an int alignment (which must be a power of /// 2) into the form used internally in Attributes. Builder &addAlignmentAttr(unsigned Align); @@ -266,14 +271,11 @@ public: assert((!Alignment || isPowerOf2_32(Alignment)) && "Alignment must be a power of two."); - Attributes Attrs(EncodedAttrs & 0xffff); - if (Alignment) { - Attributes::Builder B; + Attributes::Builder B(EncodedAttrs & 0xffff); + if (Alignment) B.addAlignmentAttr(Alignment); - Attrs |= Attributes::get(B); - } - Attrs |= Attributes((EncodedAttrs & (0xfffULL << 32)) >> 11); - return Attrs; + B.addRawValue((EncodedAttrs & (0xfffULL << 32)) >> 11); + return Attributes::get(B); } /// getAsString - The set of Attributes set in Attributes is converted to a diff --git a/lib/VMCore/Attributes.cpp b/lib/VMCore/Attributes.cpp index 5f4b51f..4f3200b 100644 --- a/lib/VMCore/Attributes.cpp +++ b/lib/VMCore/Attributes.cpp @@ -215,6 +215,11 @@ addAttribute(Attributes::AttrVal Val) { return *this; } +Attributes::Builder &Attributes::Builder::addRawValue(uint64_t Val) { + Bits |= Val; + return *this; +} + Attributes::Builder &Attributes::Builder::addAlignmentAttr(unsigned Align) { if (Align == 0) return *this; assert(isPowerOf2_32(Align) && "Alignment must be a power of two."); |