diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -468,19 +468,45 @@ /// If the pointer isn't an i8*, it will be converted. If a TBAA tag is /// specified, it will be added to the instruction. Likewise with alias.scope /// and noalias tags. + /// FIXME: Remove this function once transition to Align is over. + /// Use the version that takes Align instead of this one. + LLVM_ATTRIBUTE_DEPRECATED( + CallInst *CreateElementUnorderedAtomicMemSet( + Value *Ptr, Value *Val, uint64_t Size, unsigned Alignment, + uint32_t ElementSize, MDNode *TBAATag = nullptr, + MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr), + "Use the version that takes Align instead of this one") { + return CreateElementUnorderedAtomicMemSet(Ptr, Val, getInt64(Size), + Align(Alignment), ElementSize, + TBAATag, ScopeTag, NoAliasTag); + } + CallInst *CreateElementUnorderedAtomicMemSet(Value *Ptr, Value *Val, - uint64_t Size, unsigned Align, + uint64_t Size, Align Alignment, uint32_t ElementSize, MDNode *TBAATag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr) { - return CreateElementUnorderedAtomicMemSet(Ptr, Val, getInt64(Size), Align, + return CreateElementUnorderedAtomicMemSet(Ptr, Val, getInt64(Size), + Align(Alignment), ElementSize, + TBAATag, ScopeTag, NoAliasTag); + } + + /// FIXME: Remove this function once transition to Align is over. + /// Use the version that takes Align instead of this one. + LLVM_ATTRIBUTE_DEPRECATED( + CallInst *CreateElementUnorderedAtomicMemSet( + Value *Ptr, Value *Val, Value *Size, unsigned Alignment, + uint32_t ElementSize, MDNode *TBAATag = nullptr, + MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr), + "Use the version that takes Align instead of this one") { + return CreateElementUnorderedAtomicMemSet(Ptr, Val, Size, Align(Alignment), ElementSize, TBAATag, ScopeTag, NoAliasTag); } CallInst *CreateElementUnorderedAtomicMemSet(Value *Ptr, Value *Val, - Value *Size, unsigned Align, + Value *Size, Align Alignment, uint32_t ElementSize, MDNode *TBAATag = nullptr, MDNode *ScopeTag = nullptr, diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp --- a/llvm/lib/IR/IRBuilder.cpp +++ b/llvm/lib/IR/IRBuilder.cpp @@ -125,10 +125,8 @@ } CallInst *IRBuilderBase::CreateElementUnorderedAtomicMemSet( - Value *Ptr, Value *Val, Value *Size, unsigned Align, uint32_t ElementSize, + Value *Ptr, Value *Val, Value *Size, Align Alignment, uint32_t ElementSize, MDNode *TBAATag, MDNode *ScopeTag, MDNode *NoAliasTag) { - assert(Align >= ElementSize && - "Pointer alignment must be at least element size."); Ptr = getCastedInt8PtrValue(Ptr); Value *Ops[] = {Ptr, Val, Size, getInt32(ElementSize)}; @@ -139,7 +137,7 @@ CallInst *CI = createCallHelper(TheFn, Ops, this); - cast(CI)->setDestAlignment(Align); + cast(CI)->setDestAlignment(Alignment); // Set the TBAA info if present. if (TBAATag)