summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorGuillaume Chatelet <gchatelet@google.com>2019-08-21 14:29:30 +0000
committerGuillaume Chatelet <gchatelet@google.com>2019-08-21 14:29:30 +0000
commit1c18a9cb9eef141ccd3482e351811a98a7f61844 (patch)
tree692a654646ac6ce5204af5004b6e6e82f80d6cd7 /llvm/lib
parent717717b1ff8b6ee48331a86feaf2f68b28b6c9d8 (diff)
downloadbcm5719-llvm-1c18a9cb9eef141ccd3482e351811a98a7f61844.tar.gz
bcm5719-llvm-1c18a9cb9eef141ccd3482e351811a98a7f61844.zip
[LLVM][Alignment] Introduce Alignment In MachineFrameInfo
Summary: This is patch is part of a serie 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: jfb Subscribers: hiraditya, dexonsmith, llvm-commits, courbet Tags: #llvm Differential Revision: https://reviews.llvm.org/D65800 llvm-svn: 369531
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Analysis/MemoryBuiltins.cpp2
-rw-r--r--llvm/lib/CodeGen/LocalStackSlotAllocation.cpp2
-rw-r--r--llvm/lib/CodeGen/MachineFrameInfo.cpp25
-rw-r--r--llvm/lib/CodeGen/PrologEpilogInserter.cpp2
-rw-r--r--llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp6
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp2
6 files changed, 21 insertions, 18 deletions
diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp
index 729dad46365..c7d2ef9e09b 100644
--- a/llvm/lib/Analysis/MemoryBuiltins.cpp
+++ b/llvm/lib/Analysis/MemoryBuiltins.cpp
@@ -523,7 +523,7 @@ STATISTIC(ObjectVisitorLoad,
APInt ObjectSizeOffsetVisitor::align(APInt Size, uint64_t Align) {
if (Options.RoundToAlign && Align)
- return APInt(IntTyBits, alignTo(Size.getZExtValue(), Align));
+ return APInt(IntTyBits, alignTo(Size.getZExtValue(), llvm::Align(Align)));
return Size;
}
diff --git a/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp b/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp
index 69ceacd0c18..2392d4d00b5 100644
--- a/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp
+++ b/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp
@@ -261,7 +261,7 @@ void LocalStackSlotPass::calculateFrameObjectOffsets(MachineFunction &Fn) {
// Remember how big this blob of stack space is
MFI.setLocalFrameSize(Offset);
- MFI.setLocalFrameMaxAlign(MaxAlign);
+ MFI.setLocalFrameMaxAlign(assumeAligned(MaxAlign));
}
static inline bool
diff --git a/llvm/lib/CodeGen/MachineFrameInfo.cpp b/llvm/lib/CodeGen/MachineFrameInfo.cpp
index bae3a4333bd..e045e4ed414 100644
--- a/llvm/lib/CodeGen/MachineFrameInfo.cpp
+++ b/llvm/lib/CodeGen/MachineFrameInfo.cpp
@@ -28,7 +28,7 @@
using namespace llvm;
-void MachineFrameInfo::ensureMaxAlignment(unsigned Align) {
+void MachineFrameInfo::ensureMaxAlignment(llvm::Align Align) {
if (!StackRealignable)
assert(Align <= StackAlignment &&
"For targets without stack realignment, Align is out of limit!");
@@ -36,17 +36,18 @@ void MachineFrameInfo::ensureMaxAlignment(unsigned Align) {
}
/// Clamp the alignment if requested and emit a warning.
-static inline unsigned clampStackAlignment(bool ShouldClamp, unsigned Align,
- unsigned StackAlign) {
+static inline llvm::Align clampStackAlignment(bool ShouldClamp,
+ llvm::Align Align,
+ llvm::Align StackAlign) {
if (!ShouldClamp || Align <= StackAlign)
return Align;
- LLVM_DEBUG(dbgs() << "Warning: requested alignment " << Align
- << " exceeds the stack alignment " << StackAlign
+ LLVM_DEBUG(dbgs() << "Warning: requested alignment " << Align.value()
+ << " exceeds the stack alignment " << StackAlign.value()
<< " when stack realignment is off" << '\n');
return StackAlign;
}
-int MachineFrameInfo::CreateStackObject(uint64_t Size, unsigned Alignment,
+int MachineFrameInfo::CreateStackObject(uint64_t Size, llvm::Align Alignment,
bool IsSpillSlot,
const AllocaInst *Alloca,
uint8_t StackID) {
@@ -62,7 +63,7 @@ int MachineFrameInfo::CreateStackObject(uint64_t Size, unsigned Alignment,
}
int MachineFrameInfo::CreateSpillStackObject(uint64_t Size,
- unsigned Alignment) {
+ llvm::Align Alignment) {
Alignment = clampStackAlignment(!StackRealignable, Alignment, StackAlignment);
CreateStackObject(Size, Alignment, true);
int Index = (int)Objects.size() - NumFixedObjects - 1;
@@ -70,7 +71,7 @@ int MachineFrameInfo::CreateSpillStackObject(uint64_t Size,
return Index;
}
-int MachineFrameInfo::CreateVariableSizedObject(unsigned Alignment,
+int MachineFrameInfo::CreateVariableSizedObject(llvm::Align Alignment,
const AllocaInst *Alloca) {
HasVarSizedObjects = true;
Alignment = clampStackAlignment(!StackRealignable, Alignment, StackAlignment);
@@ -88,7 +89,8 @@ int MachineFrameInfo::CreateFixedObject(uint64_t Size, int64_t SPOffset,
// object is 16-byte aligned. Note that unlike the non-fixed case, if the
// stack needs realignment, we can't assume that the stack will in fact be
// aligned.
- unsigned Alignment = MinAlign(SPOffset, ForcedRealign ? 1 : StackAlignment);
+ llvm::Align Alignment =
+ commonAlignment(ForcedRealign ? llvm::Align() : StackAlignment, SPOffset);
Alignment = clampStackAlignment(!StackRealignable, Alignment, StackAlignment);
Objects.insert(Objects.begin(),
StackObject(Size, Alignment, SPOffset, IsImmutable,
@@ -100,7 +102,8 @@ int MachineFrameInfo::CreateFixedObject(uint64_t Size, int64_t SPOffset,
int MachineFrameInfo::CreateFixedSpillStackObject(uint64_t Size,
int64_t SPOffset,
bool IsImmutable) {
- unsigned Alignment = MinAlign(SPOffset, ForcedRealign ? 1 : StackAlignment);
+ llvm::Align Alignment =
+ commonAlignment(ForcedRealign ? llvm::Align() : StackAlignment, SPOffset);
Alignment = clampStackAlignment(!StackRealignable, Alignment, StackAlignment);
Objects.insert(Objects.begin(),
StackObject(Size, Alignment, SPOffset, IsImmutable,
@@ -232,7 +235,7 @@ void MachineFrameInfo::print(const MachineFunction &MF, raw_ostream &OS) const{
OS << "variable sized";
else
OS << "size=" << SO.Size;
- OS << ", align=" << SO.Alignment;
+ OS << ", align=" << SO.Alignment.value();
if (i < NumFixedObjects)
OS << ", fixed";
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
index d463bee6759..729f06dda62 100644
--- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp
+++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
@@ -898,7 +898,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
// frame index registers. Functions which don't want/need this optimization
// will continue to use the existing code path.
if (MFI.getUseLocalStackAllocationBlock()) {
- unsigned Align = MFI.getLocalFrameMaxAlign();
+ unsigned Align = MFI.getLocalFrameMaxAlign().value();
// Adjust to alignment boundary.
Offset = alignTo(Offset, Align, Skew);
diff --git a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
index 0b7f416f3bb..70afec14b51 100644
--- a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
@@ -1377,10 +1377,10 @@ void HexagonFrameLowering::processFunctionBeforeFrameFinalized(
}
MFI.setLocalFrameSize(LFS);
- unsigned A = MFI.getLocalFrameMaxAlign();
+ Align A = MFI.getLocalFrameMaxAlign();
assert(A <= 8 && "Unexpected local frame alignment");
- if (A == 0)
- MFI.setLocalFrameMaxAlign(8);
+ if (A == 1)
+ MFI.setLocalFrameMaxAlign(llvm::Align(8));
MFI.setUseLocalStackAllocationBlock(true);
// Set the physical aligned-stack base address register.
diff --git a/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp b/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp
index 4c5a9adf1f6..a7127b0e9a9 100644
--- a/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp
@@ -178,7 +178,7 @@ NVPTXPrologEpilogPass::calculateFrameObjectOffsets(MachineFunction &Fn) {
// frame index registers. Functions which don't want/need this optimization
// will continue to use the existing code path.
if (MFI.getUseLocalStackAllocationBlock()) {
- unsigned Align = MFI.getLocalFrameMaxAlign();
+ unsigned Align = MFI.getLocalFrameMaxAlign().value();
// Adjust to alignment boundary.
Offset = (Offset + Align - 1) / Align * Align;
OpenPOWER on IntegriCloud