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