From c0e85f1c3bb4cf683aff42eb179ad5643d9a434d Mon Sep 17 00:00:00 2001 From: Guillaume Chatelet Date: Tue, 14 Jun 2022 09:50:54 +0000 Subject: [PATCH] [NFC][Alignment] Use Align in SafeStack --- llvm/lib/CodeGen/SafeStack.cpp | 13 ++++++------- llvm/lib/CodeGen/SafeStackLayout.h | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/llvm/lib/CodeGen/SafeStack.cpp b/llvm/lib/CodeGen/SafeStack.cpp index 2c16c191..e7116ec 100644 --- a/llvm/lib/CodeGen/SafeStack.cpp +++ b/llvm/lib/CodeGen/SafeStack.cpp @@ -127,7 +127,7 @@ class SafeStack { /// /// 16 seems like a reasonable upper bound on the alignment of objects that we /// might expect to appear on the stack on most common targets. - static constexpr uint64_t StackAlignment = 16; + static constexpr Align StackAlignment = Align::Constant<16>(); /// Return the value of the stack canary. Value *getStackGuard(IRBuilder<> &IRB, Function &F); @@ -201,7 +201,7 @@ public: bool run(); }; -constexpr uint64_t SafeStack::StackAlignment; +constexpr Align SafeStack::StackAlignment; uint64_t SafeStack::getStaticAllocaAllocationSize(const AllocaInst* AI) { uint64_t Size = DL.getTypeAllocSize(AI->getAllocatedType()); @@ -673,13 +673,12 @@ void SafeStack::moveDynamicAllocasToUnsafeStack( SP = IRB.CreateSub(SP, Size); // Align the SP value to satisfy the AllocaInst, type and stack alignments. - uint64_t Align = - std::max(std::max(DL.getPrefTypeAlignment(Ty), AI->getAlignment()), - StackAlignment); + auto Align = std::max(std::max(DL.getPrefTypeAlign(Ty), AI->getAlign()), + StackAlignment); - assert(isPowerOf2_32(Align)); Value *NewTop = IRB.CreateIntToPtr( - IRB.CreateAnd(SP, ConstantInt::get(IntPtrTy, ~uint64_t(Align - 1))), + IRB.CreateAnd(SP, + ConstantInt::get(IntPtrTy, ~uint64_t(Align.value() - 1))), StackPtrTy); // Save the stack pointer. diff --git a/llvm/lib/CodeGen/SafeStackLayout.h b/llvm/lib/CodeGen/SafeStackLayout.h index 4ac7af2..6126c7a 100644 --- a/llvm/lib/CodeGen/SafeStackLayout.h +++ b/llvm/lib/CodeGen/SafeStackLayout.h @@ -52,7 +52,7 @@ class StackLayout { void layoutObject(StackObject &Obj); public: - StackLayout(uint64_t StackAlignment) : MaxAlignment(StackAlignment) {} + StackLayout(Align StackAlignment) : MaxAlignment(StackAlignment) {} /// Add an object to the stack frame. Value pointer is opaque and used as a /// handle to retrieve the object's offset in the frame later. -- 2.7.4