[llvm] [CodeGen][NPM] Update MPDT similar to MDT after unreachable BB elimination (PR #172421)
Teja Alaghari via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 15 21:10:23 PST 2025
https://github.com/TejaX-Alaghari created https://github.com/llvm/llvm-project/pull/172421
After unreachable machine basic blocks are removed, MPDT should also be updated with the latest block numbers alongside MDT.
>From 6b37746e5c59ef953fe4f198c5ba2250c3bb89ab Mon Sep 17 00:00:00 2001
From: Teja Alaghari <teja.alaghari at amd.com>
Date: Tue, 16 Dec 2025 10:04:06 +0530
Subject: [PATCH 1/2] Update MPDT block numbers after removing unreachable
blocks
---
llvm/lib/CodeGen/UnreachableBlockElim.cpp | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/CodeGen/UnreachableBlockElim.cpp b/llvm/lib/CodeGen/UnreachableBlockElim.cpp
index cf8c1a7bd08d0..2ef402f0d4f82 100644
--- a/llvm/lib/CodeGen/UnreachableBlockElim.cpp
+++ b/llvm/lib/CodeGen/UnreachableBlockElim.cpp
@@ -27,6 +27,7 @@
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
+#include "llvm/CodeGen/MachinePostDominators.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
@@ -75,11 +76,14 @@ PreservedAnalyses UnreachableBlockElimPass::run(Function &F,
namespace {
class UnreachableMachineBlockElim {
MachineDominatorTree *MDT;
+ MachinePostDominatorTree *MPDT;
MachineLoopInfo *MLI;
public:
- UnreachableMachineBlockElim(MachineDominatorTree *MDT, MachineLoopInfo *MLI)
- : MDT(MDT), MLI(MLI) {}
+ UnreachableMachineBlockElim(MachineDominatorTree *MDT,
+ MachinePostDominatorTree *MPDT,
+ MachineLoopInfo *MLI)
+ : MDT(MDT), MPDT(MPDT), MLI(MLI) {}
bool run(MachineFunction &MF);
};
@@ -113,9 +117,10 @@ PreservedAnalyses
UnreachableMachineBlockElimPass::run(MachineFunction &MF,
MachineFunctionAnalysisManager &AM) {
auto *MDT = AM.getCachedResult<MachineDominatorTreeAnalysis>(MF);
+ auto *MPDT = AM.getCachedResult<MachinePostDominatorTreeAnalysis>(MF);
auto *MLI = AM.getCachedResult<MachineLoopAnalysis>(MF);
- if (!UnreachableMachineBlockElim(MDT, MLI).run(MF))
+ if (!UnreachableMachineBlockElim(MDT, MPDT, MLI).run(MF))
return PreservedAnalyses::all();
return getMachineFunctionPassPreservedAnalyses()
@@ -127,12 +132,16 @@ bool UnreachableMachineBlockElimLegacy::runOnMachineFunction(
MachineFunction &MF) {
MachineDominatorTreeWrapperPass *MDTWrapper =
getAnalysisIfAvailable<MachineDominatorTreeWrapperPass>();
+ MachinePostDominatorTreeWrapperPass *MPDTWrapper =
+ getAnalysisIfAvailable<MachinePostDominatorTreeWrapperPass>();
MachineDominatorTree *MDT = MDTWrapper ? &MDTWrapper->getDomTree() : nullptr;
+ MachinePostDominatorTree *MPDT =
+ MPDTWrapper ? &MPDTWrapper->getPostDomTree() : nullptr;
MachineLoopInfoWrapperPass *MLIWrapper =
getAnalysisIfAvailable<MachineLoopInfoWrapperPass>();
MachineLoopInfo *MLI = MLIWrapper ? &MLIWrapper->getLI() : nullptr;
- return UnreachableMachineBlockElim(MDT, MLI).run(MF);
+ return UnreachableMachineBlockElim(MDT, MPDT, MLI).run(MF);
}
bool UnreachableMachineBlockElim::run(MachineFunction &F) {
@@ -221,5 +230,8 @@ bool UnreachableMachineBlockElim::run(MachineFunction &F) {
if (MDT)
MDT->updateBlockNumbers();
+ if (MPDT)
+ MPDT->updateBlockNumbers();
+
return (!DeadBlocks.empty() || ModifiedPHI);
}
>From cd6e00b68cda3e7ff2187e68e95a9970260b1dde Mon Sep 17 00:00:00 2001
From: Teja Alaghari <teja.alaghari at amd.com>
Date: Mon, 8 Dec 2025 14:09:16 +0530
Subject: [PATCH 2/2] Remove dead blocks from MPDT as well as MDT. And declare
MPDT as preserved for both LPM and NPM.
---
llvm/lib/CodeGen/UnreachableBlockElim.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/CodeGen/UnreachableBlockElim.cpp b/llvm/lib/CodeGen/UnreachableBlockElim.cpp
index 2ef402f0d4f82..73908b4b222ca 100644
--- a/llvm/lib/CodeGen/UnreachableBlockElim.cpp
+++ b/llvm/lib/CodeGen/UnreachableBlockElim.cpp
@@ -110,6 +110,7 @@ void UnreachableMachineBlockElimLegacy::getAnalysisUsage(
AnalysisUsage &AU) const {
AU.addPreserved<MachineLoopInfoWrapperPass>();
AU.addPreserved<MachineDominatorTreeWrapperPass>();
+ AU.addPreserved<MachinePostDominatorTreeWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
@@ -125,7 +126,8 @@ UnreachableMachineBlockElimPass::run(MachineFunction &MF,
return getMachineFunctionPassPreservedAnalyses()
.preserve<MachineLoopAnalysis>()
- .preserve<MachineDominatorTreeAnalysis>();
+ .preserve<MachineDominatorTreeAnalysis>()
+ .preserve<MachinePostDominatorTreeAnalysis>();
}
bool UnreachableMachineBlockElimLegacy::runOnMachineFunction(
@@ -163,6 +165,7 @@ bool UnreachableMachineBlockElim::run(MachineFunction &F) {
// Update dominator and loop info.
if (MLI) MLI->removeBlock(&BB);
if (MDT && MDT->getNode(&BB)) MDT->eraseNode(&BB);
+ if (MPDT && MPDT->getNode(&BB)) MPDT->eraseNode(&BB);
while (!BB.succ_empty()) {
(*BB.succ_begin())->removePHIsIncomingValuesForPredecessor(BB);
More information about the llvm-commits
mailing list