diff options
author | Reid Kleckner <rnk@google.com> | 2016-04-11 17:54:03 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2016-04-11 17:54:03 +0000 |
commit | b6800b30525c9f96f8d0a431b848d74fad100c4b (patch) | |
tree | 5a6231f7c14e21cbbf6c02d93fed2f2d9b627d0c /llvm/lib/CodeGen/MachineFunction.cpp | |
parent | b91bcd704a72081e4af799fccee351724f15a79a (diff) | |
download | bcm5719-llvm-b6800b30525c9f96f8d0a431b848d74fad100c4b.tar.gz bcm5719-llvm-b6800b30525c9f96f8d0a431b848d74fad100c4b.zip |
Combine redundant stack realignment booleans in MachineFrameInfo
MachineFrameInfo does not need to be able to distinguish between the
user asking us not to realign the stack and the target telling us it
doesn't support stack realignment. Either way, fixed stack objects have
their alignment clamped.
llvm-svn: 265971
Diffstat (limited to 'llvm/lib/CodeGen/MachineFunction.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineFunction.cpp | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp index 5a2b3b4c859..8c987ba216a 100644 --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -103,12 +103,14 @@ MachineFunction::MachineFunction(const Function *F, const TargetMachine &TM, RegInfo = nullptr; MFInfo = nullptr; - FrameInfo = new (Allocator) - MachineFrameInfo(getFnStackAlignment(STI, Fn), - STI->getFrameLowering()->isStackRealignable(), - !F->hasFnAttribute("no-realign-stack"), - !F->hasFnAttribute("no-realign-stack") && - F->hasFnAttribute(Attribute::StackAlignment)); + // We can realign the stack if the target supports it and the user hasn't + // explicitly asked us not to. + bool CanRealignSP = STI->getFrameLowering()->isStackRealignable() && + !F->hasFnAttribute("no-realign-stack"); + FrameInfo = new (Allocator) MachineFrameInfo( + getFnStackAlignment(STI, Fn), /*StackRealignable=*/CanRealignSP, + /*ForceRealign=*/CanRealignSP && + F->hasFnAttribute(Attribute::StackAlignment)); if (Fn->hasFnAttribute(Attribute::StackAlignment)) FrameInfo->ensureMaxAlignment(Fn->getFnStackAlignment()); @@ -555,7 +557,7 @@ MCSymbol *MachineFunction::getPICBaseSymbol() const { /// Make sure the function is at least Align bytes aligned. void MachineFrameInfo::ensureMaxAlignment(unsigned Align) { - if (!StackRealignable || !RealignOption) + if (!StackRealignable) assert(Align <= StackAlignment && "For targets without stack realignment, Align is out of limit!"); if (MaxAlignment < Align) MaxAlignment = Align; @@ -577,8 +579,7 @@ static inline unsigned clampStackAlignment(bool ShouldClamp, unsigned Align, int MachineFrameInfo::CreateStackObject(uint64_t Size, unsigned Alignment, bool isSS, const AllocaInst *Alloca) { assert(Size != 0 && "Cannot allocate zero size stack objects!"); - Alignment = clampStackAlignment(!StackRealignable || !RealignOption, - Alignment, StackAlignment); + Alignment = clampStackAlignment(!StackRealignable, Alignment, StackAlignment); Objects.push_back(StackObject(Size, Alignment, 0, false, isSS, Alloca, !isSS)); int Index = (int)Objects.size() - NumFixedObjects - 1; @@ -591,8 +592,7 @@ int MachineFrameInfo::CreateStackObject(uint64_t Size, unsigned Alignment, /// returning a nonnegative identifier to represent it. int MachineFrameInfo::CreateSpillStackObject(uint64_t Size, unsigned Alignment) { - Alignment = clampStackAlignment(!StackRealignable || !RealignOption, - Alignment, StackAlignment); + Alignment = clampStackAlignment(!StackRealignable, Alignment, StackAlignment); CreateStackObject(Size, Alignment, true); int Index = (int)Objects.size() - NumFixedObjects - 1; ensureMaxAlignment(Alignment); @@ -605,8 +605,7 @@ int MachineFrameInfo::CreateSpillStackObject(uint64_t Size, int MachineFrameInfo::CreateVariableSizedObject(unsigned Alignment, const AllocaInst *Alloca) { HasVarSizedObjects = true; - Alignment = clampStackAlignment(!StackRealignable || !RealignOption, - Alignment, StackAlignment); + Alignment = clampStackAlignment(!StackRealignable, Alignment, StackAlignment); Objects.push_back(StackObject(0, Alignment, 0, false, false, Alloca, true)); ensureMaxAlignment(Alignment); return (int)Objects.size()-NumFixedObjects-1; @@ -626,8 +625,7 @@ int MachineFrameInfo::CreateFixedObject(uint64_t Size, int64_t SPOffset, // stack needs realignment, we can't assume that the stack will in fact be // aligned. unsigned Align = MinAlign(SPOffset, ForcedRealign ? 1 : StackAlignment); - Align = clampStackAlignment(!StackRealignable || !RealignOption, Align, - StackAlignment); + Align = clampStackAlignment(!StackRealignable, Align, StackAlignment); Objects.insert(Objects.begin(), StackObject(Size, Align, SPOffset, Immutable, /*isSS*/ false, /*Alloca*/ nullptr, isAliased)); @@ -639,8 +637,7 @@ int MachineFrameInfo::CreateFixedObject(uint64_t Size, int64_t SPOffset, int MachineFrameInfo::CreateFixedSpillStackObject(uint64_t Size, int64_t SPOffset) { unsigned Align = MinAlign(SPOffset, ForcedRealign ? 1 : StackAlignment); - Align = clampStackAlignment(!StackRealignable || !RealignOption, Align, - StackAlignment); + Align = clampStackAlignment(!StackRealignable, Align, StackAlignment); Objects.insert(Objects.begin(), StackObject(Size, Align, SPOffset, /*Immutable*/ true, /*isSS*/ true, |