Skip to content

Commit ebbd8d5

Browse files
committed
[LLVM][AMDGPU] add new sched strat
1 parent 7f6b54a commit ebbd8d5

File tree

5 files changed

+58
-3
lines changed

5 files changed

+58
-3
lines changed

llvm/lib/IR/LegacyPassManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ static cl::opt<enum PassDebugLevel> PassDebugging(
5555
clEnumVal(Arguments, "print pass arguments to pass to 'opt'"),
5656
clEnumVal(Structure, "print pass structure before run()"),
5757
clEnumVal(Executions, "print pass name before it is executed"),
58-
clEnumVal(Details, "print pass details when it is executed")));
58+
clEnumVal(Details, "print pass details when it is executed")), cl::init(Disabled));
5959

6060
/// isPassDebuggingExecutionsOrMore - Return true if -debug-pass=Executions
6161
/// or higher is specified.

llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,7 @@ class MaxsOpt final : public IGLPStrategy {
736736

737737
MaxsOpt(ScheduleDAGInstrs *DAG, const SIInstrInfo *TII)
738738
: IGLPStrategy(DAG, TII) {
739-
IsBottomUp = true;
739+
IsBottomUp = false;
740740
}
741741
};
742742

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,7 @@ createGCNMaxOccupancyMachineScheduler(MachineSchedContext *C) {
580580
const GCNSubtarget &ST = C->MF->getSubtarget<GCNSubtarget>();
581581
ScheduleDAGMILive *DAG =
582582
new GCNScheduleDAGMILive(C, std::make_unique<GCNMaxOccupancySchedStrategy>(C));
583+
// DAG->addMutation(createMaxsMaxsUnpackPackedF32OpsDAGMutation(*DAG));
583584
DAG->addMutation(createLoadClusterDAGMutation(DAG->TII, DAG->TRI));
584585
if (ST.shouldClusterStores())
585586
DAG->addMutation(createStoreClusterDAGMutation(DAG->TII, DAG->TRI));

llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,7 @@ GCNMaxOccupancySchedStrategy::GCNMaxOccupancySchedStrategy(
520520
const MachineSchedContext *C, bool IsLegacyScheduler)
521521
: GCNSchedStrategy(C) {
522522
SchedStages.push_back(GCNSchedStageID::OccInitialSchedule);
523+
SchedStages.push_back(GCNSchedStageID::MaxsUnpackPackedF32OpsSchedule);
523524
SchedStages.push_back(GCNSchedStageID::UnclusteredHighRPReschedule);
524525
SchedStages.push_back(GCNSchedStageID::ClusteredLowOccupancyReschedule);
525526
SchedStages.push_back(GCNSchedStageID::PreRARematerialize);
@@ -783,6 +784,9 @@ GCNScheduleDAGMILive::createSchedStage(GCNSchedStageID SchedStageID) {
783784
case GCNSchedStageID::MemoryClauseInitialSchedule:
784785
return std::make_unique<MemoryClauseInitialScheduleStage>(SchedStageID,
785786
*this);
787+
case GCNSchedStageID::MaxsUnpackPackedF32OpsSchedule:
788+
return std::make_unique<MaxsUnpackPackedF32OpsScheduleStage>(SchedStageID,
789+
*this);
786790
}
787791

788792
llvm_unreachable("Unknown SchedStageID.");
@@ -1130,6 +1134,31 @@ void UnclusteredHighRPStage::finalizeGCNSchedStage() {
11301134
GCNSchedStage::finalizeGCNSchedStage();
11311135
}
11321136

1137+
struct MaxsUnpackPackedF32OpsDAGMutation : ScheduleDAGMutation {
1138+
GCNScheduleDAGMILive &DAG;
1139+
1140+
MaxsUnpackPackedF32OpsDAGMutation(GCNScheduleDAGMILive &DAG) : DAG(DAG) {}
1141+
1142+
void apply(ScheduleDAGInstrs *DAG) override {
1143+
const TargetInstrInfo &TII = *DAG->TII;
1144+
const GCNSubtarget &ST = DAG->MF.getSubtarget<GCNSubtarget>();
1145+
LLVM_DEBUG(dbgs() << "Completed MaxsUnpackPackedF32OpsDAGMutation\n");
1146+
}
1147+
};
1148+
1149+
namespace llvm {
1150+
std::unique_ptr<ScheduleDAGMutation>
1151+
createMaxsUnpackPackedF32OpsDAGMutation(GCNScheduleDAGMILive &DAG) {
1152+
return std::make_unique<MaxsUnpackPackedF32OpsDAGMutation>(DAG);
1153+
}
1154+
1155+
std::unique_ptr<ScheduleDAGMutation>
1156+
createMaxsUnpackPackedF32OpsDAGMutation(ScheduleDAGMILive &DAG) {
1157+
return std::make_unique<MaxsUnpackPackedF32OpsDAGMutation>(reinterpret_cast<GCNScheduleDAGMILive &>(DAG));
1158+
}
1159+
1160+
}
1161+
11331162
bool GCNSchedStage::initGCNRegion() {
11341163
// Check whether this new region is also a new block.
11351164
if (DAG.RegionBegin->getParent() != CurrentMBB)
@@ -1189,6 +1218,11 @@ bool GCNSchedStage::initGCNRegion() {
11891218
: AMDGPU::SchedulingPhase::PreRAReentry));
11901219
}
11911220

1221+
if (StageID == GCNSchedStageID::MaxsUnpackPackedF32OpsSchedule) {
1222+
DAG.addMutation(createMaxsUnpackPackedF32OpsDAGMutation(DAG));
1223+
return true;
1224+
}
1225+
11921226
return true;
11931227
}
11941228

@@ -1548,6 +1582,11 @@ bool MemoryClauseInitialScheduleStage::shouldRevertScheduling(
15481582
return mayCauseSpilling(WavesAfter);
15491583
}
15501584

1585+
bool MaxsUnpackPackedF32OpsScheduleStage::shouldRevertScheduling(
1586+
unsigned WavesAfter) {
1587+
return false;
1588+
}
1589+
15511590
bool GCNSchedStage::mayCauseSpilling(unsigned WavesAfter) {
15521591
if (WavesAfter <= MFI.getMinWavesPerEU() && isRegionWithExcessRP() &&
15531592
!PressureAfter.less(MF, PressureBefore)) {

llvm/lib/Target/AMDGPU/GCNSchedStrategy.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ enum class GCNSchedStageID : unsigned {
3030
ClusteredLowOccupancyReschedule = 2,
3131
PreRARematerialize = 3,
3232
ILPInitialSchedule = 4,
33-
MemoryClauseInitialSchedule = 5
33+
MemoryClauseInitialSchedule = 5,
34+
MaxsUnpackPackedF32OpsSchedule = 6
3435
};
3536

3637
#ifndef NDEBUG
@@ -490,6 +491,20 @@ class MemoryClauseInitialScheduleStage : public GCNSchedStage {
490491
: GCNSchedStage(StageID, DAG) {}
491492
};
492493

494+
class MaxsUnpackPackedF32OpsScheduleStage : public GCNSchedStage {
495+
public:
496+
bool shouldRevertScheduling(unsigned WavesAfter) override;
497+
498+
MaxsUnpackPackedF32OpsScheduleStage(GCNSchedStageID StageID,
499+
GCNScheduleDAGMILive &DAG)
500+
: GCNSchedStage(StageID, DAG) {}
501+
};
502+
503+
std::unique_ptr<ScheduleDAGMutation>
504+
createMaxsMaxsUnpackPackedF32OpsDAGMutation(GCNScheduleDAGMILive &DAG);
505+
std::unique_ptr<ScheduleDAGMutation>
506+
createMaxsMaxsUnpackPackedF32OpsDAGMutation(ScheduleDAGMILive &DAG);
507+
493508
class GCNPostScheduleDAGMILive final : public ScheduleDAGMI {
494509
private:
495510
std::vector<std::unique_ptr<ScheduleDAGMutation>> SavedMutations;

0 commit comments

Comments
 (0)