diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index b013b46810871e..b9dff8c02ce4fc 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -1215,11 +1215,13 @@ unsigned llvm::getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign, // Avoid trouble with ridiculously large TrailZ values, such as // those computed from a null pointer. - // LLVM doesn't support alignments larger than (1 << MaxAlignmentExponent). - TrailZ = std::min(TrailZ, Value::MaxAlignmentExponent); + TrailZ = std::min(TrailZ, unsigned(sizeof(unsigned) * CHAR_BIT - 1)); unsigned Align = 1u << std::min(Known.getBitWidth() - 1, TrailZ); + // LLVM doesn't support alignments larger than this currently. + Align = std::min(Align, +Value::MaximumAlignment); + if (PrefAlign > Align) Align = enforceKnownAlignment(V, Align, PrefAlign, DL);