Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/VE/VERegisterInfo.cpp
Show First 20 Lines • Show All 114 Lines • ▼ Show 20 Lines | void VERegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, | ||||
const VEFrameLowering *TFI = getFrameLowering(MF); | const VEFrameLowering *TFI = getFrameLowering(MF); | ||||
Register FrameReg; | Register FrameReg; | ||||
int Offset; | int Offset; | ||||
Offset = TFI->getFrameIndexReference(MF, FrameIndex, FrameReg); | Offset = TFI->getFrameIndexReference(MF, FrameIndex, FrameReg); | ||||
Offset += MI.getOperand(FIOperandNum + 2).getImm(); | Offset += MI.getOperand(FIOperandNum + 2).getImm(); | ||||
if (MI.getOpcode() == VE::STQrii) { | |||||
const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo(); | |||||
Register SrcReg = MI.getOperand(3).getReg(); | |||||
Register SrcHiReg = getSubReg(SrcReg, VE::sub_even); | |||||
Register SrcLoReg = getSubReg(SrcReg, VE::sub_odd); | |||||
// VE stores HiReg to 8(addr) and LoReg to 0(addr) | |||||
MachineInstr *StMI = BuildMI(*MI.getParent(), II, dl, TII.get(VE::STrii)) | |||||
.addReg(FrameReg) | |||||
.addImm(0) | |||||
.addImm(0) | |||||
.addReg(SrcLoReg); | |||||
replaceFI(MF, II, *StMI, dl, 0, Offset, FrameReg); | |||||
MI.setDesc(TII.get(VE::STrii)); | |||||
MI.getOperand(3).setReg(SrcHiReg); | |||||
Offset += 8; | |||||
} else if (MI.getOpcode() == VE::LDQrii) { | |||||
const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo(); | |||||
Register DestReg = MI.getOperand(0).getReg(); | |||||
Register DestHiReg = getSubReg(DestReg, VE::sub_even); | |||||
Register DestLoReg = getSubReg(DestReg, VE::sub_odd); | |||||
// VE loads HiReg from 8(addr) and LoReg from 0(addr) | |||||
MachineInstr *StMI = | |||||
BuildMI(*MI.getParent(), II, dl, TII.get(VE::LDrii), DestLoReg) | |||||
.addReg(FrameReg) | |||||
.addImm(0) | |||||
.addImm(0); | |||||
replaceFI(MF, II, *StMI, dl, 1, Offset, FrameReg); | |||||
MI.setDesc(TII.get(VE::LDrii)); | |||||
MI.getOperand(0).setReg(DestHiReg); | |||||
Offset += 8; | |||||
} | |||||
replaceFI(MF, II, MI, dl, FIOperandNum, Offset, FrameReg); | replaceFI(MF, II, MI, dl, FIOperandNum, Offset, FrameReg); | ||||
} | } | ||||
Register VERegisterInfo::getFrameRegister(const MachineFunction &MF) const { | Register VERegisterInfo::getFrameRegister(const MachineFunction &MF) const { | ||||
return VE::SX9; | return VE::SX9; | ||||
} | } | ||||
// VE has no architectural need for stack realignment support, | // VE has no architectural need for stack realignment support, | ||||
Show All 21 Lines |