From: Bill Wendling Date: Fri, 21 Sep 2012 16:07:28 +0000 (+0000) Subject: Encapsulate the "construct*AlignmentFromInt" functions. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=30b483c94001927b3593ed200e823104bab51660;p=oota-llvm.git Encapsulate the "construct*AlignmentFromInt" functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164373 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Attributes.h b/include/llvm/Attributes.h index 6b3d122f5ef..9dc2c1aa579 100644 --- a/include/llvm/Attributes.h +++ b/include/llvm/Attributes.h @@ -223,6 +223,30 @@ public: return 1U << ((getRawStackAlignment() >> 26) - 1); } + /// This turns an int alignment (a power of 2, normally) into the form used + /// internally in Attributes. + static Attributes constructAlignmentFromInt(unsigned i) { + // Default alignment, allow the target to define how to align it. + if (i == 0) + return Attribute::None; + + assert(isPowerOf2_32(i) && "Alignment must be a power of two."); + assert(i <= 0x40000000 && "Alignment too large."); + return Attributes((Log2_32(i)+1) << 16); + } + + /// This turns an int stack alignment (which must be a power of 2) into the + /// form used internally in Attributes. + static Attributes constructStackAlignmentFromInt(unsigned i) { + // Default alignment, allow the target to define how to align it. + if (i == 0) + return Attribute::None; + + assert(isPowerOf2_32(i) && "Alignment must be a power of two."); + assert(i <= 0x100 && "Alignment too large."); + return Attributes((Log2_32(i)+1) << 26); + } + // This is a "safe bool() operator". operator const void *() const { return Bits ? this : 0; } bool isEmptyOrSingleton() const { return (Bits & (Bits - 1)) == 0; } @@ -300,30 +324,6 @@ const AttrConst MutuallyIncompatible[5] = { /// @brief Which attributes cannot be applied to a type. Attributes typeIncompatible(Type *Ty); -/// This turns an int alignment (a power of 2, normally) into the -/// form used internally in Attributes. -inline Attributes constructAlignmentFromInt(unsigned i) { - // Default alignment, allow the target to define how to align it. - if (i == 0) - return None; - - assert(isPowerOf2_32(i) && "Alignment must be a power of two."); - assert(i <= 0x40000000 && "Alignment too large."); - return Attributes((Log2_32(i)+1) << 16); -} - -/// This turns an int stack alignment (which must be a power of 2) into -/// the form used internally in Attributes. -inline Attributes constructStackAlignmentFromInt(unsigned i) { - // Default alignment, allow the target to define how to align it. - if (i == 0) - return None; - - assert(isPowerOf2_32(i) && "Alignment must be a power of two."); - assert(i <= 0x100 && "Alignment too large."); - return Attributes((Log2_32(i)+1) << 26); -} - /// This returns an integer containing an encoding of all the /// LLVM attributes found in the given attribute bitset. Any /// change to this encoding is a breaking change to bitcode @@ -362,7 +362,7 @@ inline Attributes decodeLLVMAttributesForBitcode(uint64_t EncodedAttrs) { Attributes Attrs(EncodedAttrs & 0xffff); if (Alignment) - Attrs |= Attribute::constructAlignmentFromInt(Alignment); + Attrs |= Attributes::constructAlignmentFromInt(Alignment); Attrs |= Attributes((EncodedAttrs & (0xfffull << 32)) >> 11); return Attrs; diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index c1d5272ca50..eedec8383a5 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -967,7 +967,7 @@ bool LLParser::ParseOptionalAttrs(Attributes &Attrs, unsigned AttrKind) { unsigned Alignment; if (ParseOptionalStackAlignment(Alignment)) return true; - Attrs |= Attribute::constructStackAlignmentFromInt(Alignment); + Attrs |= Attributes::constructStackAlignmentFromInt(Alignment); continue; } @@ -975,7 +975,7 @@ bool LLParser::ParseOptionalAttrs(Attributes &Attrs, unsigned AttrKind) { unsigned Alignment; if (ParseOptionalAlignment(Alignment)) return true; - Attrs |= Attribute::constructAlignmentFromInt(Alignment); + Attrs |= Attributes::constructAlignmentFromInt(Alignment); continue; } diff --git a/lib/VMCore/Core.cpp b/lib/VMCore/Core.cpp index 924367deef2..90ecdaecf41 100644 --- a/lib/VMCore/Core.cpp +++ b/lib/VMCore/Core.cpp @@ -1475,7 +1475,7 @@ LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg) { void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) { unwrap(Arg)->addAttr( - Attribute::constructAlignmentFromInt(align)); + Attributes::constructAlignmentFromInt(align)); } /*--.. Operations on basic blocks ..........................................--*/ @@ -1680,7 +1680,7 @@ void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index, CallSite Call = CallSite(unwrap(Instr)); Call.setAttributes( Call.getAttributes().addAttr(index, - Attribute::constructAlignmentFromInt(align))); + Attributes::constructAlignmentFromInt(align))); } /*--.. Operations on call instructions (only) ..............................--*/