https://github.com/vikramRH created 
https://github.com/llvm/llvm-project/pull/173485

None

>From 5b072d6d7cd3db24a174197160789efd8f1a1ea9 Mon Sep 17 00:00:00 2001
From: vikhegde <[email protected]>
Date: Mon, 22 Dec 2025 16:13:48 +0530
Subject: [PATCH] [CodeGen][NPM] Update dominator tree and post dominator tree
 consistently

---
 llvm/lib/CodeGen/BranchFolding.cpp           | 13 +++++++++++--
 llvm/lib/CodeGen/BranchRelaxation.cpp        | 11 ++++++++++-
 llvm/lib/CodeGen/MachineBlockPlacement.cpp   | 11 +++++++----
 llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp | 13 +++++++++++--
 4 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/llvm/lib/CodeGen/BranchFolding.cpp 
b/llvm/lib/CodeGen/BranchFolding.cpp
index 0b212fb0beb20..7127fd556f733 100644
--- a/llvm/lib/CodeGen/BranchFolding.cpp
+++ b/llvm/lib/CodeGen/BranchFolding.cpp
@@ -28,6 +28,7 @@
 #include "llvm/CodeGen/MBFIWrapper.h"
 #include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
 #include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
+#include "llvm/CodeGen/MachineDominators.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/CodeGen/MachineInstr.h"
@@ -35,6 +36,7 @@
 #include "llvm/CodeGen/MachineJumpTableInfo.h"
 #include "llvm/CodeGen/MachineLoopInfo.h"
 #include "llvm/CodeGen/MachineOperand.h"
+#include "llvm/CodeGen/MachinePostDominators.h"
 #include "llvm/CodeGen/MachineRegisterInfo.h"
 #include "llvm/CodeGen/MachineSizeOpts.h"
 #include "llvm/CodeGen/TargetInstrInfo.h"
@@ -61,7 +63,6 @@
 #include <cstddef>
 #include <iterator>
 #include <numeric>
-
 using namespace llvm;
 
 #define DEBUG_TYPE "branch-folder"
@@ -135,12 +136,20 @@ PreservedAnalyses BranchFolderPass::run(MachineFunction 
&MF,
         "ProfileSummaryAnalysis is required for BranchFoldingPass", false);
 
   auto &MBFI = MFAM.getResult<MachineBlockFrequencyAnalysis>(MF);
+  auto *MDT = MFAM.getCachedResult<MachineDominatorTreeAnalysis>(MF);
+  auto *MPDT = MFAM.getCachedResult<MachinePostDominatorTreeAnalysis>(MF);
   MBFIWrapper MBBFreqInfo(MBFI);
   BranchFolder Folder(EnableTailMerge, /*CommonHoist=*/true, MBBFreqInfo, MBPI,
                       PSI);
   if (!Folder.OptimizeFunction(MF, MF.getSubtarget().getInstrInfo(),
-                               MF.getSubtarget().getRegisterInfo()))
+                               MF.getSubtarget().getRegisterInfo())) {
+    if (MDT)
+      MDT->updateBlockNumbers();
+    if (MPDT)
+      MPDT->updateBlockNumbers();
     return PreservedAnalyses::all();
+  }
+
   return getMachineFunctionPassPreservedAnalyses();
 }
 
diff --git a/llvm/lib/CodeGen/BranchRelaxation.cpp 
b/llvm/lib/CodeGen/BranchRelaxation.cpp
index fae952e888b4b..02a550f2e311a 100644
--- a/llvm/lib/CodeGen/BranchRelaxation.cpp
+++ b/llvm/lib/CodeGen/BranchRelaxation.cpp
@@ -11,9 +11,11 @@
 #include "llvm/ADT/Statistic.h"
 #include "llvm/CodeGen/LivePhysRegs.h"
 #include "llvm/CodeGen/MachineBasicBlock.h"
+#include "llvm/CodeGen/MachineDominators.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/CodeGen/MachinePostDominators.h"
 #include "llvm/CodeGen/RegisterScavenging.h"
 #include "llvm/CodeGen/TargetInstrInfo.h"
 #include "llvm/CodeGen/TargetRegisterInfo.h"
@@ -769,8 +771,15 @@ bool BranchRelaxation::relaxBranchInstructions() {
 PreservedAnalyses
 BranchRelaxationPass::run(MachineFunction &MF,
                           MachineFunctionAnalysisManager &MFAM) {
-  if (!BranchRelaxation().run(MF))
+  auto *MDT = MFAM.getCachedResult<MachineDominatorTreeAnalysis>(MF);
+  auto *MPDT = MFAM.getCachedResult<MachinePostDominatorTreeAnalysis>(MF);
+  if (!BranchRelaxation().run(MF)) {
+    if (MDT)
+      MDT->updateBlockNumbers();
+    if (MPDT)
+      MPDT->updateBlockNumbers();
     return PreservedAnalyses::all();
+  }
 
   return getMachineFunctionPassPreservedAnalyses();
 }
diff --git a/llvm/lib/CodeGen/MachineBlockPlacement.cpp 
b/llvm/lib/CodeGen/MachineBlockPlacement.cpp
index e9c75f0753f89..beff9a111b32c 100644
--- a/llvm/lib/CodeGen/MachineBlockPlacement.cpp
+++ b/llvm/lib/CodeGen/MachineBlockPlacement.cpp
@@ -3541,19 +3541,22 @@ MachineBlockPlacementPass::run(MachineFunction &MF,
   auto *MPDT = MachineBlockPlacement::allowTailDupPlacement(MF)
                    ? &MFAM.getResult<MachinePostDominatorTreeAnalysis>(MF)
                    : nullptr;
+  auto *MDT = MFAM.getCachedResult<MachineDominatorTreeAnalysis>(MF);
   auto *PSI = MFAM.getResult<ModuleAnalysisManagerMachineFunctionProxy>(MF)
                   .getCachedResult<ProfileSummaryAnalysis>(
                       *MF.getFunction().getParent());
   if (!PSI)
     report_fatal_error("MachineBlockPlacement requires ProfileSummaryAnalysis",
                        false);
-
   MachineBlockPlacement MBP(MBPI, MLI, PSI, std::move(MBFI), MPDT,
                             AllowTailMerge);
-
-  if (!MBP.run(MF))
+  if (!MBP.run(MF)) {
+    if (MDT)
+      MDT->updateBlockNumbers();
+    if (MPDT)
+      MPDT->updateBlockNumbers();
     return PreservedAnalyses::all();
-
+  }
   return getMachineFunctionPassPreservedAnalyses();
 }
 
diff --git a/llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp 
b/llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp
index 8785968569d92..856b367a1f8f7 100644
--- a/llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp
+++ b/llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp
@@ -22,10 +22,11 @@
 #include "GCNSubtarget.h"
 #include "MCTargetDesc/AMDGPUMCTargetDesc.h"
 #include "llvm/ADT/SetVector.h"
+#include "llvm/CodeGen/MachineDominators.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachinePostDominators.h"
 #include "llvm/CodeGen/TargetSchedule.h"
 #include "llvm/Support/BranchProbability.h"
-
 using namespace llvm;
 
 #define DEBUG_TYPE "si-pre-emit-peephole"
@@ -705,8 +706,16 @@ MachineInstrBuilder 
SIPreEmitPeephole::createUnpackedMI(MachineInstr &I,
 PreservedAnalyses
 llvm::SIPreEmitPeepholePass::run(MachineFunction &MF,
                                  MachineFunctionAnalysisManager &MFAM) {
-  if (!SIPreEmitPeephole().run(MF))
+  auto *MDT = MFAM.getCachedResult<MachineDominatorTreeAnalysis>(MF);
+  auto *MPDT = MFAM.getCachedResult<MachinePostDominatorTreeAnalysis>(MF);
+
+  if (!SIPreEmitPeephole().run(MF)) {
+    if (MDT)
+      MDT->updateBlockNumbers();
+    if (MPDT)
+      MPDT->updateBlockNumbers();
     return PreservedAnalyses::all();
+  }
 
   return getMachineFunctionPassPreservedAnalyses();
 }

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to