diff --git a/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp b/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp --- a/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp +++ b/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp @@ -242,19 +242,14 @@ // If there are no free lower VGPRs available, default to using the // pre-reserved register instead. - Register LowestAvailableVGPR = PreReservedVGPR; - - MachineRegisterInfo &MRI = MF.getRegInfo(); - MachineFrameInfo &FrameInfo = MF.getFrameInfo(); - ArrayRef AllVGPR32s = ST.getRegisterInfo()->getAllVGPR32(MF); - for (MCPhysReg Reg : AllVGPR32s) { - if (MRI.isAllocatable(Reg) && !MRI.isPhysRegUsed(Reg)) { - LowestAvailableVGPR = Reg; - break; - } - } + const SIRegisterInfo *TRI = ST.getRegisterInfo(); + Register LowestAvailableVGPR = + TRI->findUnusedRegister(MF.getRegInfo(), &AMDGPU::VGPR_32RegClass, MF); + if (!LowestAvailableVGPR) + LowestAvailableVGPR = PreReservedVGPR; const MCPhysReg *CSRegs = MF.getRegInfo().getCalleeSavedRegs(); + MachineFrameInfo &FrameInfo = MF.getFrameInfo(); Optional FI; // Check if we are reserving a CSR. Create a stack object for a possible spill // in the function prologue. diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.h b/llvm/lib/Target/AMDGPU/SIRegisterInfo.h --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.h +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.h @@ -326,10 +326,6 @@ /// of the subtarget. ArrayRef getAllSGPR32(const MachineFunction &MF) const; - /// Return all VGPR32 which satisfy the waves per execution unit requirement - /// of the subtarget. - ArrayRef getAllVGPR32(const MachineFunction &MF) const; - private: void buildSpillLoadStore(MachineBasicBlock::iterator MI, unsigned LoadStoreOp, diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp @@ -1989,8 +1989,3 @@ SIRegisterInfo::getAllSGPR32(const MachineFunction &MF) const { return makeArrayRef(AMDGPU::SGPR_32RegClass.begin(), ST.getMaxNumSGPRs(MF)); } - -ArrayRef -SIRegisterInfo::getAllVGPR32(const MachineFunction &MF) const { - return makeArrayRef(AMDGPU::VGPR_32RegClass.begin(), ST.getMaxNumVGPRs(MF)); -}