Skip to content

Commit 1f24d72

Browse files
committed
Cleanup signature for getOccupancy
Change-Id: I0b74f6ee1d93bd5e6fc3e285c0c6e91a8090d28e
1 parent 99a5402 commit 1f24d72

File tree

5 files changed

+31
-62
lines changed

5 files changed

+31
-62
lines changed

llvm/lib/Target/AMDGPU/GCNIterativeScheduler.cpp

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -447,11 +447,7 @@ void GCNIterativeScheduler::sortRegionsByPressure(unsigned TargetOcc) {
447447
// BestSchedules aren't deleted on fail.
448448
unsigned GCNIterativeScheduler::tryMaximizeOccupancy(unsigned TargetOcc) {
449449
// TODO: assert Regions are sorted descending by pressure
450-
const auto &ST = MF.getSubtarget<GCNSubtarget>();
451-
const unsigned DynamicVGPRBlockSize =
452-
MF.getInfo<SIMachineFunctionInfo>()->getDynamicVGPRBlockSize();
453-
const auto Occ =
454-
Regions.front()->MaxPressure.getOccupancy(ST, DynamicVGPRBlockSize, MF);
450+
const auto Occ = Regions.front()->MaxPressure.getOccupancy(MF);
455451
LLVM_DEBUG(dbgs() << "Trying to improve occupancy, target = " << TargetOcc
456452
<< ", current = " << Occ << '\n');
457453

@@ -460,7 +456,7 @@ unsigned GCNIterativeScheduler::tryMaximizeOccupancy(unsigned TargetOcc) {
460456
// Always build the DAG to add mutations
461457
BuildDAG DAG(*R, *this);
462458

463-
if (R->MaxPressure.getOccupancy(ST, DynamicVGPRBlockSize, MF) >= NewOcc)
459+
if (R->MaxPressure.getOccupancy(MF) >= NewOcc)
464460
continue;
465461

466462
LLVM_DEBUG(printRegion(dbgs(), R->Begin, R->End, LIS, 3);
@@ -471,7 +467,7 @@ unsigned GCNIterativeScheduler::tryMaximizeOccupancy(unsigned TargetOcc) {
471467
LLVM_DEBUG(dbgs() << "Occupancy improvement attempt:\n";
472468
printSchedRP(dbgs(), R->MaxPressure, MaxRP));
473469

474-
NewOcc = std::min(NewOcc, MaxRP.getOccupancy(ST, DynamicVGPRBlockSize, MF));
470+
NewOcc = std::min(NewOcc, MaxRP.getOccupancy(MF));
475471
if (NewOcc <= Occ)
476472
break;
477473

@@ -489,14 +485,11 @@ unsigned GCNIterativeScheduler::tryMaximizeOccupancy(unsigned TargetOcc) {
489485

490486
void GCNIterativeScheduler::scheduleLegacyMaxOccupancy(
491487
bool TryMaximizeOccupancy) {
492-
const auto &ST = MF.getSubtarget<GCNSubtarget>();
493488
SIMachineFunctionInfo *MFI = MF.getInfo<SIMachineFunctionInfo>();
494489
auto TgtOcc = MFI->getMinAllowedOccupancy();
495-
unsigned DynamicVGPRBlockSize = MFI->getDynamicVGPRBlockSize();
496490

497491
sortRegionsByPressure(TgtOcc);
498-
auto Occ =
499-
Regions.front()->MaxPressure.getOccupancy(ST, DynamicVGPRBlockSize, MF);
492+
auto Occ = Regions.front()->MaxPressure.getOccupancy(MF);
500493

501494
bool IsReentry = false;
502495
if (TryMaximizeOccupancy && Occ < TgtOcc) {
@@ -527,22 +520,19 @@ void GCNIterativeScheduler::scheduleLegacyMaxOccupancy(
527520
const auto RP = getRegionPressure(*R);
528521
LLVM_DEBUG(printSchedRP(dbgs(), R->MaxPressure, RP));
529522

530-
if (RP.getOccupancy(ST, DynamicVGPRBlockSize, MF) < TgtOcc) {
523+
if (RP.getOccupancy(MF) < TgtOcc) {
531524
LLVM_DEBUG(dbgs() << "Didn't fit into target occupancy O" << TgtOcc);
532525
if (R->BestSchedule.get() &&
533-
R->BestSchedule->MaxPressure.getOccupancy(ST, DynamicVGPRBlockSize,
534-
MF) >= TgtOcc) {
526+
R->BestSchedule->MaxPressure.getOccupancy(MF) >= TgtOcc) {
535527
LLVM_DEBUG(dbgs() << ", scheduling minimal register\n");
536528
scheduleBest(*R);
537529
} else {
538530
LLVM_DEBUG(dbgs() << ", restoring\n");
539531
Ovr.restoreOrder();
540-
assert(R->MaxPressure.getOccupancy(ST, DynamicVGPRBlockSize, MF) >=
541-
TgtOcc);
532+
assert(R->MaxPressure.getOccupancy(MF) >= TgtOcc);
542533
}
543534
}
544-
FinalOccupancy = std::min(FinalOccupancy,
545-
RP.getOccupancy(ST, DynamicVGPRBlockSize, MF));
535+
FinalOccupancy = std::min(FinalOccupancy, RP.getOccupancy(MF));
546536
}
547537
}
548538
MFI->limitOccupancy(FinalOccupancy);
@@ -585,14 +575,11 @@ void GCNIterativeScheduler::scheduleMinReg(bool force) {
585575

586576
void GCNIterativeScheduler::scheduleILP(
587577
bool TryMaximizeOccupancy) {
588-
const auto &ST = MF.getSubtarget<GCNSubtarget>();
589578
SIMachineFunctionInfo *MFI = MF.getInfo<SIMachineFunctionInfo>();
590579
auto TgtOcc = MFI->getMinAllowedOccupancy();
591-
unsigned DynamicVGPRBlockSize = MFI->getDynamicVGPRBlockSize();
592580

593581
sortRegionsByPressure(TgtOcc);
594-
auto Occ =
595-
Regions.front()->MaxPressure.getOccupancy(ST, DynamicVGPRBlockSize, MF);
582+
auto Occ = Regions.front()->MaxPressure.getOccupancy(MF);
596583

597584
bool IsReentry = false;
598585
if (TryMaximizeOccupancy && Occ < TgtOcc) {
@@ -613,19 +600,17 @@ void GCNIterativeScheduler::scheduleILP(
613600
const auto RP = getSchedulePressure(*R, ILPSchedule);
614601
LLVM_DEBUG(printSchedRP(dbgs(), R->MaxPressure, RP));
615602

616-
if (RP.getOccupancy(ST, DynamicVGPRBlockSize, MF) < TgtOcc) {
603+
if (RP.getOccupancy(MF) < TgtOcc) {
617604
LLVM_DEBUG(dbgs() << "Didn't fit into target occupancy O" << TgtOcc);
618605
if (R->BestSchedule.get() &&
619-
R->BestSchedule->MaxPressure.getOccupancy(ST, DynamicVGPRBlockSize,
620-
MF) >= TgtOcc) {
606+
R->BestSchedule->MaxPressure.getOccupancy(MF) >= TgtOcc) {
621607
LLVM_DEBUG(dbgs() << ", scheduling minimal register\n");
622608
scheduleBest(*R);
623609
}
624610
} else {
625611
scheduleRegion(*R, ILPSchedule, RP);
626612
LLVM_DEBUG(printSchedResult(dbgs(), R, RP));
627-
FinalOccupancy = std::min(FinalOccupancy,
628-
RP.getOccupancy(ST, DynamicVGPRBlockSize, MF));
613+
FinalOccupancy = std::min(FinalOccupancy, RP.getOccupancy(MF));
629614
}
630615
}
631616
MFI->limitOccupancy(FinalOccupancy);

llvm/lib/Target/AMDGPU/GCNRegPressure.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ Printable llvm::print(const GCNRegPressure &RP, const GCNSubtarget *ST,
267267
OS << ", LVGPR WT: " << RP.getVGPRTuplesWeight(ArchVGPRThreshold)
268268
<< ", LSGPR WT: " << RP.getSGPRTuplesWeight();
269269
if (ST)
270-
OS << " -> Occ: " << RP.getOccupancy(*ST, DynamicVGPRBlockSize, *MF);
270+
OS << " -> Occ: " << RP.getOccupancy(*MF);
271271
OS << '\n';
272272
});
273273
}

llvm/lib/Target/AMDGPU/GCNRegPressure.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define LLVM_LIB_TARGET_AMDGPU_GCNREGPRESSURE_H
1919

2020
#include "GCNSubtarget.h"
21+
#include "SIMachineFunctionInfo.h"
2122
#include "llvm/CodeGen/LiveIntervals.h"
2223
#include "llvm/CodeGen/RegisterPressure.h"
2324
#include <algorithm>
@@ -108,8 +109,11 @@ struct GCNRegPressure {
108109
}
109110
unsigned getSGPRTuplesWeight() const { return Value[TOTAL_KINDS + SGPR]; }
110111

111-
unsigned getOccupancy(const GCNSubtarget &ST, unsigned DynamicVGPRBlockSize,
112-
const MachineFunction &MF) const {
112+
unsigned getOccupancy(const MachineFunction &MF) const {
113+
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
114+
unsigned DynamicVGPRBlockSize =
115+
MF.getInfo<SIMachineFunctionInfo>()->getDynamicVGPRBlockSize();
116+
113117
return std::min(ST.getOccupancyWithNumSGPRs(getSGPRNum()),
114118
ST.getOccupancyWithNumVGPRs(
115119
getVGPRNum(ST.hasGFX90AInsts(),
@@ -122,11 +126,9 @@ struct GCNRegPressure {
122126
LaneBitmask NewMask,
123127
const MachineRegisterInfo &MRI);
124128

125-
bool higherOccupancy(const GCNSubtarget &ST, const GCNRegPressure &O,
126-
unsigned DynamicVGPRBlockSize,
129+
bool higherOccupancy(const GCNRegPressure &O,
127130
const MachineFunction &MF) const {
128-
return getOccupancy(ST, DynamicVGPRBlockSize, MF) >
129-
O.getOccupancy(ST, DynamicVGPRBlockSize, MF);
131+
return getOccupancy(MF) > O.getOccupancy(MF);
130132
}
131133

132134
/// Compares \p this GCNRegpressure to \p O, returning true if \p this is

llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,9 +1146,7 @@ void UnclusteredHighRPStage::finalizeGCNSchedStage() {
11461146
if (DAG.MinOccupancy > InitialOccupancy) {
11471147
for (unsigned IDX = 0; IDX < DAG.Pressure.size(); ++IDX)
11481148
DAG.RegionsWithMinOcc[IDX] =
1149-
DAG.Pressure[IDX].getOccupancy(DAG.ST,
1150-
DAG.MFI.getDynamicVGPRBlockSize(),
1151-
DAG.MF) == DAG.MinOccupancy;
1149+
DAG.Pressure[IDX].getOccupancy(DAG.MF) == DAG.MinOccupancy;
11521150

11531151
LLVM_DEBUG(dbgs() << StageID
11541152
<< " stage successfully increased occupancy to "
@@ -1288,15 +1286,13 @@ void GCNSchedStage::checkScheduling() {
12881286
<< print(PressureAfter, &ST, 0, &MF));
12891287
LLVM_DEBUG(dbgs() << "Region: " << RegionIdx << ".\n");
12901288

1291-
unsigned DynamicVGPRBlockSize = DAG.MFI.getDynamicVGPRBlockSize();
12921289
unsigned ArchVGPRThreshold = ST.getArchVGPRAllocationThreshold(MF);
12931290
if (PressureAfter.getSGPRNum() <= S.SGPRCriticalLimit &&
12941291
PressureAfter.getVGPRNum(ST.hasGFX90AInsts(), ArchVGPRThreshold) <=
12951292
S.VGPRCriticalLimit) {
12961293
DAG.Pressure[RegionIdx] = PressureAfter;
12971294
DAG.RegionsWithMinOcc[RegionIdx] =
1298-
PressureAfter.getOccupancy(ST, DynamicVGPRBlockSize, DAG.MF) ==
1299-
DAG.MinOccupancy;
1295+
PressureAfter.getOccupancy(DAG.MF) == DAG.MinOccupancy;
13001296

13011297
// Early out if we have achieved the occupancy target.
13021298
LLVM_DEBUG(dbgs() << "Pressure in desired limits, done.\n");
@@ -1306,11 +1302,9 @@ void GCNSchedStage::checkScheduling() {
13061302
unsigned TargetOccupancy = std::min(
13071303
S.getTargetOccupancy(), ST.getOccupancyWithWorkGroupSizes(MF).second);
13081304
unsigned WavesAfter =
1309-
std::min(TargetOccupancy,
1310-
PressureAfter.getOccupancy(ST, DynamicVGPRBlockSize, DAG.MF));
1305+
std::min(TargetOccupancy, PressureAfter.getOccupancy(DAG.MF));
13111306
unsigned WavesBefore =
1312-
std::min(TargetOccupancy,
1313-
PressureBefore.getOccupancy(ST, DynamicVGPRBlockSize, DAG.MF));
1307+
std::min(TargetOccupancy, PressureBefore.getOccupancy(DAG.MF));
13141308
LLVM_DEBUG(dbgs() << "Occupancy before scheduling: " << WavesBefore
13151309
<< ", after " << WavesAfter << ".\n");
13161310

@@ -1360,8 +1354,7 @@ void GCNSchedStage::checkScheduling() {
13601354
} else {
13611355
DAG.Pressure[RegionIdx] = PressureAfter;
13621356
DAG.RegionsWithMinOcc[RegionIdx] =
1363-
PressureAfter.getOccupancy(ST, DynamicVGPRBlockSize, DAG.MF) ==
1364-
DAG.MinOccupancy;
1357+
PressureAfter.getOccupancy(DAG.MF) == DAG.MinOccupancy;
13651358
}
13661359
}
13671360

@@ -1515,8 +1508,7 @@ bool OccInitialScheduleStage::shouldRevertScheduling(unsigned WavesAfter) {
15151508
bool UnclusteredHighRPStage::shouldRevertScheduling(unsigned WavesAfter) {
15161509
// If RP is not reduced in the unclustered reschedule stage, revert to the
15171510
// old schedule.
1518-
if ((WavesAfter <= PressureBefore.getOccupancy(
1519-
ST, DAG.MFI.getDynamicVGPRBlockSize(), DAG.MF) &&
1511+
if ((WavesAfter <= PressureBefore.getOccupancy(DAG.MF) &&
15201512
mayCauseSpilling(WavesAfter)) ||
15211513
GCNSchedStage::shouldRevertScheduling(WavesAfter)) {
15221514
LLVM_DEBUG(dbgs() << "Unclustered reschedule did not help.\n");
@@ -1539,9 +1531,7 @@ bool UnclusteredHighRPStage::shouldRevertScheduling(unsigned WavesAfter) {
15391531
unsigned OldMetric = MBefore.getMetric();
15401532
unsigned NewMetric = MAfter.getMetric();
15411533
unsigned WavesBefore =
1542-
std::min(S.getTargetOccupancy(),
1543-
PressureBefore.getOccupancy(
1544-
ST, DAG.MFI.getDynamicVGPRBlockSize(), DAG.MF));
1534+
std::min(S.getTargetOccupancy(), PressureBefore.getOccupancy(DAG.MF));
15451535
unsigned Profit =
15461536
((WavesAfter * ScheduleMetrics::ScaleFactor) / WavesBefore *
15471537
((OldMetric + ScheduleMetricBias) * ScheduleMetrics::ScaleFactor) /
@@ -1595,8 +1585,7 @@ bool GCNSchedStage::mayCauseSpilling(unsigned WavesAfter) {
15951585

15961586
void GCNSchedStage::revertScheduling() {
15971587
DAG.RegionsWithMinOcc[RegionIdx] =
1598-
PressureBefore.getOccupancy(ST, DAG.MFI.getDynamicVGPRBlockSize(),
1599-
DAG.MF) == DAG.MinOccupancy;
1588+
PressureBefore.getOccupancy(DAG.MF) == DAG.MinOccupancy;
16001589
LLVM_DEBUG(dbgs() << "Attempting to revert scheduling.\n");
16011590
DAG.RegionEnd = DAG.RegionBegin;
16021591
int SkippedDebugInstr = 0;
@@ -2033,11 +2022,7 @@ void PreRARematStage::rematerialize() {
20332022
}
20342023
}
20352024
DAG.Pressure[I] = RP;
2036-
AchievedOcc = std::min(
2037-
AchievedOcc,
2038-
RP.getOccupancy(
2039-
ST, MF.getInfo<SIMachineFunctionInfo>()->getDynamicVGPRBlockSize(),
2040-
DAG.MF));
2025+
AchievedOcc = std::min(AchievedOcc, RP.getOccupancy(DAG.MF));
20412026
}
20422027
REMAT_DEBUG(dbgs() << "Achieved occupancy " << AchievedOcc << "\n");
20432028
}

llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,7 @@ bool SIFormMemoryClausesImpl::checkPressure(const MachineInstr &MI,
197197
// pointer becomes dead and could otherwise be reused for destination.
198198
RPT.advanceToNext();
199199
GCNRegPressure MaxPressure = RPT.moveMaxPressure();
200-
unsigned Occupancy = MaxPressure.getOccupancy(
201-
*ST,
202-
MI.getMF()->getInfo<SIMachineFunctionInfo>()->getDynamicVGPRBlockSize(),
203-
*MI.getMF());
200+
unsigned Occupancy = MaxPressure.getOccupancy(*MI.getMF());
204201

205202
// Don't push over half the register budget. We don't want to introduce
206203
// spilling just to form a soft clause.

0 commit comments

Comments
 (0)