OSDN Git Service

Fix 46594 - Alignment assertion failure in instcombine
authorGuillaume Chatelet <gchatelet@google.com>
Mon, 6 Jul 2020 08:44:49 +0000 (08:44 +0000)
committerGuillaume Chatelet <gchatelet@google.com>
Mon, 6 Jul 2020 08:45:05 +0000 (08:45 +0000)
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp

index 966b324..836af62 100644 (file)
@@ -4540,10 +4540,11 @@ static void annotateAnyAllocSite(CallBase &Call, const TargetLibraryInfo *TLI) {
                           Call.getContext(), Op1C->getZExtValue()));
     // Add alignment attribute if alignment is a power of two constant.
     if (Op0C && Op0C->getValue().ult(llvm::Value::MaximumAlignment)) {
-      if (MaybeAlign AlignmentVal = Op0C->getMaybeAlignValue())
-        Call.addAttribute(
-            AttributeList::ReturnIndex,
-            Attribute::getWithAlignment(Call.getContext(), *AlignmentVal));
+      uint64_t AlignmentVal = Op0C->getZExtValue();
+      if (llvm::isPowerOf2_64(AlignmentVal))
+        Call.addAttribute(AttributeList::ReturnIndex,
+                          Attribute::getWithAlignment(Call.getContext(),
+                                                      Align(AlignmentVal)));
     }
   } else if (isReallocLikeFn(&Call, TLI) && Op1C) {
     Call.addAttribute(AttributeList::ReturnIndex,