Skip to content

Commit c4e6a18

Browse files
committed
reorder insert/extract to utilize less registers
1 parent 0555200 commit c4e6a18

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,10 +1530,6 @@ void PPCRegisterInfo::lowerDMRSpilling(MachineBasicBlock::iterator II,
15301530
Register VSRpReg2 = MF.getRegInfo().createVirtualRegister(RC);
15311531
Register VSRpReg3 = MF.getRegInfo().createVirtualRegister(RC);
15321532

1533-
BuildMI(MBB, II, DL, TII.get(PPC::DMXXEXTFDMR512_HI), VSRpReg2)
1534-
.addDef(VSRpReg3)
1535-
.addReg(TargetRegisterInfo::getSubReg(SrcReg, PPC::sub_wacc_hi));
1536-
15371533
BuildMI(MBB, II, DL, TII.get(PPC::DMXXEXTFDMR512), VSRpReg0)
15381534
.addDef(VSRpReg1)
15391535
.addReg(TargetRegisterInfo::getSubReg(SrcReg, PPC::sub_wacc_lo));
@@ -1544,6 +1540,11 @@ void PPCRegisterInfo::lowerDMRSpilling(MachineBasicBlock::iterator II,
15441540
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
15451541
.addReg(VSRpReg1, RegState::Kill),
15461542
FrameIndex, IsLittleEndian ? 64 : 32);
1543+
1544+
BuildMI(MBB, II, DL, TII.get(PPC::DMXXEXTFDMR512_HI), VSRpReg2)
1545+
.addDef(VSRpReg3)
1546+
.addReg(TargetRegisterInfo::getSubReg(SrcReg, PPC::sub_wacc_hi));
1547+
15471548
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::STXVP))
15481549
.addReg(VSRpReg2, RegState::Kill),
15491550
FrameIndex, IsLittleEndian ? 32 : 64);
@@ -1578,6 +1579,12 @@ void PPCRegisterInfo::lowerDMRRestore(MachineBasicBlock::iterator II,
15781579
FrameIndex, IsLittleEndian ? 96 : 0);
15791580
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::LXVP), VSRpReg1),
15801581
FrameIndex, IsLittleEndian ? 64 : 32);
1582+
1583+
BuildMI(MBB, II, DL, TII.get(PPC::DMXXINSTDMR512),
1584+
TargetRegisterInfo::getSubReg(DestReg, PPC::sub_wacc_lo))
1585+
.addReg(VSRpReg0, RegState::Kill)
1586+
.addReg(VSRpReg1, RegState::Kill);
1587+
15811588
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::LXVP), VSRpReg2),
15821589
FrameIndex, IsLittleEndian ? 32 : 64);
15831590
addFrameReference(BuildMI(MBB, II, DL, TII.get(PPC::LXVP), VSRpReg3),
@@ -1589,11 +1596,6 @@ void PPCRegisterInfo::lowerDMRRestore(MachineBasicBlock::iterator II,
15891596
.addReg(VSRpReg2, RegState::Kill)
15901597
.addReg(VSRpReg3, RegState::Kill);
15911598

1592-
BuildMI(MBB, II, DL, TII.get(PPC::DMXXINSTDMR512),
1593-
TargetRegisterInfo::getSubReg(DestReg, PPC::sub_wacc_lo))
1594-
.addReg(VSRpReg0, RegState::Kill)
1595-
.addReg(VSRpReg1, RegState::Kill);
1596-
15971599
// Discard the pseudo instruction.
15981600
MBB.erase(II);
15991601
}

llvm/test/CodeGen/PowerPC/dmr-spill.ll

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@ define void @spillDMRreg(ptr %vop, ptr %vpp, ptr %vcp, ptr %resp) nounwind {
3030
; CHECK-NEXT: lxv v3, 0(r4)
3131
; CHECK-NEXT: lxv vs0, 0(r5)
3232
; CHECK-NEXT: dmxvbf16gerx2pp dmr0, vsp34, vs0
33+
; CHECK-NEXT: dmxxextfdmr512 vsp36, vsp34, wacc0, 0
34+
; CHECK-NEXT: stxvp vsp36, 128(r1)
35+
; CHECK-NEXT: stxvp vsp34, 96(r1)
3336
; CHECK-NEXT: dmxxextfdmr512 vsp36, vsp34, wacc_hi0, 1
34-
; CHECK-NEXT: dmxxextfdmr512 vsp38, vsp32, wacc0, 0
35-
; CHECK-NEXT: stxvp vsp38, 128(r1)
36-
; CHECK-NEXT: stxvp vsp32, 96(r1)
3737
; CHECK-NEXT: stxvp vsp36, 64(r1)
3838
; CHECK-NEXT: stxvp vsp34, 32(r1)
3939
; CHECK-NEXT: bl dummy_func@notoc
4040
; CHECK-NEXT: lxvp vsp34, 128(r1)
4141
; CHECK-NEXT: lxvp vsp36, 96(r1)
42-
; CHECK-NEXT: lxvp vsp32, 64(r1)
43-
; CHECK-NEXT: lxvp vsp38, 32(r1)
44-
; CHECK-NEXT: dmxxinstdmr512 wacc_hi0, vsp32, vsp38, 1
4542
; CHECK-NEXT: dmxxinstdmr512 wacc0, vsp34, vsp36, 0
43+
; CHECK-NEXT: lxvp vsp34, 64(r1)
44+
; CHECK-NEXT: lxvp vsp36, 32(r1)
45+
; CHECK-NEXT: dmxxinstdmr512 wacc_hi0, vsp34, vsp36, 1
4646
; CHECK-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
4747
; CHECK-NEXT: stxvp vsp34, 96(r30)
4848
; CHECK-NEXT: stxvp vsp36, 64(r30)
@@ -72,20 +72,20 @@ define void @spillDMRreg(ptr %vop, ptr %vpp, ptr %vcp, ptr %resp) nounwind {
7272
; AIX-NEXT: lxv v3, 16(r4)
7373
; AIX-NEXT: lxv vs0, 0(r5)
7474
; AIX-NEXT: dmxvbf16gerx2pp dmr0, vsp34, vs0
75+
; AIX-NEXT: dmxxextfdmr512 vsp36, vsp34, wacc0, 0
76+
; AIX-NEXT: stxvp vsp36, 112(r1)
77+
; AIX-NEXT: stxvp vsp34, 144(r1)
7578
; AIX-NEXT: dmxxextfdmr512 vsp36, vsp34, wacc_hi0, 1
76-
; AIX-NEXT: dmxxextfdmr512 vsp38, vsp32, wacc0, 0
77-
; AIX-NEXT: stxvp vsp38, 112(r1)
78-
; AIX-NEXT: stxvp vsp32, 144(r1)
7979
; AIX-NEXT: stxvp vsp36, 176(r1)
8080
; AIX-NEXT: stxvp vsp34, 208(r1)
8181
; AIX-NEXT: bl .dummy_func[PR]
8282
; AIX-NEXT: nop
8383
; AIX-NEXT: lxvp vsp34, 112(r1)
8484
; AIX-NEXT: lxvp vsp36, 144(r1)
85-
; AIX-NEXT: lxvp vsp32, 176(r1)
86-
; AIX-NEXT: lxvp vsp38, 208(r1)
87-
; AIX-NEXT: dmxxinstdmr512 wacc_hi0, vsp32, vsp38, 1
8885
; AIX-NEXT: dmxxinstdmr512 wacc0, vsp34, vsp36, 0
86+
; AIX-NEXT: lxvp vsp34, 176(r1)
87+
; AIX-NEXT: lxvp vsp36, 208(r1)
88+
; AIX-NEXT: dmxxinstdmr512 wacc_hi0, vsp34, vsp36, 1
8989
; AIX-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc_hi0, 1
9090
; AIX-NEXT: stxvp vsp36, 96(r31)
9191
; AIX-NEXT: stxvp vsp34, 64(r31)
@@ -115,20 +115,20 @@ define void @spillDMRreg(ptr %vop, ptr %vpp, ptr %vcp, ptr %resp) nounwind {
115115
; AIX32-NEXT: lxv v3, 16(r4)
116116
; AIX32-NEXT: lxv vs0, 0(r5)
117117
; AIX32-NEXT: dmxvbf16gerx2pp dmr0, vsp34, vs0
118+
; AIX32-NEXT: dmxxextfdmr512 vsp36, vsp34, wacc0, 0
119+
; AIX32-NEXT: stxvp vsp36, 64(r1)
120+
; AIX32-NEXT: stxvp vsp34, 96(r1)
118121
; AIX32-NEXT: dmxxextfdmr512 vsp36, vsp34, wacc_hi0, 1
119-
; AIX32-NEXT: dmxxextfdmr512 vsp38, vsp32, wacc0, 0
120-
; AIX32-NEXT: stxvp vsp38, 64(r1)
121-
; AIX32-NEXT: stxvp vsp32, 96(r1)
122122
; AIX32-NEXT: stxvp vsp36, 128(r1)
123123
; AIX32-NEXT: stxvp vsp34, 160(r1)
124124
; AIX32-NEXT: bl .dummy_func[PR]
125125
; AIX32-NEXT: nop
126126
; AIX32-NEXT: lxvp vsp34, 64(r1)
127127
; AIX32-NEXT: lxvp vsp36, 96(r1)
128-
; AIX32-NEXT: lxvp vsp32, 128(r1)
129-
; AIX32-NEXT: lxvp vsp38, 160(r1)
130-
; AIX32-NEXT: dmxxinstdmr512 wacc_hi0, vsp32, vsp38, 1
131128
; AIX32-NEXT: dmxxinstdmr512 wacc0, vsp34, vsp36, 0
129+
; AIX32-NEXT: lxvp vsp34, 128(r1)
130+
; AIX32-NEXT: lxvp vsp36, 160(r1)
131+
; AIX32-NEXT: dmxxinstdmr512 wacc_hi0, vsp34, vsp36, 1
132132
; AIX32-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc_hi0, 1
133133
; AIX32-NEXT: stxvp vsp36, 96(r31)
134134
; AIX32-NEXT: stxvp vsp34, 64(r31)

0 commit comments

Comments
 (0)