mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-22 03:31:06 +00:00
Encapsulate the "construct*AlignmentFromInt" functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164373 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ba4388656c
commit
30b483c940
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -1475,7 +1475,7 @@ LLVMAttribute LLVMGetAttribute(LLVMValueRef Arg) {
|
||||
|
||||
void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) {
|
||||
unwrap<Argument>(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<Instruction>(Instr));
|
||||
Call.setAttributes(
|
||||
Call.getAttributes().addAttr(index,
|
||||
Attribute::constructAlignmentFromInt(align)));
|
||||
Attributes::constructAlignmentFromInt(align)));
|
||||
}
|
||||
|
||||
/*--.. Operations on call instructions (only) ..............................--*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user