Index: lib/Target/AMDGPU/SIRegisterInfo.cpp =================================================================== --- lib/Target/AMDGPU/SIRegisterInfo.cpp +++ lib/Target/AMDGPU/SIRegisterInfo.cpp @@ -631,16 +631,8 @@ assert(SuperReg != AMDGPU::M0 && "m0 should never spill"); + assert(MRI.isReserved(AMDGPU::M0)); unsigned OffsetReg = AMDGPU::M0; - unsigned M0CopyReg = AMDGPU::NoRegister; - - if (SpillToSMEM) { - if (RS->isRegUsed(AMDGPU::M0)) { - M0CopyReg = MRI.createVirtualRegister(&AMDGPU::SReg_32_XM0RegClass); - BuildMI(*MBB, MI, DL, TII->get(AMDGPU::COPY), M0CopyReg) - .addReg(AMDGPU::M0); - } - } unsigned ScalarStoreOp; unsigned EltSize = 4; @@ -754,11 +746,6 @@ } } - if (M0CopyReg != AMDGPU::NoRegister) { - BuildMI(*MBB, MI, DL, TII->get(AMDGPU::COPY), AMDGPU::M0) - .addReg(M0CopyReg, RegState::Kill); - } - MI->eraseFromParent(); MFI->addToSpilledSGPRs(NumSubRegs); return true; @@ -791,16 +778,8 @@ assert(SuperReg != AMDGPU::M0 && "m0 should never spill"); + assert(MRI.isReserved(AMDGPU::M0)); unsigned OffsetReg = AMDGPU::M0; - unsigned M0CopyReg = AMDGPU::NoRegister; - - if (SpillToSMEM) { - if (RS->isRegUsed(AMDGPU::M0)) { - M0CopyReg = MRI.createVirtualRegister(&AMDGPU::SReg_32_XM0RegClass); - BuildMI(*MBB, MI, DL, TII->get(AMDGPU::COPY), M0CopyReg) - .addReg(AMDGPU::M0); - } - } unsigned EltSize = 4; unsigned ScalarLoadOp; @@ -898,11 +877,6 @@ } } - if (M0CopyReg != AMDGPU::NoRegister) { - BuildMI(*MBB, MI, DL, TII->get(AMDGPU::COPY), AMDGPU::M0) - .addReg(M0CopyReg, RegState::Kill); - } - MI->eraseFromParent(); return true; } Index: test/CodeGen/AMDGPU/spill-m0.ll =================================================================== --- test/CodeGen/AMDGPU/spill-m0.ll +++ test/CodeGen/AMDGPU/spill-m0.ll @@ -119,10 +119,8 @@ ; GCN: ; clobber m0 -; TOSMEM: s_mov_b32 vcc_hi, m0 ; TOSMEM: s_add_u32 m0, s3, 0x100 ; TOSMEM-NEXT: s_buffer_store_dwordx2 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, m0 ; 8-byte Folded Spill -; TOSMEM: s_mov_b32 m0, vcc_hi ; TOSMEM: s_mov_b64 exec, ; TOSMEM: s_cbranch_execz @@ -170,10 +168,8 @@ ; TOSMEM: s_mov_b32 m0, -1 -; TOSMEM: s_mov_b32 vcc_hi, m0 ; TOSMEM: s_add_u32 m0, s3, 0x100 ; TOSMEM: s_buffer_load_dwordx2 s{{\[[0-9]+:[0-9]+\]}}, s[88:91], m0 ; 8-byte Folded Reload -; TOSMEM: s_mov_b32 m0, vcc_hi ; TOSMEM: s_waitcnt lgkmcnt(0) ; TOSMEM: ds_write_b64