@@ -1280,6 +1280,8 @@ static unsigned getNumSubRegsForSpillOp(unsigned Op) {
1280
1280
case AMDGPU::SI_SPILL_WWM_V32_RESTORE:
1281
1281
case AMDGPU::SI_SPILL_WWM_AV32_SAVE:
1282
1282
case AMDGPU::SI_SPILL_WWM_AV32_RESTORE:
1283
+ case AMDGPU::SI_SPILL_V16_SAVE:
1284
+ case AMDGPU::SI_SPILL_V16_RESTORE:
1283
1285
return 1 ;
1284
1286
default : llvm_unreachable (" Invalid spill opcode" );
1285
1287
}
@@ -2347,6 +2349,7 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
2347
2349
case AMDGPU::SI_SPILL_V96_SAVE:
2348
2350
case AMDGPU::SI_SPILL_V64_SAVE:
2349
2351
case AMDGPU::SI_SPILL_V32_SAVE:
2352
+ case AMDGPU::SI_SPILL_V16_SAVE:
2350
2353
case AMDGPU::SI_SPILL_A1024_SAVE:
2351
2354
case AMDGPU::SI_SPILL_A512_SAVE:
2352
2355
case AMDGPU::SI_SPILL_A384_SAVE:
@@ -2387,8 +2390,14 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
2387
2390
assert (TII->getNamedOperand (*MI, AMDGPU::OpName::soffset)->getReg () ==
2388
2391
MFI->getStackPtrOffsetReg ());
2389
2392
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
+
2392
2401
auto *MBB = MI->getParent ();
2393
2402
bool IsWWMRegSpill = TII->isWWMRegSpillOpcode (MI->getOpcode ());
2394
2403
if (IsWWMRegSpill) {
@@ -2406,6 +2415,7 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
2406
2415
MI->eraseFromParent ();
2407
2416
return true ;
2408
2417
}
2418
+ case AMDGPU::SI_SPILL_V16_RESTORE:
2409
2419
case AMDGPU::SI_SPILL_V32_RESTORE:
2410
2420
case AMDGPU::SI_SPILL_V64_RESTORE:
2411
2421
case AMDGPU::SI_SPILL_V96_RESTORE:
@@ -2455,8 +2465,13 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
2455
2465
assert (TII->getNamedOperand (*MI, AMDGPU::OpName::soffset)->getReg () ==
2456
2466
MFI->getStackPtrOffsetReg ());
2457
2467
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
+ }
2460
2475
auto *MBB = MI->getParent ();
2461
2476
bool IsWWMRegSpill = TII->isWWMRegSpillOpcode (MI->getOpcode ());
2462
2477
if (IsWWMRegSpill) {
0 commit comments