diff options
author | Ron Lieberman <ron.lieberman@amd.com> | 2022-12-15 10:54:41 -0600 |
---|---|---|
committer | Ron Lieberman <ron.lieberman@amd.com> | 2022-12-15 10:55:18 -0600 |
commit | 38f1abef860418f85b1011601d20e9d49aa85adb (patch) | |
tree | 18173a3a41b415aa5c411750151a908d34cbe9ae /llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | |
parent | ccb8a4e3f36937a71a526ca4a3fa29895253ee9d (diff) | |
download | llvm-38f1abef860418f85b1011601d20e9d49aa85adb.zip llvm-38f1abef860418f85b1011601d20e9d49aa85adb.tar.gz llvm-38f1abef860418f85b1011601d20e9d49aa85adb.tar.bz2 |
Revert "[SelectionDAG] Do not second-guess alignment for alloca"
Breaks amdgpu buildbot https://lab.llvm.org/buildbot/#/builders/193
23491
This reverts commit ffedf47d8b793e07317f82f9c2a5f5425ebb71ad.
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp index 3a1a237..3e59d0d 100644 --- a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp @@ -128,7 +128,20 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf, for (const Instruction &I : BB) { if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) { Type *Ty = AI->getAllocatedType(); - Align Alignment = AI->getAlign(); + Align TyPrefAlign = MF->getDataLayout().getPrefTypeAlign(Ty); + // The "specified" alignment is the alignment written on the alloca, + // or the preferred alignment of the type if none is specified. + // + // (Unspecified alignment on allocas will be going away soon.) + Align SpecifiedAlign = AI->getAlign(); + + // If the preferred alignment of the type is higher than the specified + // alignment of the alloca, promote the alignment, as long as it doesn't + // require realigning the stack. + // + // FIXME: Do we really want to second-guess the IR in isel? + Align Alignment = + std::max(std::min(TyPrefAlign, StackAlign), SpecifiedAlign); // Static allocas can be folded into the initial stack frame // adjustment. For targets that don't realign the stack, don't |