Skip to content

Commit a665051

Browse files
committed
spill 16 with scratch load/store
1 parent 5f8b256 commit a665051

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,6 +1807,8 @@ static unsigned getSGPRSpillRestoreOpcode(unsigned Size) {
18071807

18081808
static unsigned getVGPRSpillRestoreOpcode(unsigned Size) {
18091809
switch (Size) {
1810+
case 2:
1811+
return AMDGPU::SI_SPILL_V16_RESTORE;
18101812
case 4:
18111813
return AMDGPU::SI_SPILL_V32_RESTORE;
18121814
case 8:

llvm/lib/Target/AMDGPU/SIInstructions.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,6 +1002,7 @@ multiclass SI_SPILL_VGPR <RegisterClass vgpr_class, bit UsesTmp = 0> {
10021002
} // End UseNamedOperandTable = 1, Spill = 1, VALU = 1, SchedRW = [WriteVMEM]
10031003
}
10041004

1005+
defm SI_SPILL_V16 : SI_SPILL_VGPR <VGPR_16>;
10051006
defm SI_SPILL_V32 : SI_SPILL_VGPR <VGPR_32>;
10061007
defm SI_SPILL_V64 : SI_SPILL_VGPR <VReg_64>;
10071008
defm SI_SPILL_V96 : SI_SPILL_VGPR <VReg_96>;

llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,6 +1280,8 @@ static unsigned getNumSubRegsForSpillOp(unsigned Op) {
12801280
case AMDGPU::SI_SPILL_WWM_V32_RESTORE:
12811281
case AMDGPU::SI_SPILL_WWM_AV32_SAVE:
12821282
case AMDGPU::SI_SPILL_WWM_AV32_RESTORE:
1283+
case AMDGPU::SI_SPILL_V16_SAVE:
1284+
case AMDGPU::SI_SPILL_V16_RESTORE:
12831285
return 1;
12841286
default: llvm_unreachable("Invalid spill opcode");
12851287
}
@@ -2347,6 +2349,7 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
23472349
case AMDGPU::SI_SPILL_V96_SAVE:
23482350
case AMDGPU::SI_SPILL_V64_SAVE:
23492351
case AMDGPU::SI_SPILL_V32_SAVE:
2352+
case AMDGPU::SI_SPILL_V16_SAVE:
23502353
case AMDGPU::SI_SPILL_A1024_SAVE:
23512354
case AMDGPU::SI_SPILL_A512_SAVE:
23522355
case AMDGPU::SI_SPILL_A384_SAVE:
@@ -2387,8 +2390,14 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
23872390
assert(TII->getNamedOperand(*MI, AMDGPU::OpName::soffset)->getReg() ==
23882391
MFI->getStackPtrOffsetReg());
23892392

2390-
unsigned Opc = ST.enableFlatScratch() ? AMDGPU::SCRATCH_STORE_DWORD_SADDR
2391-
: AMDGPU::BUFFER_STORE_DWORD_OFFSET;
2393+
unsigned Opc;
2394+
if (MI->getOpcode() == AMDGPU::SI_SPILL_V16_SAVE) {
2395+
Opc = AMDGPU::SCRATCH_STORE_SHORT_SADDR_t16;
2396+
} else {
2397+
Opc = ST.enableFlatScratch() ? AMDGPU::SCRATCH_STORE_DWORD_SADDR
2398+
: AMDGPU::BUFFER_STORE_DWORD_OFFSET;
2399+
}
2400+
23922401
auto *MBB = MI->getParent();
23932402
bool IsWWMRegSpill = TII->isWWMRegSpillOpcode(MI->getOpcode());
23942403
if (IsWWMRegSpill) {
@@ -2406,6 +2415,7 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
24062415
MI->eraseFromParent();
24072416
return true;
24082417
}
2418+
case AMDGPU::SI_SPILL_V16_RESTORE:
24092419
case AMDGPU::SI_SPILL_V32_RESTORE:
24102420
case AMDGPU::SI_SPILL_V64_RESTORE:
24112421
case AMDGPU::SI_SPILL_V96_RESTORE:
@@ -2455,8 +2465,13 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
24552465
assert(TII->getNamedOperand(*MI, AMDGPU::OpName::soffset)->getReg() ==
24562466
MFI->getStackPtrOffsetReg());
24572467

2458-
unsigned Opc = ST.enableFlatScratch() ? AMDGPU::SCRATCH_LOAD_DWORD_SADDR
2459-
: AMDGPU::BUFFER_LOAD_DWORD_OFFSET;
2468+
unsigned Opc;
2469+
if (MI->getOpcode() == AMDGPU::SI_SPILL_V16_RESTORE) {
2470+
Opc = AMDGPU::SCRATCH_LOAD_SHORT_SADDR_t16;
2471+
} else {
2472+
Opc = ST.enableFlatScratch() ? AMDGPU::SCRATCH_LOAD_DWORD_SADDR
2473+
: AMDGPU::BUFFER_LOAD_DWORD_OFFSET;
2474+
}
24602475
auto *MBB = MI->getParent();
24612476
bool IsWWMRegSpill = TII->isWWMRegSpillOpcode(MI->getOpcode());
24622477
if (IsWWMRegSpill) {

0 commit comments

Comments
 (0)