forked from OSchip/llvm-project
[Alignment][NFC] Remove AllocaInst::setAlignment(unsigned)
Summary: This is patch is part of a series to introduce an Alignment type. See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html See this patch for the introduction of the type: https://reviews.llvm.org/D64790 Reviewers: courbet Subscribers: jholewinski, arsenm, jvesely, nhaehnle, eraman, hiraditya, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D68141 llvm-svn: 373207
This commit is contained in:
parent
9b034293fa
commit
ab11b9188d
|
@ -2366,7 +2366,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
|||
.toCharUnitsFromBits(TI.getSuitableAlign())
|
||||
.getQuantity();
|
||||
AllocaInst *AI = Builder.CreateAlloca(Builder.getInt8Ty(), Size);
|
||||
AI->setAlignment(SuitableAlignmentInBytes);
|
||||
AI->setAlignment(MaybeAlign(SuitableAlignmentInBytes));
|
||||
initializeAlloca(*this, AI, Size, SuitableAlignmentInBytes);
|
||||
return RValue::get(AI);
|
||||
}
|
||||
|
@ -2379,7 +2379,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
|||
unsigned AlignmentInBytes =
|
||||
CGM.getContext().toCharUnitsFromBits(AlignmentInBits).getQuantity();
|
||||
AllocaInst *AI = Builder.CreateAlloca(Builder.getInt8Ty(), Size);
|
||||
AI->setAlignment(AlignmentInBytes);
|
||||
AI->setAlignment(MaybeAlign(AlignmentInBytes));
|
||||
initializeAlloca(*this, AI, Size, AlignmentInBytes);
|
||||
return RValue::get(AI);
|
||||
}
|
||||
|
|
|
@ -3841,7 +3841,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
|
|||
AI = CreateTempAlloca(ArgStruct, "argmem");
|
||||
}
|
||||
auto Align = CallInfo.getArgStructAlignment();
|
||||
AI->setAlignment(Align.getQuantity());
|
||||
AI->setAlignment(llvm::MaybeAlign(Align.getQuantity()));
|
||||
AI->setUsedWithInAlloca(true);
|
||||
assert(AI->isUsedWithInAlloca() && !AI->isStaticAlloca());
|
||||
ArgMemory = Address(AI, Align);
|
||||
|
|
|
@ -66,7 +66,7 @@ Address CodeGenFunction::CreateTempAllocaWithoutCast(llvm::Type *Ty,
|
|||
const Twine &Name,
|
||||
llvm::Value *ArraySize) {
|
||||
auto Alloca = CreateTempAlloca(Ty, Name, ArraySize);
|
||||
Alloca->setAlignment(Align.getQuantity());
|
||||
Alloca->setAlignment(llvm::MaybeAlign(Align.getQuantity()));
|
||||
return Address(Alloca, Align);
|
||||
}
|
||||
|
||||
|
|
|
@ -9954,7 +9954,7 @@ llvm::Function *AMDGPUTargetCodeGenInfo::createEnqueuedBlockKernel(
|
|||
Builder.SetInsertPoint(BB);
|
||||
unsigned BlockAlign = CGF.CGM.getDataLayout().getPrefTypeAlignment(BlockTy);
|
||||
auto *BlockPtr = Builder.CreateAlloca(BlockTy, nullptr);
|
||||
BlockPtr->setAlignment(BlockAlign);
|
||||
BlockPtr->setAlignment(llvm::MaybeAlign(BlockAlign));
|
||||
Builder.CreateAlignedStore(F->arg_begin(), BlockPtr, BlockAlign);
|
||||
auto *Cast = Builder.CreatePointerCast(BlockPtr, InvokeFT->getParamType(0));
|
||||
llvm::SmallVector<llvm::Value *, 2> Args;
|
||||
|
|
|
@ -114,8 +114,6 @@ public:
|
|||
return MA->value();
|
||||
return 0;
|
||||
}
|
||||
// FIXME: Remove once migration to Align is over.
|
||||
void setAlignment(unsigned Align);
|
||||
void setAlignment(MaybeAlign Align);
|
||||
|
||||
/// Return true if this alloca is in the entry block of the function and is a
|
||||
|
|
|
@ -1711,7 +1711,7 @@ bool AtomicExpand::expandAtomicOpToLibcall(
|
|||
// 'expected' argument, if present.
|
||||
if (CASExpected) {
|
||||
AllocaCASExpected = AllocaBuilder.CreateAlloca(CASExpected->getType());
|
||||
AllocaCASExpected->setAlignment(AllocaAlignment);
|
||||
AllocaCASExpected->setAlignment(MaybeAlign(AllocaAlignment));
|
||||
unsigned AllocaAS = AllocaCASExpected->getType()->getPointerAddressSpace();
|
||||
|
||||
AllocaCASExpected_i8 =
|
||||
|
@ -1730,7 +1730,7 @@ bool AtomicExpand::expandAtomicOpToLibcall(
|
|||
Args.push_back(IntValue);
|
||||
} else {
|
||||
AllocaValue = AllocaBuilder.CreateAlloca(ValueOperand->getType());
|
||||
AllocaValue->setAlignment(AllocaAlignment);
|
||||
AllocaValue->setAlignment(MaybeAlign(AllocaAlignment));
|
||||
AllocaValue_i8 =
|
||||
Builder.CreateBitCast(AllocaValue, Type::getInt8PtrTy(Ctx));
|
||||
Builder.CreateLifetimeStart(AllocaValue_i8, SizeVal64);
|
||||
|
@ -1742,7 +1742,7 @@ bool AtomicExpand::expandAtomicOpToLibcall(
|
|||
// 'ret' argument.
|
||||
if (!CASExpected && HasResult && !UseSizedLibcall) {
|
||||
AllocaResult = AllocaBuilder.CreateAlloca(I->getType());
|
||||
AllocaResult->setAlignment(AllocaAlignment);
|
||||
AllocaResult->setAlignment(MaybeAlign(AllocaAlignment));
|
||||
unsigned AllocaAS = AllocaResult->getType()->getPointerAddressSpace();
|
||||
AllocaResult_i8 =
|
||||
Builder.CreateBitCast(AllocaResult, Type::getInt8PtrTy(Ctx, AllocaAS));
|
||||
|
|
|
@ -1812,7 +1812,7 @@ bool CodeGenPrepare::optimizeCallInst(CallInst *CI, bool &ModifiedDT) {
|
|||
AllocaInst *AI;
|
||||
if ((AI = dyn_cast<AllocaInst>(Val)) && AI->getAlignment() < PrefAlign &&
|
||||
DL->getTypeAllocSize(AI->getAllocatedType()) >= MinSize + Offset2)
|
||||
AI->setAlignment(PrefAlign);
|
||||
AI->setAlignment(MaybeAlign(PrefAlign));
|
||||
// Global variables can only be aligned if they are defined in this
|
||||
// object (i.e. they are uniquely initialized in this object), and
|
||||
// over-aligning global variables that have an explicit section is
|
||||
|
|
|
@ -2010,7 +2010,7 @@ void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes) {
|
|||
if (GlobalObject *GV = dyn_cast<GlobalObject>(P))
|
||||
GV->setAlignment(Bytes);
|
||||
else if (AllocaInst *AI = dyn_cast<AllocaInst>(P))
|
||||
AI->setAlignment(Bytes);
|
||||
AI->setAlignment(MaybeAlign(Bytes));
|
||||
else if (LoadInst *LI = dyn_cast<LoadInst>(P))
|
||||
LI->setAlignment(MaybeAlign(Bytes));
|
||||
else if (StoreInst *SI = dyn_cast<StoreInst>(P))
|
||||
|
|
|
@ -1228,7 +1228,7 @@ AllocaInst::AllocaInst(Type *Ty, unsigned AddrSpace, Value *ArraySize,
|
|||
: UnaryInstruction(PointerType::get(Ty, AddrSpace), Alloca,
|
||||
getAISize(Ty->getContext(), ArraySize), InsertBefore),
|
||||
AllocatedType(Ty) {
|
||||
setAlignment(Align);
|
||||
setAlignment(MaybeAlign(Align));
|
||||
assert(!Ty->isVoidTy() && "Cannot allocate void!");
|
||||
setName(Name);
|
||||
}
|
||||
|
@ -1239,15 +1239,11 @@ AllocaInst::AllocaInst(Type *Ty, unsigned AddrSpace, Value *ArraySize,
|
|||
: UnaryInstruction(PointerType::get(Ty, AddrSpace), Alloca,
|
||||
getAISize(Ty->getContext(), ArraySize), InsertAtEnd),
|
||||
AllocatedType(Ty) {
|
||||
setAlignment(Align);
|
||||
setAlignment(MaybeAlign(Align));
|
||||
assert(!Ty->isVoidTy() && "Cannot allocate void!");
|
||||
setName(Name);
|
||||
}
|
||||
|
||||
void AllocaInst::setAlignment(unsigned Align) {
|
||||
setAlignment(llvm::MaybeAlign(Align));
|
||||
}
|
||||
|
||||
void AllocaInst::setAlignment(MaybeAlign Align) {
|
||||
assert((!Align || *Align <= MaximumAlignment) &&
|
||||
"Alignment is greater than MaximumAlignment!");
|
||||
|
|
|
@ -62,7 +62,7 @@ static cl::opt<bool> ClMergeInit(
|
|||
static cl::opt<unsigned> ClScanLimit("stack-tagging-merge-init-scan-limit",
|
||||
cl::init(40), cl::Hidden);
|
||||
|
||||
static constexpr unsigned kTagGranuleSize = 16;
|
||||
static const Align kTagGranuleSize = Align(16);
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -458,7 +458,8 @@ Instruction *AArch64StackTagging::insertBaseTaggedPointer(
|
|||
}
|
||||
|
||||
void AArch64StackTagging::alignAndPadAlloca(AllocaInfo &Info) {
|
||||
unsigned NewAlignment = std::max(Info.AI->getAlignment(), kTagGranuleSize);
|
||||
const Align NewAlignment =
|
||||
max(MaybeAlign(Info.AI->getAlignment()), kTagGranuleSize);
|
||||
Info.AI->setAlignment(NewAlignment);
|
||||
|
||||
uint64_t Size = Info.AI->getAllocationSizeInBits(*DL).getValue() / 8;
|
||||
|
@ -479,7 +480,7 @@ void AArch64StackTagging::alignAndPadAlloca(AllocaInfo &Info) {
|
|||
auto *NewAI = new AllocaInst(
|
||||
TypeWithPadding, Info.AI->getType()->getAddressSpace(), nullptr, "", Info.AI);
|
||||
NewAI->takeName(Info.AI);
|
||||
NewAI->setAlignment(Info.AI->getAlignment());
|
||||
NewAI->setAlignment(MaybeAlign(Info.AI->getAlignment()));
|
||||
NewAI->setUsedWithInAlloca(Info.AI->isUsedWithInAlloca());
|
||||
NewAI->setSwiftError(Info.AI->isSwiftError());
|
||||
NewAI->copyMetadata(*Info.AI);
|
||||
|
|
|
@ -1430,8 +1430,8 @@ AllocaInst* AMDGPULibCalls::insertAlloca(CallInst *UI, IRBuilder<> &B,
|
|||
B.SetInsertPoint(&*ItNew);
|
||||
AllocaInst *Alloc = B.CreateAlloca(RetType, 0,
|
||||
std::string(prefix) + UI->getName());
|
||||
Alloc->setAlignment(UCallee->getParent()->getDataLayout()
|
||||
.getTypeAllocSize(RetType));
|
||||
Alloc->setAlignment(MaybeAlign(
|
||||
UCallee->getParent()->getDataLayout().getTypeAllocSize(RetType)));
|
||||
return Alloc;
|
||||
}
|
||||
|
||||
|
|
|
@ -164,7 +164,7 @@ void NVPTXLowerArgs::handleByValParam(Argument *Arg) {
|
|||
// Set the alignment to alignment of the byval parameter. This is because,
|
||||
// later load/stores assume that alignment, and we are going to replace
|
||||
// the use of the byval parameter with this alloca instruction.
|
||||
AllocA->setAlignment(Func->getParamAlignment(Arg->getArgNo()));
|
||||
AllocA->setAlignment(MaybeAlign(Func->getParamAlignment(Arg->getArgNo())));
|
||||
Arg->replaceAllUsesWith(AllocA);
|
||||
|
||||
Value *ArgInParam = new AddrSpaceCastInst(
|
||||
|
|
|
@ -1106,7 +1106,7 @@ static void lowerLocalAllocas(ArrayRef<CoroAllocaAllocInst*> LocalAllocas,
|
|||
|
||||
// Allocate memory.
|
||||
auto Alloca = Builder.CreateAlloca(Builder.getInt8Ty(), AI->getSize());
|
||||
Alloca->setAlignment(AI->getAlignment());
|
||||
Alloca->setAlignment(MaybeAlign(AI->getAlignment()));
|
||||
|
||||
for (auto U : AI->users()) {
|
||||
// Replace gets with the allocation.
|
||||
|
|
|
@ -239,7 +239,7 @@ static void mergeInlinedArrayAllocas(
|
|||
}
|
||||
|
||||
if (Align1 > Align2)
|
||||
AvailableAlloca->setAlignment(AI->getAlignment());
|
||||
AvailableAlloca->setAlignment(MaybeAlign(AI->getAlignment()));
|
||||
}
|
||||
|
||||
AI->eraseFromParent();
|
||||
|
|
|
@ -140,7 +140,7 @@ Instruction *InstCombiner::PromoteCastOfAllocation(BitCastInst &CI,
|
|||
}
|
||||
|
||||
AllocaInst *New = AllocaBuilder.CreateAlloca(CastElTy, Amt);
|
||||
New->setAlignment(AI.getAlignment());
|
||||
New->setAlignment(MaybeAlign(AI.getAlignment()));
|
||||
New->takeName(&AI);
|
||||
New->setUsedWithInAlloca(AI.isUsedWithInAlloca());
|
||||
|
||||
|
|
|
@ -197,7 +197,7 @@ static Instruction *simplifyAllocaArraySize(InstCombiner &IC, AllocaInst &AI) {
|
|||
if (C->getValue().getActiveBits() <= 64) {
|
||||
Type *NewTy = ArrayType::get(AI.getAllocatedType(), C->getZExtValue());
|
||||
AllocaInst *New = IC.Builder.CreateAlloca(NewTy, nullptr, AI.getName());
|
||||
New->setAlignment(AI.getAlignment());
|
||||
New->setAlignment(MaybeAlign(AI.getAlignment()));
|
||||
|
||||
// Scan to the end of the allocation instructions, to skip over a block of
|
||||
// allocas if possible...also skip interleaved debug info
|
||||
|
@ -345,7 +345,8 @@ Instruction *InstCombiner::visitAllocaInst(AllocaInst &AI) {
|
|||
if (AI.getAllocatedType()->isSized()) {
|
||||
// If the alignment is 0 (unspecified), assign it the preferred alignment.
|
||||
if (AI.getAlignment() == 0)
|
||||
AI.setAlignment(DL.getPrefTypeAlignment(AI.getAllocatedType()));
|
||||
AI.setAlignment(
|
||||
MaybeAlign(DL.getPrefTypeAlignment(AI.getAllocatedType())));
|
||||
|
||||
// Move all alloca's of zero byte objects to the entry block and merge them
|
||||
// together. Note that we only do this for alloca's, because malloc should
|
||||
|
@ -377,12 +378,12 @@ Instruction *InstCombiner::visitAllocaInst(AllocaInst &AI) {
|
|||
// assign it the preferred alignment.
|
||||
if (EntryAI->getAlignment() == 0)
|
||||
EntryAI->setAlignment(
|
||||
DL.getPrefTypeAlignment(EntryAI->getAllocatedType()));
|
||||
MaybeAlign(DL.getPrefTypeAlignment(EntryAI->getAllocatedType())));
|
||||
// Replace this zero-sized alloca with the one at the start of the entry
|
||||
// block after ensuring that the address will be aligned enough for both
|
||||
// types.
|
||||
unsigned MaxAlign = std::max(EntryAI->getAlignment(),
|
||||
AI.getAlignment());
|
||||
const MaybeAlign MaxAlign(
|
||||
std::max(EntryAI->getAlignment(), AI.getAlignment()));
|
||||
EntryAI->setAlignment(MaxAlign);
|
||||
if (AI.getType() != EntryAI->getType())
|
||||
return new BitCastInst(EntryAI, AI.getType());
|
||||
|
|
|
@ -2899,18 +2899,19 @@ void FunctionStackPoisoner::copyArgsPassedByValToAllocas() {
|
|||
for (Argument &Arg : F.args()) {
|
||||
if (Arg.hasByValAttr()) {
|
||||
Type *Ty = Arg.getType()->getPointerElementType();
|
||||
unsigned Align = Arg.getParamAlignment();
|
||||
if (Align == 0) Align = DL.getABITypeAlignment(Ty);
|
||||
unsigned Alignment = Arg.getParamAlignment();
|
||||
if (Alignment == 0)
|
||||
Alignment = DL.getABITypeAlignment(Ty);
|
||||
|
||||
AllocaInst *AI = IRB.CreateAlloca(
|
||||
Ty, nullptr,
|
||||
(Arg.hasName() ? Arg.getName() : "Arg" + Twine(Arg.getArgNo())) +
|
||||
".byval");
|
||||
AI->setAlignment(Align);
|
||||
AI->setAlignment(Align(Alignment));
|
||||
Arg.replaceAllUsesWith(AI);
|
||||
|
||||
uint64_t AllocSize = DL.getTypeAllocSize(Ty);
|
||||
IRB.CreateMemCpy(AI, Align, &Arg, Align, AllocSize);
|
||||
IRB.CreateMemCpy(AI, Alignment, &Arg, Alignment, AllocSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2941,7 +2942,7 @@ Value *FunctionStackPoisoner::createAllocaForLayout(
|
|||
}
|
||||
assert((ClRealignStack & (ClRealignStack - 1)) == 0);
|
||||
size_t FrameAlignment = std::max(L.FrameAlignment, (size_t)ClRealignStack);
|
||||
Alloca->setAlignment(FrameAlignment);
|
||||
Alloca->setAlignment(MaybeAlign(FrameAlignment));
|
||||
return IRB.CreatePointerCast(Alloca, IntptrTy);
|
||||
}
|
||||
|
||||
|
@ -2950,7 +2951,7 @@ void FunctionStackPoisoner::createDynamicAllocasInitStorage() {
|
|||
IRBuilder<> IRB(dyn_cast<Instruction>(FirstBB.begin()));
|
||||
DynamicAllocaLayout = IRB.CreateAlloca(IntptrTy, nullptr);
|
||||
IRB.CreateStore(Constant::getNullValue(IntptrTy), DynamicAllocaLayout);
|
||||
DynamicAllocaLayout->setAlignment(32);
|
||||
DynamicAllocaLayout->setAlignment(Align(32));
|
||||
}
|
||||
|
||||
void FunctionStackPoisoner::processDynamicAllocas() {
|
||||
|
@ -3297,7 +3298,7 @@ void FunctionStackPoisoner::handleDynamicAllocaCall(AllocaInst *AI) {
|
|||
|
||||
// Insert new alloca with new NewSize and Align params.
|
||||
AllocaInst *NewAlloca = IRB.CreateAlloca(IRB.getInt8Ty(), NewSize);
|
||||
NewAlloca->setAlignment(Align);
|
||||
NewAlloca->setAlignment(MaybeAlign(Align));
|
||||
|
||||
// NewAddress = Address + Align
|
||||
Value *NewAddress = IRB.CreateAdd(IRB.CreatePtrToInt(NewAlloca, IntptrTy),
|
||||
|
|
|
@ -1184,7 +1184,7 @@ bool HWAddressSanitizer::sanitizeFunction(Function &F) {
|
|||
uint64_t Size = getAllocaSizeInBytes(*AI);
|
||||
uint64_t AlignedSize = alignTo(Size, Mapping.getObjectAlignment());
|
||||
AI->setAlignment(
|
||||
std::max(AI->getAlignment(), Mapping.getObjectAlignment()));
|
||||
MaybeAlign(std::max(AI->getAlignment(), Mapping.getObjectAlignment())));
|
||||
if (Size != AlignedSize) {
|
||||
Type *AllocatedType = AI->getAllocatedType();
|
||||
if (AI->isArrayAllocation()) {
|
||||
|
@ -1197,7 +1197,7 @@ bool HWAddressSanitizer::sanitizeFunction(Function &F) {
|
|||
auto *NewAI = new AllocaInst(
|
||||
TypeWithPadding, AI->getType()->getAddressSpace(), nullptr, "", AI);
|
||||
NewAI->takeName(AI);
|
||||
NewAI->setAlignment(AI->getAlignment());
|
||||
NewAI->setAlignment(MaybeAlign(AI->getAlignment()));
|
||||
NewAI->setUsedWithInAlloca(AI->isUsedWithInAlloca());
|
||||
NewAI->setSwiftError(AI->isSwiftError());
|
||||
NewAI->copyMetadata(*AI);
|
||||
|
|
|
@ -899,8 +899,8 @@ private:
|
|||
++NumStoresRemoved;
|
||||
} else if (auto *ReplacementAlloca = dyn_cast<AllocaInst>(Repl)) {
|
||||
ReplacementAlloca->setAlignment(
|
||||
std::max(ReplacementAlloca->getAlignment(),
|
||||
cast<AllocaInst>(I)->getAlignment()));
|
||||
MaybeAlign(std::max(ReplacementAlloca->getAlignment(),
|
||||
cast<AllocaInst>(I)->getAlignment())));
|
||||
} else if (isa<CallInst>(Repl)) {
|
||||
++NumCallsRemoved;
|
||||
}
|
||||
|
|
|
@ -895,7 +895,7 @@ bool MemCpyOptPass::performCallSlotOptzn(Instruction *cpy, Value *cpyDest,
|
|||
// If the destination wasn't sufficiently aligned then increase its alignment.
|
||||
if (!isDestSufficientlyAligned) {
|
||||
assert(isa<AllocaInst>(cpyDest) && "Can only increase alloca alignment!");
|
||||
cast<AllocaInst>(cpyDest)->setAlignment(srcAlign);
|
||||
cast<AllocaInst>(cpyDest)->setAlignment(MaybeAlign(srcAlign));
|
||||
}
|
||||
|
||||
// Drop any cached information about the call, because we may have changed
|
||||
|
|
|
@ -1154,7 +1154,7 @@ static unsigned enforceKnownAlignment(Value *V, unsigned Alignment,
|
|||
// then don't round up. This avoids dynamic stack realignment.
|
||||
if (DL.exceedsNaturalStackAlignment(Align(PrefAlign)))
|
||||
return Alignment;
|
||||
AI->setAlignment(PrefAlign);
|
||||
AI->setAlignment(MaybeAlign(PrefAlign));
|
||||
return PrefAlign;
|
||||
}
|
||||
|
||||
|
|
|
@ -1497,7 +1497,8 @@ void IslNodeBuilder::allocateNewArrays(BBPair StartExitBlocks) {
|
|||
|
||||
auto *CreatedArray = new AllocaInst(NewArrayType, DL.getAllocaAddrSpace(),
|
||||
SAI->getName(), &*InstIt);
|
||||
CreatedArray->setAlignment(PollyTargetFirstLevelCacheLineSize);
|
||||
CreatedArray->setAlignment(
|
||||
MaybeAlign(PollyTargetFirstLevelCacheLineSize));
|
||||
SAI->setBasePtr(CreatedArray);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue