diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2016-07-28 14:30:43 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2016-07-28 14:30:43 +0000 |
commit | 19f430109903ad56a0689de25f42295e02f9543c (patch) | |
tree | e3867e712ebc8e3a9baae3db9fefbac651fbb8b5 /llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp | |
parent | db5f02b1c48d091d0faec9db5600baacf78a843e (diff) | |
download | bcm5719-llvm-19f430109903ad56a0689de25f42295e02f9543c.tar.gz bcm5719-llvm-19f430109903ad56a0689de25f42295e02f9543c.zip |
AMDGPU/SI: Don't use reserved VGPRs for SGPR spilling
Summary:
We were using reserved VGPRs for SGPR spilling and this was causing
some programs with a workgroup size of 1024 to use more than 64
registers, which is illegal.
Reviewers: arsenm, mareko, nhaehnle
Subscribers: nhaehnle, arsenm, llvm-commits, kzhuravl
Differential Revision: https://reviews.llvm.org/D22032
llvm-svn: 276980
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp index f5c3c623c9e..ff26e0f9fcf 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp @@ -958,10 +958,13 @@ unsigned SIRegisterInfo::getPreloadedValue(const MachineFunction &MF, /// \brief Returns a register that is not used at any point in the function. /// If all registers are used, then this function will return // AMDGPU::NoRegister. -unsigned SIRegisterInfo::findUnusedRegister(const MachineRegisterInfo &MRI, - const TargetRegisterClass *RC) const { +unsigned +SIRegisterInfo::findUnusedRegister(const MachineRegisterInfo &MRI, + const TargetRegisterClass *RC, + const MachineFunction &MF) const { + for (unsigned Reg : *RC) - if (!MRI.isPhysRegUsed(Reg)) + if (MRI.isAllocatable(Reg) && !MRI.isPhysRegUsed(Reg)) return Reg; return AMDGPU::NoRegister; } |