diff options
Diffstat (limited to 'llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp index fe2aaca8429a..5139cc39d2af 100644 --- a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp +++ b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp @@ -109,8 +109,9 @@ bool SystemZRegisterInfo::getRegAllocationHints( auto tryAddHint = [&](const MachineOperand *MO) -> void { Register Reg = MO->getReg(); - Register PhysReg = - Register::isPhysicalRegister(Reg) ? Reg : VRM->getPhys(Reg); + Register PhysReg = Register::isPhysicalRegister(Reg) + ? Reg + : Register(VRM->getPhys(Reg)); if (PhysReg) { if (MO->getSubReg()) PhysReg = getSubReg(PhysReg, MO->getSubReg()); @@ -265,8 +266,9 @@ SystemZRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI, // Decompose the frame index into a base and offset. int FrameIndex = MI->getOperand(FIOperandNum).getIndex(); Register BasePtr; - int64_t Offset = (TFI->getFrameIndexReference(MF, FrameIndex, BasePtr) + - MI->getOperand(FIOperandNum + 1).getImm()); + int64_t Offset = + (TFI->getFrameIndexReference(MF, FrameIndex, BasePtr).getFixed() + + MI->getOperand(FIOperandNum + 1).getImm()); // Special handling of dbg_value instructions. if (MI->isDebugValue()) { @@ -321,8 +323,8 @@ SystemZRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI, // Load the high offset into the scratch register and use it as // an index. TII->loadImmediate(MBB, MI, ScratchReg, HighOffset); - BuildMI(MBB, MI, DL, TII->get(SystemZ::AGR),ScratchReg) - .addReg(ScratchReg, RegState::Kill).addReg(BasePtr); + BuildMI(MBB, MI, DL, TII->get(SystemZ::LA), ScratchReg) + .addReg(BasePtr, RegState::Kill).addImm(0).addReg(ScratchReg); } // Use the scratch register as the base. It then dies here. |
