diff --git a/clang/include/clang/AST/CharUnits.h b/clang/include/clang/AST/CharUnits.h --- a/clang/include/clang/AST/CharUnits.h +++ b/clang/include/clang/AST/CharUnits.h @@ -70,6 +70,12 @@ return CharUnits(Quantity.value()); } + /// fromQuantity - Construct a CharUnits quantity from an llvm::Align + /// quantity. + static CharUnits fromQuantity(llvm::MaybeAlign Quantity) { + return Quantity ? fromQuantity(*Quantity) : Zero(); + } + // Compound assignment. CharUnits& operator+= (const CharUnits &Other) { Quantity += Other.Quantity; diff --git a/clang/lib/CodeGen/CGCUDANV.cpp b/clang/lib/CodeGen/CGCUDANV.cpp --- a/clang/lib/CodeGen/CGCUDANV.cpp +++ b/clang/lib/CodeGen/CGCUDANV.cpp @@ -488,7 +488,7 @@ llvm::Value *OldV = Var; llvm::Instruction *NewV = new llvm::LoadInst(Var->getType(), ManagedVar, "ld.managed", false, - llvm::Align(Var->getAlignment()), I); + Var->getAlign().valueOrOne(), I); WorkItem.pop_back(); // Replace constant expressions directly or indirectly using the managed // variable with instructions. @@ -631,7 +631,7 @@ Builder.CreateBitCast(Var, VoidPtrTy), VarName, llvm::ConstantInt::get(VarSizeTy, VarSize), - llvm::ConstantInt::get(IntTy, Var->getAlignment())}; + llvm::ConstantInt::get(IntTy, Var->getAlign()->value())}; if (!Var->isDeclaration()) Builder.CreateCall(RegisterManagedVar, Args); } else { @@ -842,9 +842,8 @@ // Prevent the weak symbol in different shared libraries being merged. if (Linkage != llvm::GlobalValue::InternalLinkage) GpuBinaryHandle->setVisibility(llvm::GlobalValue::HiddenVisibility); - Address GpuBinaryAddr( - GpuBinaryHandle, VoidPtrPtrTy, - CharUnits::fromQuantity(GpuBinaryHandle->getAlignment())); + Address GpuBinaryAddr(GpuBinaryHandle, VoidPtrPtrTy, + CharUnits::fromQuantity(GpuBinaryHandle->getAlign())); { auto *HandleValue = CtorBuilder.CreateLoad(GpuBinaryAddr); llvm::Constant *Zero = @@ -979,9 +978,8 @@ CGBuilderTy DtorBuilder(CGM, Context); DtorBuilder.SetInsertPoint(DtorEntryBB); - Address GpuBinaryAddr( - GpuBinaryHandle, GpuBinaryHandle->getValueType(), - CharUnits::fromQuantity(GpuBinaryHandle->getAlignment())); + Address GpuBinaryAddr(GpuBinaryHandle, GpuBinaryHandle->getValueType(), + CharUnits::fromQuantity(GpuBinaryHandle->getAlign())); auto *HandleValue = DtorBuilder.CreateLoad(GpuBinaryAddr); // There is only one HIP fat binary per linked module, however there are // multiple destructor functions. Make sure the fat binary is unregistered diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -1157,7 +1157,7 @@ GV->setAlignment(Align.getAsAlign()); GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); CacheEntry = GV; - } else if (CacheEntry->getAlignment() < uint64_t(Align.getQuantity())) { + } else if (CacheEntry->getAlign() < uint64_t(Align.getQuantity())) { CacheEntry->setAlignment(Align.getAsAlign()); } diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -1987,8 +1987,8 @@ GetConstantStringEntry(NSConstantStringMap, Literal, StringLength); if (auto *C = Entry.second) - return ConstantAddress( - C, C->getValueType(), CharUnits::fromQuantity(C->getAlignment())); + return ConstantAddress(C, C->getValueType(), + CharUnits::fromQuantity(C->getAlign())); // If we don't already have it, get _NSConstantStringClassReference. llvm::Constant *Class = getNSConstantStringClassRef(); diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2132,7 +2132,7 @@ // functions. If the current target's C++ ABI requires this and this is a // member function, set its alignment accordingly. if (getTarget().getCXXABI().areMemberFunctionsAligned()) { - if (F->getAlignment() < 2 && isa(D)) + if (F->getAlign() < 2 && isa(D)) F->setAlignment(llvm::Align(2)); } @@ -5611,8 +5611,8 @@ StringLength); if (auto *C = Entry.second) - return ConstantAddress( - C, C->getValueType(), CharUnits::fromQuantity(C->getAlignment())); + return ConstantAddress(C, C->getValueType(), + CharUnits::fromQuantity(C->getAlign())); llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty); llvm::Constant *Zeros[] = { Zero, Zero }; @@ -5909,7 +5909,7 @@ if (!LangOpts.WritableStrings) { Entry = &ConstantStringMap[C]; if (auto GV = *Entry) { - if (uint64_t(Alignment.getQuantity()) > GV->getAlignment()) + if (GV->getAlign() < uint64_t(Alignment.getQuantity())) GV->setAlignment(Alignment.getAsAlign()); return ConstantAddress(castStringLiteralToDefaultAddressSpace(*this, GV), GV->getValueType(), Alignment); @@ -5976,7 +5976,7 @@ if (!LangOpts.WritableStrings) { Entry = &ConstantStringMap[C]; if (auto GV = *Entry) { - if (uint64_t(Alignment.getQuantity()) > GV->getAlignment()) + if (GV->getAlign() < uint64_t(Alignment.getQuantity())) GV->setAlignment(Alignment.getAsAlign()); return ConstantAddress(castStringLiteralToDefaultAddressSpace(*this, GV), GV->getValueType(), Alignment); diff --git a/llvm/include/llvm/IR/GlobalObject.h b/llvm/include/llvm/IR/GlobalObject.h --- a/llvm/include/llvm/IR/GlobalObject.h +++ b/llvm/include/llvm/IR/GlobalObject.h @@ -67,6 +67,7 @@ GlobalObject(const GlobalObject &) = delete; /// FIXME: Remove this function once transition to Align is over. + LLVM_DEPRECATED("Use getAlign() instead", "getAlign") uint64_t getAlignment() const { MaybeAlign Align = getAlign(); return Align ? Align->value() : 0;