diff --git a/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h b/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h --- a/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/GISelKnownBits.h @@ -63,12 +63,13 @@ 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 --- a/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp +++ b/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp @@ -33,19 +33,19 @@ : 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 llvm::None; } void GISelKnownBits::computeKnownBitsForFrameIndex(Register R, KnownBits &Known, @@ -56,10 +56,10 @@ } 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) {