diff --git a/llvm/include/llvm/MC/MCSymbol.h b/llvm/include/llvm/MC/MCSymbol.h --- a/llvm/include/llvm/MC/MCSymbol.h +++ b/llvm/include/llvm/MC/MCSymbol.h @@ -340,16 +340,14 @@ /// Mark this symbol as being 'common'. /// /// \param Size - The size of the symbol. - /// \param Align - The alignment of the symbol. + /// \param Alignment - The alignment of the symbol. /// \param Target - Is the symbol a target-specific common-like symbol. - void setCommon(uint64_t Size, unsigned Align, bool Target = false) { + void setCommon(uint64_t Size, Align Alignment, bool Target = false) { assert(getOffset() == 0); CommonSize = Size; SymbolContents = Target ? SymContentsTargetCommon : SymContentsCommon; - assert((!Align || isPowerOf2_32(Align)) && - "Alignment must be a power of 2"); - unsigned Log2Align = Log2_32(Align) + 1; + unsigned Log2Align = encode(Alignment); assert(Log2Align < (1U << NumCommonAlignmentBits) && "Out of range alignment"); CommonAlignLog2 = Log2Align; @@ -364,17 +362,17 @@ /// Declare this symbol as being 'common'. /// /// \param Size - The size of the symbol. - /// \param Align - The alignment of the symbol. + /// \param Alignment - The alignment of the symbol. /// \param Target - Is the symbol a target-specific common-like symbol. /// \return True if symbol was already declared as a different type - bool declareCommon(uint64_t Size, unsigned Align, bool Target = false) { + bool declareCommon(uint64_t Size, unsigned Alignment, bool Target = false) { assert(isCommon() || getOffset() == 0); if(isCommon()) { - if (CommonSize != Size || getCommonAlignment() != Align || + if (CommonSize != Size || getCommonAlignment() != Alignment || isTargetCommon() != Target) return true; } else - setCommon(Size, Align, Target); + setCommon(Size, Align(Alignment), Target); return false; } diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp --- a/llvm/lib/MC/MCMachOStreamer.cpp +++ b/llvm/lib/MC/MCMachOStreamer.cpp @@ -437,7 +437,7 @@ getAssembler().registerSymbol(*Symbol); Symbol->setExternal(true); - Symbol->setCommon(Size, ByteAlignment.value()); + Symbol->setCommon(Size, ByteAlignment); } void MCMachOStreamer::emitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, diff --git a/llvm/lib/MC/MCWinCOFFStreamer.cpp b/llvm/lib/MC/MCWinCOFFStreamer.cpp --- a/llvm/lib/MC/MCWinCOFFStreamer.cpp +++ b/llvm/lib/MC/MCWinCOFFStreamer.cpp @@ -274,7 +274,7 @@ getAssembler().registerSymbol(*Symbol); Symbol->setExternal(true); - Symbol->setCommon(Size, ByteAlignment.value()); + Symbol->setCommon(Size, ByteAlignment); if (!T.isWindowsMSVCEnvironment() && ByteAlignment > 1) { SmallString<128> Directive; diff --git a/llvm/lib/MC/MCXCOFFStreamer.cpp b/llvm/lib/MC/MCXCOFFStreamer.cpp --- a/llvm/lib/MC/MCXCOFFStreamer.cpp +++ b/llvm/lib/MC/MCXCOFFStreamer.cpp @@ -95,7 +95,7 @@ getAssembler().registerSymbol(*Symbol); Symbol->setExternal(cast(Symbol)->getStorageClass() != XCOFF::C_HIDEXT); - Symbol->setCommon(Size, ByteAlignment.value()); + Symbol->setCommon(Size, ByteAlignment); // Default csect align is 4, but common symbols have explicit alignment values // and we should honor it.