Skip to content

Commit

Permalink
[NFC][Alignment] Use Align in SafeStack
Browse files Browse the repository at this point in the history
  • Loading branch information
gchatelet committed Jun 14, 2022
1 parent 6725d80 commit c0e85f1
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 8 deletions.
13 changes: 6 additions & 7 deletions llvm/lib/CodeGen/SafeStack.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -201,7 +201,7 @@ class SafeStack {
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());
Expand Down Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/SafeStackLayout.h
Expand Up @@ -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.
Expand Down

0 comments on commit c0e85f1

Please sign in to comment.