diff options
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonVExtract.cpp')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonVExtract.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonVExtract.cpp b/llvm/lib/Target/Hexagon/HexagonVExtract.cpp index b7d6dbe21c74..b5f06ebd3189 100644 --- a/llvm/lib/Target/Hexagon/HexagonVExtract.cpp +++ b/llvm/lib/Target/Hexagon/HexagonVExtract.cpp @@ -15,7 +15,7 @@ #include "HexagonRegisterInfo.h" #include "HexagonSubtarget.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/PassSupport.h" +#include "llvm/Pass.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -107,7 +107,7 @@ bool HexagonVExtract::runOnMachineFunction(MachineFunction &MF) { Register AR = MF.getInfo<HexagonMachineFunctionInfo>()->getStackAlignBaseVReg(); std::map<unsigned, SmallVector<MachineInstr*,4>> VExtractMap; - unsigned MaxAlign = 0; + MaybeAlign MaxAlign; bool Changed = false; for (MachineBasicBlock &MBB : MF) { @@ -137,14 +137,14 @@ bool HexagonVExtract::runOnMachineFunction(MachineFunction &MF) { continue; const auto &VecRC = *MRI.getRegClass(VecR); - unsigned Align = HRI.getSpillAlignment(VecRC); - MaxAlign = std::max(MaxAlign, Align); + Align Alignment = HRI.getSpillAlign(VecRC); + MaxAlign = max(MaxAlign, Alignment); // Make sure this is not a spill slot: spill slots cannot be aligned // if there are variable-sized objects on the stack. They must be // accessible via FP (which is not aligned), because SP is unknown, // and AP may not be available at the location of the load/store. - int FI = MFI.CreateStackObject(HRI.getSpillSize(VecRC), Align, - /*isSpillSlot*/false); + int FI = MFI.CreateStackObject(HRI.getSpillSize(VecRC), Alignment, + /*isSpillSlot*/ false); MachineInstr *DefI = MRI.getVRegDef(VecR); MachineBasicBlock::iterator At = std::next(DefI->getIterator()); @@ -178,13 +178,13 @@ bool HexagonVExtract::runOnMachineFunction(MachineFunction &MF) { } } - if (AR) { + if (AR && MaxAlign) { // Update the required stack alignment. MachineInstr *AlignaI = MRI.getVRegDef(AR); assert(AlignaI->getOpcode() == Hexagon::PS_aligna); MachineOperand &Op = AlignaI->getOperand(1); - if (MaxAlign > Op.getImm()) - Op.setImm(MaxAlign); + if (*MaxAlign > Op.getImm()) + Op.setImm(MaxAlign->value()); } return Changed; |