Skip to content

Commit 86c7782

Browse files
authored
[AMDGPU] Change SGPR layout to striped caller/callee saved (llvm#127353) (llvm#1103)
2 parents d23bbf4 + 5d63faf commit 86c7782

File tree

64 files changed

+52599
-8638
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+52599
-8638
lines changed

llvm/lib/Target/AMDGPU/AMDGPUCallingConv.td

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,15 @@ def CSR_AMDGPU_AGPRs : CalleeSavedRegs<
155155
>;
156156

157157
def CSR_AMDGPU_SGPRs : CalleeSavedRegs<
158-
(sequence "SGPR%u", 30, 105)
158+
// Ensure that s30-s31 (return address), s32 (stack pointer), s33 (frame pointer),
159+
// and s34 (base pointer) are callee-saved. The striped layout starts from s40,
160+
// with a stripe width of 8. The last stripe is 10 wide instead of 8, to avoid
161+
// ending with a 2-wide stripe.
162+
(add (sequence "SGPR%u", 30, 39),
163+
(sequence "SGPR%u", 48, 55),
164+
(sequence "SGPR%u", 64, 71),
165+
(sequence "SGPR%u", 80, 87),
166+
(sequence "SGPR%u", 96, 105))
159167
>;
160168

161169
def CSR_AMDGPU_SI_Gfx_SGPRs : CalleeSavedRegs<

llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2041,6 +2041,9 @@ void SILoadStoreOptimizer::processBaseWithConstOffset(const MachineOperand &Base
20412041
BaseLo = *Src0;
20422042
}
20432043

2044+
if (!BaseLo.isReg())
2045+
return;
2046+
20442047
Src0 = TII->getNamedOperand(*BaseHiDef, AMDGPU::OpName::src0);
20452048
Src1 = TII->getNamedOperand(*BaseHiDef, AMDGPU::OpName::src1);
20462049

@@ -2053,6 +2056,9 @@ void SILoadStoreOptimizer::processBaseWithConstOffset(const MachineOperand &Base
20532056
uint64_t Offset1 = Src1->getImm();
20542057
BaseHi = *Src0;
20552058

2059+
if (!BaseHi.isReg())
2060+
return;
2061+
20562062
Addr.Base.LoReg = BaseLo.getReg();
20572063
Addr.Base.HiReg = BaseHi.getReg();
20582064
Addr.Base.LoSubReg = BaseLo.getSubReg();

llvm/test/CodeGen/AMDGPU/accvgpr-spill-scc-clobber.mir

Lines changed: 776 additions & 8 deletions
Large diffs are not rendered by default.

llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-pow-codegen.ll

Lines changed: 646 additions & 3 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)