mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-07 04:21:39 +00:00
R600/SI: Update tablegen defs to avoid restoring spilled sgprs to m0
We had code to do this in SIRegisterInfo::eliminateFrameIndex(), but it is easier to just change the definition of SI_SPILL_S32_RESTORE to only allow numbered sgprs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237143 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f36ad4aa04
commit
a52fdfb7c7
@ -2047,7 +2047,10 @@ multiclass SI_SPILL_SGPR <RegisterClass sgpr_class> {
|
||||
} // End UseNamedOperandTable = 1
|
||||
}
|
||||
|
||||
defm SI_SPILL_S32 : SI_SPILL_SGPR <SReg_32>;
|
||||
// It's unclear whether you can use M0 as the output of v_readlane_b32
|
||||
// instructions, so use SGPR_32 register class for spills to prevent
|
||||
// this from happening.
|
||||
defm SI_SPILL_S32 : SI_SPILL_SGPR <SGPR_32>;
|
||||
defm SI_SPILL_S64 : SI_SPILL_SGPR <SReg_64>;
|
||||
defm SI_SPILL_S128 : SI_SPILL_SGPR <SReg_128>;
|
||||
defm SI_SPILL_S256 : SI_SPILL_SGPR <SReg_256>;
|
||||
|
@ -245,7 +245,6 @@ void SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
||||
for (unsigned i = 0, e = NumSubRegs; i < e; ++i) {
|
||||
unsigned SubReg = getPhysRegSubReg(MI->getOperand(0).getReg(),
|
||||
&AMDGPU::SGPR_32RegClass, i);
|
||||
bool isM0 = SubReg == AMDGPU::M0;
|
||||
struct SIMachineFunctionInfo::SpilledReg Spill =
|
||||
MFI->getSpilledReg(MF, Index, i);
|
||||
|
||||
@ -254,19 +253,12 @@ void SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
||||
Ctx.emitError("Ran out of VGPRs for spilling SGPR");
|
||||
}
|
||||
|
||||
if (isM0)
|
||||
SubReg = RS->scavengeRegister(&AMDGPU::SGPR_32RegClass, MI, 0);
|
||||
|
||||
BuildMI(*MBB, MI, DL,
|
||||
TII->getMCOpcodeFromPseudo(AMDGPU::V_READLANE_B32),
|
||||
SubReg)
|
||||
.addReg(Spill.VGPR)
|
||||
.addImm(Spill.Lane)
|
||||
.addReg(MI->getOperand(0).getReg(), RegState::ImplicitDefine);
|
||||
if (isM0) {
|
||||
BuildMI(*MBB, MI, DL, TII->get(AMDGPU::S_MOV_B32), AMDGPU::M0)
|
||||
.addReg(SubReg);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: only do this when it is needed
|
||||
|
Loading…
Reference in New Issue
Block a user