diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2020-01-17 20:45:01 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2020-01-17 20:45:01 +0000 |
| commit | 706b4fc47bbc608932d3b491ae19a3b9cde9497b (patch) | |
| tree | 4adf86a776049cbf7f69a1929c4babcbbef925eb /llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp | |
| parent | 7cc9cf2bf09f069cb2dd947ead05d0b54301fb71 (diff) | |
Notes
Diffstat (limited to 'llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp index 973491a70d3c..e109eed5f607 100644 --- a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp +++ b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp @@ -16,6 +16,7 @@ #include "SIInstrInfo.h" #include "SIMachineFunctionInfo.h" #include "SIRegisterInfo.h" +#include "Utils/AMDGPUBaseInfo.h" #include "llvm/CodeGen/RegisterClassInfo.h" #include "llvm/Support/MathExtras.h" @@ -389,8 +390,16 @@ void GCNScheduleDAGMILive::schedule() { } if (WavesAfter >= MinOccupancy) { - Pressure[RegionIdx] = PressureAfter; - return; + unsigned TotalVGPRs = AMDGPU::IsaInfo::getAddressableNumVGPRs(&ST); + unsigned TotalSGPRs = AMDGPU::IsaInfo::getAddressableNumSGPRs(&ST); + if (WavesAfter > MFI.getMinWavesPerEU() || + PressureAfter.less(ST, PressureBefore) || + (TotalVGPRs >= PressureAfter.getVGPRNum() && + TotalSGPRs >= PressureAfter.getSGPRNum())) { + Pressure[RegionIdx] = PressureAfter; + return; + } + LLVM_DEBUG(dbgs() << "New pressure will result in more spilling.\n"); } LLVM_DEBUG(dbgs() << "Attempting to revert scheduling.\n"); |
