@@ -2348,6 +2348,8 @@ class IGroupLPDAGMutation : public ScheduleDAGMutation {
23482348
23492349 ScheduleDAGMI *DAG;
23502350
2351+ std::vector<std::unique_ptr<ScheduleDAGMutation>> *SavedMutations;
2352+
23512353 // Organize lists of SchedGroups by their SyncID. SchedGroups /
23522354 // SCHED_GROUP_BARRIERs with different SyncIDs will have no edges added
23532355 // between then.
@@ -2390,7 +2392,10 @@ class IGroupLPDAGMutation : public ScheduleDAGMutation {
23902392 AMDGPU::SchedulingPhase Phase = AMDGPU::SchedulingPhase::Initial;
23912393
23922394 IGroupLPDAGMutation () = default ;
2393- IGroupLPDAGMutation (AMDGPU::SchedulingPhase Phase) : Phase(Phase) {}
2395+ IGroupLPDAGMutation (
2396+ AMDGPU::SchedulingPhase Phase,
2397+ std::vector<std::unique_ptr<ScheduleDAGMutation>> *SavedMutations)
2398+ : SavedMutations(SavedMutations), Phase(Phase) {}
23942399};
23952400
23962401unsigned SchedGroup::NumSchedGroups = 0 ;
@@ -2607,6 +2612,13 @@ void IGroupLPDAGMutation::apply(ScheduleDAGInstrs *DAGInstrs) {
26072612 PS.solve ();
26082613 return ;
26092614 }
2615+
2616+ if (!SavedMutations)
2617+ return ;
2618+
2619+ // We did not apply a mutation, fall back to SavedMutations
2620+ for (auto &m : *SavedMutations)
2621+ m->apply (DAG);
26102622}
26112623
26122624void IGroupLPDAGMutation::addSchedBarrierEdges (SUnit &SchedBarrier) {
@@ -2703,9 +2715,10 @@ namespace llvm {
27032715// / same scheduling region (e.g. pre and post-RA scheduling / multiple
27042716// / scheduling "phases"), we can reenter this mutation framework more than once
27052717// / for a given region.
2706- std::unique_ptr<ScheduleDAGMutation>
2707- createIGroupLPDAGMutation (AMDGPU::SchedulingPhase Phase) {
2708- return std::make_unique<IGroupLPDAGMutation>(Phase);
2718+ std::unique_ptr<ScheduleDAGMutation> createIGroupLPDAGMutation (
2719+ AMDGPU::SchedulingPhase Phase,
2720+ std::vector<std::unique_ptr<ScheduleDAGMutation>> *SavedMutations) {
2721+ return std::make_unique<IGroupLPDAGMutation>(Phase, SavedMutations);
27092722}
27102723
27112724} // end namespace llvm
0 commit comments