summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Chatelet <gchatelet@google.com>2019-10-10 15:38:22 +0000
committerGuillaume Chatelet <gchatelet@google.com>2019-10-10 15:38:22 +0000
commitff054b9e32307960fbbfde5dbb04a8b79be26fc4 (patch)
treed8b2f322d21351785b58709d92e4bdda0410aef9
parentd46a6a9e6865ef71f754d8bcaae5205cf484856d (diff)
downloadbcm5719-llvm-ff054b9e32307960fbbfde5dbb04a8b79be26fc4.tar.gz
bcm5719-llvm-ff054b9e32307960fbbfde5dbb04a8b79be26fc4.zip
[Alignment][NFC] Use llv::Align in GISelKnownBits
Summary: This is patch is part of a series 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: courbet Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D68786 llvm-svn: 374369
-rw-r--r--llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h9
-rw-r--r--llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp16
2 files changed, 13 insertions, 12 deletions
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h b/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h
index e2a088f9217..dfe5a7f3177 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h
@@ -63,12 +63,13 @@ public:
void computeKnownBitsForFrameIndex(Register R, KnownBits &Known,
const APInt &DemandedElts,
unsigned Depth = 0);
- static unsigned inferAlignmentForFrameIdx(int FrameIdx, int Offset,
- const MachineFunction &MF);
- static void computeKnownBitsForAlignment(KnownBits &Known, unsigned Align);
+ static Align inferAlignmentForFrameIdx(int FrameIdx, int Offset,
+ const MachineFunction &MF);
+ static void computeKnownBitsForAlignment(KnownBits &Known,
+ MaybeAlign Alignment);
// Try to infer alignment for MI.
- static unsigned inferPtrAlignment(const MachineInstr &MI);
+ static MaybeAlign inferPtrAlignment(const MachineInstr &MI);
// Observer API. No-op for non-caching implementation.
void erasingInstr(MachineInstr &MI) override{};
diff --git a/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp b/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp
index 8f9b7ddeabf..be8efa8795f 100644
--- a/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp
@@ -33,19 +33,19 @@ GISelKnownBits::GISelKnownBits(MachineFunction &MF)
: MF(MF), MRI(MF.getRegInfo()), TL(*MF.getSubtarget().getTargetLowering()),
DL(MF.getFunction().getParent()->getDataLayout()) {}
-unsigned GISelKnownBits::inferAlignmentForFrameIdx(int FrameIdx, int Offset,
- const MachineFunction &MF) {
+Align GISelKnownBits::inferAlignmentForFrameIdx(int FrameIdx, int Offset,
+ const MachineFunction &MF) {
const MachineFrameInfo &MFI = MF.getFrameInfo();
- return MinAlign(Offset, MFI.getObjectAlignment(FrameIdx));
+ return commonAlignment(Align(MFI.getObjectAlignment(FrameIdx)), Offset);
// TODO: How to handle cases with Base + Offset?
}
-unsigned GISelKnownBits::inferPtrAlignment(const MachineInstr &MI) {
+MaybeAlign GISelKnownBits::inferPtrAlignment(const MachineInstr &MI) {
if (MI.getOpcode() == TargetOpcode::G_FRAME_INDEX) {
int FrameIdx = MI.getOperand(1).getIndex();
return inferAlignmentForFrameIdx(FrameIdx, 0, *MI.getMF());
}
- return 0;
+ return None;
}
void GISelKnownBits::computeKnownBitsForFrameIndex(Register R, KnownBits &Known,
@@ -56,10 +56,10 @@ void GISelKnownBits::computeKnownBitsForFrameIndex(Register R, KnownBits &Known,
}
void GISelKnownBits::computeKnownBitsForAlignment(KnownBits &Known,
- unsigned Align) {
- if (Align)
+ MaybeAlign Alignment) {
+ if (Alignment)
// The low bits are known zero if the pointer is aligned.
- Known.Zero.setLowBits(Log2_32(Align));
+ Known.Zero.setLowBits(Log2(Alignment));
}
KnownBits GISelKnownBits::getKnownBits(MachineInstr &MI) {
OpenPOWER on IntegriCloud