Skip to content

Commit 9f87e61

Browse files
committed
cleanup dmr spill code
1 parent 47c91db commit 9f87e61

File tree

1 file changed

+30
-43
lines changed

1 file changed

+30
-43
lines changed

llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp

Lines changed: 30 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,43 +1521,31 @@ void PPCRegisterInfo::lowerDMRSpilling(MachineBasicBlock::iterator II,
15211521
const TargetRegisterClass *RC = &PPC::VSRpRCRegClass;
15221522

15231523
auto spillDMR = [&](Register SrcReg, int BEIdx, int LEIdx) {
1524-
Register VSRpReg0 = MF.getRegInfo().createVirtualRegister(RC);
1525-
Register VSRpReg1 = MF.getRegInfo().createVirtualRegister(RC);
1526-
Register VSRpReg2 = MF.getRegInfo().createVirtualRegister(RC);
1527-
Register VSRpReg3 = MF.getRegInfo().createVirtualRegister(RC);
1528-
1529-
BuildMI(MBB, II, DL, TII.get(PPC::DMXXEXTFDMR512), VSRpReg0)
1530-
.addDef(VSRpReg1)
1531-
.addReg(TargetRegisterInfo::getSubReg(SrcReg, PPC::sub_wacc_lo));
1532-
1533-
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
1534-
.addReg(VSRpReg0, RegState::Kill),
1535-
FrameIndex, IsLittleEndian ? LEIdx : BEIdx);
1536-
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
1537-
.addReg(VSRpReg1, RegState::Kill),
1538-
FrameIndex, IsLittleEndian ? LEIdx - 32 : BEIdx + 32);
1539-
1540-
BuildMI(MBB, II, DL, TII.get(PPC::DMXXEXTFDMR512_HI), VSRpReg2)
1541-
.addDef(VSRpReg3)
1542-
.addReg(TargetRegisterInfo::getSubReg(SrcReg, PPC::sub_wacc_hi));
1543-
1544-
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
1545-
.addReg(VSRpReg2, RegState::Kill),
1546-
FrameIndex, IsLittleEndian ? LEIdx - 64 : BEIdx + 64);
1547-
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
1548-
.addReg(VSRpReg3, RegState::Kill),
1549-
FrameIndex, IsLittleEndian ? BEIdx : LEIdx);
1524+
auto spillWACC = [&](unsigned Opc, unsigned RegIdx, int IdxBE, int IdxLE) {
1525+
Register VSRpReg0 = MF.getRegInfo().createVirtualRegister(RC);
1526+
Register VSRpReg1 = MF.getRegInfo().createVirtualRegister(RC);
1527+
1528+
BuildMI(MBB, II, DL, TII.get(Opc), VSRpReg0)
1529+
.addDef(VSRpReg1)
1530+
.addReg(TargetRegisterInfo::getSubReg(SrcReg, RegIdx));
1531+
1532+
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
1533+
.addReg(VSRpReg0, RegState::Kill),
1534+
FrameIndex, IsLittleEndian ? IdxLE : IdxBE);
1535+
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
1536+
.addReg(VSRpReg1, RegState::Kill),
1537+
FrameIndex, IsLittleEndian ? IdxLE - 32 : IdxBE + 32);
1538+
};
1539+
spillWACC(PPC::DMXXEXTFDMR512, PPC::sub_wacc_lo, BEIdx, LEIdx);
1540+
spillWACC(PPC::DMXXEXTFDMR512_HI, PPC::sub_wacc_hi, BEIdx + 64, LEIdx - 64);
15501541
};
15511542

1543+
Register SrcReg = MI.getOperand(0).getReg();
15521544
if (MI.getOpcode() == PPC::SPILL_DMRP) {
1553-
spillDMR(
1554-
TargetRegisterInfo::getSubReg(MI.getOperand(0).getReg(), PPC::sub_dmr1),
1555-
0, 96);
1556-
spillDMR(
1557-
TargetRegisterInfo::getSubReg(MI.getOperand(0).getReg(), PPC::sub_dmr0),
1558-
128, 224);
1545+
spillDMR(TargetRegisterInfo::getSubReg(SrcReg, PPC::sub_dmr1), 0, 96);
1546+
spillDMR(TargetRegisterInfo::getSubReg(SrcReg, PPC::sub_dmr0), 128, 224);
15591547
} else
1560-
spillDMR(MI.getOperand(0).getReg(), 0, 96);
1548+
spillDMR(SrcReg, 0, 96);
15611549

15621550
// Discard the pseudo instruction.
15631551
MBB.erase(II);
@@ -1577,12 +1565,13 @@ void PPCRegisterInfo::lowerDMRRestore(MachineBasicBlock::iterator II,
15771565
const TargetRegisterClass *RC = &PPC::VSRpRCRegClass;
15781566

15791567
auto restoreDMR = [&](Register DestReg, int BEIdx, int LEIdx) {
1580-
auto restoreWACC = [&](unsigned Opc, unsigned RegIdx, int IdxBE, int IdxLE) {
1568+
auto restoreWACC = [&](unsigned Opc, unsigned RegIdx, int IdxBE,
1569+
int IdxLE) {
15811570
Register VSRpReg0 = MF.getRegInfo().createVirtualRegister(RC);
15821571
Register VSRpReg1 = MF.getRegInfo().createVirtualRegister(RC);
15831572

15841573
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::LXVP), VSRpReg0),
1585-
FrameIndex, IsLittleEndian ? IdxLE: IdxBE);
1574+
FrameIndex, IsLittleEndian ? IdxLE : IdxBE);
15861575
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::LXVP), VSRpReg1),
15871576
FrameIndex, IsLittleEndian ? IdxLE - 32 : IdxBE + 32);
15881577

@@ -1593,18 +1582,16 @@ void PPCRegisterInfo::lowerDMRRestore(MachineBasicBlock::iterator II,
15931582
.addReg(VSRpReg1, RegState::Kill);
15941583
};
15951584
restoreWACC(PPC::DMXXINSTDMR512, PPC::sub_wacc_lo, BEIdx, LEIdx);
1596-
restoreWACC(PPC::DMXXINSTDMR512_HI, PPC::sub_wacc_hi, BEIdx+64, LEIdx-64);
1585+
restoreWACC(PPC::DMXXINSTDMR512_HI, PPC::sub_wacc_hi, BEIdx + 64,
1586+
LEIdx - 64);
15971587
};
15981588

1589+
Register DestReg = MI.getOperand(0).getReg();
15991590
if (MI.getOpcode() == PPC::RESTORE_DMRP) {
1600-
restoreDMR(
1601-
TargetRegisterInfo::getSubReg(MI.getOperand(0).getReg(), PPC::sub_dmr1),
1602-
0, 96);
1603-
restoreDMR(
1604-
TargetRegisterInfo::getSubReg(MI.getOperand(0).getReg(), PPC::sub_dmr0),
1605-
128, 224);
1591+
restoreDMR(TargetRegisterInfo::getSubReg(DestReg, PPC::sub_dmr1), 0, 96);
1592+
restoreDMR(TargetRegisterInfo::getSubReg(DestReg, PPC::sub_dmr0), 128, 224);
16061593
} else
1607-
restoreDMR(MI.getOperand(0).getReg(), 0, 96);
1594+
restoreDMR(DestReg, 0, 96);
16081595

16091596
// Discard the pseudo instruction.
16101597
MBB.erase(II);

0 commit comments

Comments
 (0)