Skip to content

Commit e3d23f8

Browse files
authored
AMDGPU: Fix trying to constrain physical registers in spill handling (#161793)
It's nonsensical to call constrainRegClass on a physical register, and we should not see virtual registers here.
1 parent 5601c40 commit e3d23f8

File tree

2 files changed

+5
-8
lines changed

2 files changed

+5
-8
lines changed

llvm/lib/Target/AMDGPU/SIFrameLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ class PrologEpilogSGPRSpillBuilder {
306306

307307
buildEpilogRestore(ST, TRI, *FuncInfo, LiveUnits, MF, MBB, MI, DL,
308308
TmpVGPR, FI, FrameReg, DwordOff);
309-
MRI.constrainRegClass(SubReg, &AMDGPU::SReg_32_XM0RegClass);
309+
assert(SubReg.isPhysical());
310+
310311
BuildMI(MBB, MI, DL, TII->get(AMDGPU::V_READFIRSTLANE_B32), SubReg)
311312
.addReg(TmpVGPR, RegState::Kill);
312313
DwordOff += 4;

llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2222,8 +2222,6 @@ bool SIRegisterInfo::spillEmergencySGPR(MachineBasicBlock::iterator MI,
22222222
// Don't need to write VGPR out.
22232223
}
22242224

2225-
MachineRegisterInfo &MRI = MI->getMF()->getRegInfo();
2226-
22272225
// Restore clobbered registers in the specified restore block.
22282226
MI = RestoreMBB.end();
22292227
SB.setMI(&RestoreMBB, MI);
@@ -2238,7 +2236,8 @@ bool SIRegisterInfo::spillEmergencySGPR(MachineBasicBlock::iterator MI,
22382236
SB.NumSubRegs == 1
22392237
? SB.SuperReg
22402238
: Register(getSubReg(SB.SuperReg, SB.SplitParts[i]));
2241-
MRI.constrainRegClass(SubReg, &AMDGPU::SReg_32_XM0RegClass);
2239+
2240+
assert(SubReg.isPhysical());
22422241
bool LastSubReg = (i + 1 == e);
22432242
auto MIB = BuildMI(*SB.MBB, MI, SB.DL, SB.TII.get(AMDGPU::V_READLANE_B32),
22442243
SubReg)
@@ -3059,8 +3058,7 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
30593058
if (IsSALU && LiveSCC) {
30603059
Register NewDest;
30613060
if (IsCopy) {
3062-
MF->getRegInfo().constrainRegClass(ResultReg,
3063-
&AMDGPU::SReg_32_XM0RegClass);
3061+
assert(ResultReg.isPhysical());
30643062
NewDest = ResultReg;
30653063
} else {
30663064
NewDest = RS->scavengeRegisterBackwards(AMDGPU::SReg_32_XM0RegClass,
@@ -3190,8 +3188,6 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
31903188

31913189
Register NewDest;
31923190
if (IsCopy) {
3193-
MF->getRegInfo().constrainRegClass(ResultReg,
3194-
&AMDGPU::SReg_32_XM0RegClass);
31953191
NewDest = ResultReg;
31963192
} else {
31973193
NewDest = RS->scavengeRegisterBackwards(

0 commit comments

Comments
 (0)