Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 4 additions & 17 deletions llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2337,8 +2337,6 @@ class IGroupLPDAGMutation : public ScheduleDAGMutation {

ScheduleDAGMI *DAG;

std::vector<std::unique_ptr<ScheduleDAGMutation>> *SavedMutations;

// Organize lists of SchedGroups by their SyncID. SchedGroups /
// SCHED_GROUP_BARRIERs with different SyncIDs will have no edges added
// between then.
Expand Down Expand Up @@ -2381,10 +2379,7 @@ class IGroupLPDAGMutation : public ScheduleDAGMutation {
AMDGPU::SchedulingPhase Phase = AMDGPU::SchedulingPhase::Initial;

IGroupLPDAGMutation() = default;
IGroupLPDAGMutation(
AMDGPU::SchedulingPhase Phase,
std::vector<std::unique_ptr<ScheduleDAGMutation>> *SavedMutations)
: SavedMutations(SavedMutations), Phase(Phase) {}
IGroupLPDAGMutation(AMDGPU::SchedulingPhase Phase) : Phase(Phase) {}
};

unsigned SchedGroup::NumSchedGroups = 0;
Expand Down Expand Up @@ -2602,13 +2597,6 @@ void IGroupLPDAGMutation::apply(ScheduleDAGInstrs *DAGInstrs) {
PS.solve();
return;
}

if (!SavedMutations)
return;

// We did not apply a mutation, fall back to SavedMutations
for (auto &m : *SavedMutations)
m->apply(DAG);
}

void IGroupLPDAGMutation::addSchedBarrierEdges(SUnit &SchedBarrier) {
Expand Down Expand Up @@ -2707,10 +2695,9 @@ namespace llvm {
/// same scheduling region (e.g. pre and post-RA scheduling / multiple
/// scheduling "phases"), we can reenter this mutation framework more than once
/// for a given region.
std::unique_ptr<ScheduleDAGMutation> createIGroupLPDAGMutation(
AMDGPU::SchedulingPhase Phase,
std::vector<std::unique_ptr<ScheduleDAGMutation>> *SavedMutations) {
return std::make_unique<IGroupLPDAGMutation>(Phase, SavedMutations);
std::unique_ptr<ScheduleDAGMutation>
createIGroupLPDAGMutation(AMDGPU::SchedulingPhase Phase) {
return std::make_unique<IGroupLPDAGMutation>(Phase);
}

} // end namespace llvm
5 changes: 2 additions & 3 deletions llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@ namespace AMDGPU {
enum class SchedulingPhase { Initial, PreRAReentry, PostRA };
} // namespace AMDGPU

std::unique_ptr<ScheduleDAGMutation> createIGroupLPDAGMutation(
AMDGPU::SchedulingPhase Phase,
std::vector<std::unique_ptr<ScheduleDAGMutation>> *SavedMutations);
std::unique_ptr<ScheduleDAGMutation>
createIGroupLPDAGMutation(AMDGPU::SchedulingPhase Phase);

} // namespace llvm

Expand Down
8 changes: 3 additions & 5 deletions llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,7 @@ createGCNMaxOccupancyMachineScheduler(MachineSchedContext *C) {
DAG->addMutation(createLoadClusterDAGMutation(DAG->TII, DAG->TRI));
if (ST.shouldClusterStores())
DAG->addMutation(createStoreClusterDAGMutation(DAG->TII, DAG->TRI));
DAG->addMutation(
createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::Initial, nullptr));
DAG->addMutation(createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::Initial));
DAG->addMutation(createAMDGPUMacroFusionDAGMutation());
DAG->addMutation(createAMDGPUExportClusteringDAGMutation());
return DAG;
Expand All @@ -472,8 +471,7 @@ static ScheduleDAGInstrs *
createGCNMaxILPMachineScheduler(MachineSchedContext *C) {
ScheduleDAGMILive *DAG =
new GCNScheduleDAGMILive(C, std::make_unique<GCNMaxILPSchedStrategy>(C));
DAG->addMutation(
createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::Initial, nullptr));
DAG->addMutation(createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::Initial));
return DAG;
}

Expand Down Expand Up @@ -937,7 +935,7 @@ class GCNPassConfig final : public AMDGPUPassConfig {
DAG->addMutation(createStoreClusterDAGMutation(DAG->TII, DAG->TRI));
DAG->addMutation(ST.createFillMFMAShadowMutation(DAG->TII));
DAG->addMutation(
createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::PostRA, nullptr));
createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::PostRA));
if (isPassEnabled(EnableVOPD, CodeGenOptLevel::Less))
DAG->addMutation(createVOPDPairingMutation());
return DAG;
Expand Down
10 changes: 4 additions & 6 deletions llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -713,8 +713,8 @@ bool UnclusteredHighRPStage::initGCNSchedStage() {
return false;

SavedMutations.swap(DAG.Mutations);
DAG.addMutation(createIGroupLPDAGMutation(
AMDGPU::SchedulingPhase::PreRAReentry, nullptr));
DAG.addMutation(
createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::PreRAReentry));

InitialOccupancy = DAG.MinOccupancy;
// Aggressivly try to reduce register pressure in the unclustered high RP
Expand Down Expand Up @@ -858,8 +858,7 @@ bool GCNSchedStage::initGCNRegion() {
StageID == GCNSchedStageID::ILPInitialSchedule;
DAG.addMutation(createIGroupLPDAGMutation(
IsInitialStage ? AMDGPU::SchedulingPhase::Initial
: AMDGPU::SchedulingPhase::PreRAReentry,
&SavedMutations));
: AMDGPU::SchedulingPhase::PreRAReentry));
}

return true;
Expand Down Expand Up @@ -1573,8 +1572,7 @@ void GCNPostScheduleDAGMILive::schedule() {
if (HasIGLPInstrs) {
SavedMutations.clear();
SavedMutations.swap(Mutations);
addMutation(createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::PostRA,
&SavedMutations));
addMutation(createIGroupLPDAGMutation(AMDGPU::SchedulingPhase::PostRA));
}

ScheduleDAGMI::schedule();
Expand Down
15 changes: 15 additions & 0 deletions llvm/test/CodeGen/AMDGPU/iglp.opt.reentry.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
; RUN: llc -mtriple=amdgcn -mcpu=gfx908 -O3 < %s | FileCheck %s

; Test should not result in build failure
; CHECK-LABEL: shouldNotReApply

define amdgpu_kernel void @shouldNotReApply() {
entry:
tail call void @llvm.amdgcn.sched.barrier(i32 0)
store <4 x i32> zeroinitializer, ptr addrspace(3) null, align 2147483648
tail call void @llvm.amdgcn.sched.group.barrier(i32 0, i32 0, i32 0)
tail call void @llvm.amdgcn.sched.barrier(i32 0)
store i32 0, ptr addrspace(5) null, align 2147483648
tail call void @llvm.amdgcn.sched.group.barrier(i32 0, i32 0, i32 0)
ret void
}