diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp index e9afe2a2b11..d2883a8d998 100644 --- a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp +++ b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp @@ -308,9 +308,7 @@ GCNScheduleDAGMILive::GCNScheduleDAGMILive(MachineSchedContext *C, ScheduleDAGMILive(C, std::move(S)), ST(MF.getSubtarget<SISubtarget>()), MFI(*MF.getInfo<SIMachineFunctionInfo>()), - StartingOccupancy(std::min(ST.getOccupancyWithLocalMemSize(MFI.getLDSSize(), - MF.getFunction()), - MFI.getMaxWavesPerEU())), + StartingOccupancy(MFI.getOccupancy()), MinOccupancy(StartingOccupancy), Stage(0), RegionIdx(0) { LLVM_DEBUG(dbgs() << "Starting occupancy is " << StartingOccupancy << ".\n"); @@ -374,16 +372,15 @@ void GCNScheduleDAGMILive::schedule() { unsigned NewOccupancy = std::max(WavesAfter, WavesBefore); // Allow memory bound functions to drop to 4 waves if not limited by an // attribute. - unsigned MinMemBoundWaves = std::max(MFI.getMinWavesPerEU(), 4u); if (WavesAfter < WavesBefore && WavesAfter < MinOccupancy && - WavesAfter >= MinMemBoundWaves && - (MFI.isMemoryBound() || MFI.needsWaveLimiter())) { + WavesAfter >= MFI.getMinAllowedOccupancy()) { LLVM_DEBUG(dbgs() << "Function is memory bound, allow occupancy drop up to " - << MinMemBoundWaves << " waves\n"); + << MFI.getMinAllowedOccupancy() << " waves\n"); NewOccupancy = WavesAfter; } if (NewOccupancy < MinOccupancy) { MinOccupancy = NewOccupancy; + MFI.limitOccupancy(MinOccupancy); LLVM_DEBUG(dbgs() << "Occupancy lowered for the function to " << MinOccupancy << ".\n"); } |