[llvm] [AMDGPU][NPM] Preserve analyses in AMDGPURewriteAGPRCopyMFMA for NPM (PR #170130)

Prasoon Mishra via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 1 05:08:44 PST 2025


https://github.com/PrasoonMishra created https://github.com/llvm/llvm-project/pull/170130

The pass preserved LiveStacksAnalysis but failed to preserve LiveIntervalsAnalysis, LiveRegMatrixAnalysis, VirtRegMapAnalysis, and SlotIndexesAnalysis under NPM. This caused these analyses to be invalidated and recomputed, leading to incorrect behavior in subsequent passes like VirtRegRewriter.

Fix by explicitly preserving all required analyses in the NPM version, matching the legacy pass manager behavior.

>From 2dced06cd2f0c202bd7485ce373bbbcc49bdfb21 Mon Sep 17 00:00:00 2001
From: vikhegde <vikram.hegde at amd.com>
Date: Mon, 8 Sep 2025 11:25:47 +0530
Subject: [PATCH 1/3] Fixes to be upstreamed - 8

preserve liveIntervals, VirtRegMapAnalysis and LiveRegMatrix analysis for AMDGPURewriteAGPRCopyMFMAPass (as in legacy)
specifically not preserving VirtRegMap causes it to be invalidated and thus VirtRegRewriter has invalid info next in pipeline
---
 llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp b/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
index 89c16dadb4b41..20a1728f86737 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
@@ -659,7 +659,10 @@ AMDGPURewriteAGPRCopyMFMAPass::run(MachineFunction &MF,
   if (!Impl.run(MF))
     return PreservedAnalyses::all();
   auto PA = getMachineFunctionPassPreservedAnalyses();
-  PA.preserveSet<CFGAnalyses>();
-  PA.preserve<LiveStacksAnalysis>();
+  PA.preserveSet<CFGAnalyses>()
+    .preserve<LiveStacksAnalysis>()
+    .preserve<VirtRegMapAnalysis>()
+    .preserve<LiveIntervalsAnalysis>()
+    .preserve<LiveRegMatrixAnalysis>();
   return PA;
 }

>From be7f800f2d155fda10f61dc4d81f5819e516a4c5 Mon Sep 17 00:00:00 2001
From: Prasoon Mishra <Prasoon.Mishra at amd.com>
Date: Wed, 5 Nov 2025 09:07:27 +0000
Subject: [PATCH 2/3] Fixes to be upstreamed - Preserve SlotIndexes in
 AMDGPURewriteAGPRCopyMFMA for NPM

AMDGPURewriteAGPRCopyMFMAPass claimed to preserve LiveIntervalsAnalysis
but did not preserve its dependency, SlotIndexesAnalysis. Under NPM, this
causes LiveIntervals to be invalidated and recomputed. Fix by explicitly
preserving SlotIndexesAnalysis.
---
 llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp b/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
index 20a1728f86737..061c2daebc728 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
@@ -32,6 +32,7 @@
 #include "llvm/CodeGen/LiveStacks.h"
 #include "llvm/CodeGen/MachineFrameInfo.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/SlotIndexes.h"
 #include "llvm/CodeGen/VirtRegMap.h"
 #include "llvm/InitializePasses.h"
 
@@ -662,6 +663,7 @@ AMDGPURewriteAGPRCopyMFMAPass::run(MachineFunction &MF,
   PA.preserveSet<CFGAnalyses>()
     .preserve<LiveStacksAnalysis>()
     .preserve<VirtRegMapAnalysis>()
+    .preserve<SlotIndexesAnalysis>()
     .preserve<LiveIntervalsAnalysis>()
     .preserve<LiveRegMatrixAnalysis>();
   return PA;

>From 899888158e009d552ac792cb87ebfb13ac7ef479 Mon Sep 17 00:00:00 2001
From: Prasoon Mishra <Prasoon.Mishra at amd.com>
Date: Mon, 1 Dec 2025 12:26:08 +0000
Subject: [PATCH 3/3] Apply clang-format.

---
 llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp b/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
index 061c2daebc728..095f23ad22d97 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPURewriteAGPRCopyMFMA.cpp
@@ -661,10 +661,10 @@ AMDGPURewriteAGPRCopyMFMAPass::run(MachineFunction &MF,
     return PreservedAnalyses::all();
   auto PA = getMachineFunctionPassPreservedAnalyses();
   PA.preserveSet<CFGAnalyses>()
-    .preserve<LiveStacksAnalysis>()
-    .preserve<VirtRegMapAnalysis>()
-    .preserve<SlotIndexesAnalysis>()
-    .preserve<LiveIntervalsAnalysis>()
-    .preserve<LiveRegMatrixAnalysis>();
+      .preserve<LiveStacksAnalysis>()
+      .preserve<VirtRegMapAnalysis>()
+      .preserve<SlotIndexesAnalysis>()
+      .preserve<LiveIntervalsAnalysis>()
+      .preserve<LiveRegMatrixAnalysis>();
   return PA;
 }



More information about the llvm-commits mailing list