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 @@ -342,14 +342,12 @@ /// \param Size - The size of the symbol. /// \param Align - 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 Align, 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(Align); assert(Log2Align < (1U << NumCommonAlignmentBits) && "Out of range alignment"); CommonAlignLog2 = Log2Align; @@ -374,7 +372,7 @@ isTargetCommon() != Target) return true; } else - setCommon(Size, Align, Target); + setCommon(Size, llvm::Align(Align), 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 @@ -436,7 +436,7 @@ getAssembler().registerSymbol(*Symbol); Symbol->setExternal(true); - Symbol->setCommon(Size, ByteAlignment); + Symbol->setCommon(Size, Align(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 @@ -276,7 +276,7 @@ getAssembler().registerSymbol(*Symbol); Symbol->setExternal(true); - Symbol->setCommon(Size, ByteAlignment); + Symbol->setCommon(Size, Align(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); + Symbol->setCommon(Size, Align(ByteAlignment)); // Default csect align is 4, but common symbols have explicit alignment values // and we should honor it.