[llvm] [AMDGPU][Scheduler] Make `finalizeGCNRegion` an overridable hook (NFC) (PR #177199)

Lucas Ramirez via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 21 08:50:45 PST 2026


https://github.com/lucas-rami created https://github.com/llvm/llvm-project/pull/177199

This allows individual stages to make decisions after re-scheduling individual regions.

>From ef9597bb85699c45e4f103d525ea81fdd447647c Mon Sep 17 00:00:00 2001
From: Lucas Ramirez <lucas.rami at proton.me>
Date: Mon, 19 Jan 2026 21:22:33 +0000
Subject: [PATCH] [AMDGPU][Scheduler] Make `finalizeGCNRegion` an overridable
 hook (NFC)

This allows individual stages to make decisions after re-scheduling
individual regions.
---
 llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp | 6 ++----
 llvm/lib/Target/AMDGPU/GCNSchedStrategy.h   | 6 +++---
 2 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp
index cabf759762a72..876adddcfbbaa 100644
--- a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp
@@ -145,7 +145,6 @@ void GCNSchedStrategy::initialize(ScheduleDAGMI *DAG) {
   VGPRCriticalLimit -= std::min(VGPRLimitBias + ErrorMargin, VGPRCriticalLimit);
   SGPRExcessLimit -= std::min(SGPRLimitBias + ErrorMargin, SGPRExcessLimit);
   VGPRExcessLimit -= std::min(VGPRLimitBias + ErrorMargin, VGPRExcessLimit);
-
   LLVM_DEBUG(dbgs() << "VGPRCriticalLimit = " << VGPRCriticalLimit
                     << ", VGPRExcessLimit = " << VGPRExcessLimit
                     << ", SGPRCriticalLimit = " << SGPRCriticalLimit
@@ -1163,6 +1162,8 @@ void GCNScheduleDAGMILive::runSchedStages() {
 
       ScheduleDAGMILive::schedule();
       Stage->finalizeGCNRegion();
+      Stage->advanceRegion();
+      exitRegion();
     }
 
     Stage->finalizeGCNSchedStage();
@@ -1473,9 +1474,6 @@ void GCNSchedStage::finalizeGCNRegion() {
   if (DAG.RegionsWithIGLPInstrs[RegionIdx] &&
       StageID != GCNSchedStageID::UnclusteredHighRPReschedule)
     SavedMutations.swap(DAG.Mutations);
-
-  DAG.exitRegion();
-  advanceRegion();
 }
 
 void GCNSchedStage::checkScheduling() {
diff --git a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.h b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.h
index 95a931b9beb2a..6563c8d050ff9 100644
--- a/llvm/lib/Target/AMDGPU/GCNSchedStrategy.h
+++ b/llvm/lib/Target/AMDGPU/GCNSchedStrategy.h
@@ -367,12 +367,12 @@ class GCNSchedStage {
   // be skipped.
   virtual bool initGCNRegion();
 
+  // Finalize state after scheduling a region.
+  virtual void finalizeGCNRegion();
+
   // Track whether a new region is also a new MBB.
   void setupNewBlock();
 
-  // Finalize state after scheudling a region.
-  void finalizeGCNRegion();
-
   // Check result of scheduling.
   void checkScheduling();
 



More information about the llvm-commits mailing list