@@ -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