[llvm] [NewPM] Port MachineDominanceFrontierAnalysis (PR #177709)
Anshul Nigham via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 31 09:05:12 PST 2026
https://github.com/nigham updated https://github.com/llvm/llvm-project/pull/177709
>From b1edf0ba71aed499b4964cdc82dca804a6379471 Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Fri, 23 Jan 2026 16:25:52 -0800
Subject: [PATCH 1/9] [NewPM] Port MachineDominanceFrontierAnalysis
---
.../include/llvm/CodeGen/MachineDominanceFrontier.h | 13 +++++++++++++
llvm/include/llvm/Passes/MachinePassRegistry.def | 3 +--
llvm/lib/CodeGen/MachineDominanceFrontier.cpp | 9 +++++++++
llvm/lib/Passes/PassBuilder.cpp | 1 +
4 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index 7df060a3f5b1a..ac56361827507 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -13,6 +13,7 @@
#include "llvm/Analysis/DominanceFrontierImpl.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/Support/GenericDomTree.h"
namespace llvm {
@@ -80,6 +81,18 @@ class MachineDominanceFrontier : public MachineFunctionPass {
void getAnalysisUsage(AnalysisUsage &AU) const override;
};
+class MachineDominanceFrontierAnalysis
+ : public AnalysisInfoMixin<MachineDominanceFrontierAnalysis> {
+ friend AnalysisInfoMixin<MachineDominanceFrontierAnalysis>;
+ static AnalysisKey Key;
+ MachineDominanceFrontier MDF;
+
+public:
+ using Result = const MachineDominanceFrontier &;
+
+ Result run(MachineFunction &MF, MachineFunctionAnalysisManager &);
+};
+
} // end namespace llvm
#endif // LLVM_CODEGEN_MACHINEDOMINANCEFRONTIER_H
diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def
index 20b066a2ead6d..52931fda29f34 100644
--- a/llvm/include/llvm/Passes/MachinePassRegistry.def
+++ b/llvm/include/llvm/Passes/MachinePassRegistry.def
@@ -73,6 +73,7 @@ MACHINE_FUNCTION_ANALYSIS("machine-block-freq", MachineBlockFrequencyAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-branch-prob",
MachineBranchProbabilityAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-cycles", MachineCycleAnalysis())
+MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier", MachineDominanceFrontierAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopAnalysis())
MACHINE_FUNCTION_ANALYSIS("machine-opt-remark-emitter",
@@ -91,8 +92,6 @@ MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis())
// MACHINE_FUNCTION_ANALYSIS("lazy-machine-bfi",
// LazyMachineBlockFrequencyInfoAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopInfoAnalysis())
-// MACHINE_FUNCTION_ANALYSIS("machine-dom-frontier",
-// MachineDominanceFrontierAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
// MachinePostDominatorTreeAnalysis())
// MACHINE_FUNCTION_ANALYSIS("machine-region-info",
diff --git a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
index 4d35ba89afe31..8e2cdd76b21af 100644
--- a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
+++ b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
@@ -50,3 +50,12 @@ void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<MachineDominatorTreeWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
+
+AnalysisKey MachineDominanceFrontierAnalysis::Key;
+
+MachineDominanceFrontierAnalysis::Result
+MachineDominanceFrontierAnalysis::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &) {
+ MDF.runOnMachineFunction(MF);
+ return MDF;
+}
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 8bb78c8c7df63..45955426d66a0 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -123,6 +123,7 @@
#include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
#include "llvm/CodeGen/MachineCSE.h"
#include "llvm/CodeGen/MachineCopyPropagation.h"
+#include "llvm/CodeGen/MachineDominanceFrontier.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
#include "llvm/CodeGen/MachineLICM.h"
>From f124e6b7261c4f051f37849f5da54de093dd4273 Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Tue, 27 Jan 2026 14:42:40 -0800
Subject: [PATCH 2/9] Extract MDF from wrapper pass
---
.../llvm/CodeGen/MachineDominanceFrontier.h | 33 ++++++++++++++-----
llvm/include/llvm/InitializePasses.h | 2 +-
llvm/lib/CodeGen/CodeGen.cpp | 2 +-
llvm/lib/CodeGen/MachineDominanceFrontier.cpp | 30 +++++++++++------
llvm/lib/CodeGen/MachineRegionInfo.cpp | 6 ++--
.../X86LoadValueInjectionLoadHardening.cpp | 6 ++--
6 files changed, 52 insertions(+), 27 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index ac56361827507..4556d64b617c2 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -12,13 +12,14 @@
#include "llvm/Analysis/DominanceFrontier.h"
#include "llvm/Analysis/DominanceFrontierImpl.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
+#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/Support/GenericDomTree.h"
namespace llvm {
-class MachineDominanceFrontier : public MachineFunctionPass {
+class MachineDominanceFrontier {
ForwardDominanceFrontierBase<MachineBasicBlock> Base;
public:
@@ -29,11 +30,6 @@ class MachineDominanceFrontier : public MachineFunctionPass {
using const_iterator =
DominanceFrontierBase<MachineBasicBlock, false>::const_iterator;
- MachineDominanceFrontier(const MachineDominanceFrontier &) = delete;
- MachineDominanceFrontier &operator=(const MachineDominanceFrontier &) = delete;
-
- static char ID;
-
MachineDominanceFrontier();
ForwardDominanceFrontierBase<MachineBasicBlock> &getBase() { return Base; }
@@ -74,11 +70,30 @@ class MachineDominanceFrontier : public MachineFunctionPass {
return Base.find(B);
}
+ bool analyze(MachineDominatorTree &MDT);
+
+ void releaseMemory();
+};
+
+class MachineDominanceFrontierWrapperPass : public MachineFunctionPass {
+private:
+ MachineDominanceFrontier MDF;
+
+public:
+ MachineDominanceFrontierWrapperPass();
+
+ MachineDominanceFrontierWrapperPass(const MachineDominanceFrontier &) = delete;
+ MachineDominanceFrontierWrapperPass &operator=(const MachineDominanceFrontier &) = delete;
+
+ static char ID;
+
bool runOnMachineFunction(MachineFunction &F) override;
+ void getAnalysisUsage(AnalysisUsage &AU) const override;
+
void releaseMemory() override;
- void getAnalysisUsage(AnalysisUsage &AU) const override;
+ MachineDominanceFrontier &getMDF() { return MDF; }
};
class MachineDominanceFrontierAnalysis
@@ -88,9 +103,9 @@ class MachineDominanceFrontierAnalysis
MachineDominanceFrontier MDF;
public:
- using Result = const MachineDominanceFrontier &;
+ using Result = MachineDominanceFrontier;
- Result run(MachineFunction &MF, MachineFunctionAnalysisManager &);
+ Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
};
} // end namespace llvm
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index 0531dd85bace0..80ec83a58c3ac 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -205,7 +205,7 @@ LLVM_ABI void initializeMachineCombinerPass(PassRegistry &);
LLVM_ABI void initializeMachineCopyPropagationLegacyPass(PassRegistry &);
LLVM_ABI void initializeMachineCycleInfoPrinterLegacyPass(PassRegistry &);
LLVM_ABI void initializeMachineCycleInfoWrapperPassPass(PassRegistry &);
-LLVM_ABI void initializeMachineDominanceFrontierPass(PassRegistry &);
+LLVM_ABI void initializeMachineDominanceFrontierWrapperPassPass(PassRegistry &);
LLVM_ABI void initializeMachineDominatorTreeWrapperPassPass(PassRegistry &);
LLVM_ABI void initializeMachineFunctionPrinterPassPass(PassRegistry &);
LLVM_ABI void initializeMachineFunctionSplitterPass(PassRegistry &);
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 29b76129200f7..b6b907df31cfe 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -87,7 +87,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
initializeMachineCFGPrinterPass(Registry);
initializeMachineCSELegacyPass(Registry);
initializeMachineCombinerPass(Registry);
- initializeMachineDominanceFrontierPass(Registry);
+ initializeMachineDominanceFrontierWrapperPassPass(Registry);
initializeMachineCopyPropagationLegacyPass(Registry);
initializeMachineCycleInfoPrinterLegacyPass(Registry);
initializeMachineCycleInfoWrapperPassPass(Registry);
diff --git a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
index 8e2cdd76b21af..be09b3856caff 100644
--- a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
+++ b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
@@ -22,30 +22,39 @@ template class ForwardDominanceFrontierBase<MachineBasicBlock>;
}
-char MachineDominanceFrontier::ID = 0;
+char MachineDominanceFrontierWrapperPass::ID = 0;
-INITIALIZE_PASS_BEGIN(MachineDominanceFrontier, "machine-domfrontier",
+INITIALIZE_PASS_BEGIN(MachineDominanceFrontierWrapperPass, "machine-domfrontier",
"Machine Dominance Frontier Construction", true, true)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
-INITIALIZE_PASS_END(MachineDominanceFrontier, "machine-domfrontier",
+INITIALIZE_PASS_END(MachineDominanceFrontierWrapperPass, "machine-domfrontier",
"Machine Dominance Frontier Construction", true, true)
-MachineDominanceFrontier::MachineDominanceFrontier()
+MachineDominanceFrontierWrapperPass::MachineDominanceFrontierWrapperPass()
: MachineFunctionPass(ID) {}
-char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID;
+char &llvm::MachineDominanceFrontierID = MachineDominanceFrontierWrapperPass::ID;
-bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) {
+bool MachineDominanceFrontierWrapperPass::runOnMachineFunction(MachineFunction &) {
+ auto& MDT = getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
+ return MDF.analyze(MDT);
+}
+
+bool MachineDominanceFrontier::analyze(MachineDominatorTree &MDT) {
releaseMemory();
- Base.analyze(getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree());
+ Base.analyze(MDT);
return false;
}
+void MachineDominanceFrontierWrapperPass::releaseMemory() {
+ MDF.releaseMemory();
+}
+
void MachineDominanceFrontier::releaseMemory() {
Base.releaseMemory();
}
-void MachineDominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const {
+void MachineDominanceFrontierWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<MachineDominatorTreeWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
@@ -55,7 +64,8 @@ AnalysisKey MachineDominanceFrontierAnalysis::Key;
MachineDominanceFrontierAnalysis::Result
MachineDominanceFrontierAnalysis::run(MachineFunction &MF,
- MachineFunctionAnalysisManager &) {
- MDF.runOnMachineFunction(MF);
+ MachineFunctionAnalysisManager &MFAM) {
+ auto& MDT = MFAM.getResult<MachineDominatorTreeAnalysis>(MF);
+ MDF.analyze(MDT);
return MDF;
}
diff --git a/llvm/lib/CodeGen/MachineRegionInfo.cpp b/llvm/lib/CodeGen/MachineRegionInfo.cpp
index d522d5b76a222..9f90bfe15ecd8 100644
--- a/llvm/lib/CodeGen/MachineRegionInfo.cpp
+++ b/llvm/lib/CodeGen/MachineRegionInfo.cpp
@@ -86,7 +86,7 @@ bool MachineRegionInfoPass::runOnMachineFunction(MachineFunction &F) {
auto DT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
auto PDT =
&getAnalysis<MachinePostDominatorTreeWrapperPass>().getPostDomTree();
- auto DF = &getAnalysis<MachineDominanceFrontier>();
+ auto DF = &getAnalysis<MachineDominanceFrontierWrapperPass>().getMDF();
RI.recalculate(F, DT, PDT, DF);
@@ -111,7 +111,7 @@ void MachineRegionInfoPass::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<MachineDominatorTreeWrapperPass>();
AU.addRequired<MachinePostDominatorTreeWrapperPass>();
- AU.addRequired<MachineDominanceFrontier>();
+ AU.addRequired<MachineDominanceFrontierWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
@@ -132,7 +132,7 @@ INITIALIZE_PASS_BEGIN(MachineRegionInfoPass, DEBUG_TYPE,
"Detect single entry single exit regions", true, true)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
INITIALIZE_PASS_DEPENDENCY(MachinePostDominatorTreeWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontierWrapperPass)
INITIALIZE_PASS_END(MachineRegionInfoPass, DEBUG_TYPE,
"Detect single entry single exit regions", true, true)
diff --git a/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp b/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp
index 3b96e706fb607..9f797f4d6d5f3 100644
--- a/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp
+++ b/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp
@@ -234,7 +234,7 @@ void X86LoadValueInjectionLoadHardeningPass::getAnalysisUsage(
MachineFunctionPass::getAnalysisUsage(AU);
AU.addRequired<MachineLoopInfoWrapperPass>();
AU.addRequired<MachineDominatorTreeWrapperPass>();
- AU.addRequired<MachineDominanceFrontier>();
+ AU.addRequired<MachineDominanceFrontierWrapperPass>();
AU.setPreservesCFG();
}
@@ -267,7 +267,7 @@ bool X86LoadValueInjectionLoadHardeningPass::runOnMachineFunction(
LLVM_DEBUG(dbgs() << "Building gadget graph...\n");
const auto &MLI = getAnalysis<MachineLoopInfoWrapperPass>().getLI();
const auto &MDT = getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
- const auto &MDF = getAnalysis<MachineDominanceFrontier>();
+ const auto &MDF = getAnalysis<MachineDominanceFrontierWrapperPass>().getMDF();
std::unique_ptr<MachineGadgetGraph> Graph = getGadgetGraph(MF, MLI, MDT, MDF);
LLVM_DEBUG(dbgs() << "Building gadget graph... Done\n");
if (Graph == nullptr)
@@ -796,7 +796,7 @@ INITIALIZE_PASS_BEGIN(X86LoadValueInjectionLoadHardeningPass, PASS_KEY,
"X86 LVI load hardening", false, false)
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfoWrapperPass)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontierWrapperPass)
INITIALIZE_PASS_END(X86LoadValueInjectionLoadHardeningPass, PASS_KEY,
"X86 LVI load hardening", false, false)
>From c9912f7304befd5d816986b0ce2a0819231fe250 Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Tue, 27 Jan 2026 14:45:16 -0800
Subject: [PATCH 3/9] Formatting
---
.../llvm/CodeGen/MachineDominanceFrontier.h | 6 ++++--
llvm/lib/CodeGen/MachineDominanceFrontier.cpp | 21 +++++++++++--------
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index 4556d64b617c2..97951f9a90243 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -82,8 +82,10 @@ class MachineDominanceFrontierWrapperPass : public MachineFunctionPass {
public:
MachineDominanceFrontierWrapperPass();
- MachineDominanceFrontierWrapperPass(const MachineDominanceFrontier &) = delete;
- MachineDominanceFrontierWrapperPass &operator=(const MachineDominanceFrontier &) = delete;
+ MachineDominanceFrontierWrapperPass(const MachineDominanceFrontier &) =
+ delete;
+ MachineDominanceFrontierWrapperPass &
+ operator=(const MachineDominanceFrontier &) = delete;
static char ID;
diff --git a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
index be09b3856caff..0afa9b5a850dd 100644
--- a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
+++ b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
@@ -21,22 +21,24 @@ template class DominanceFrontierBase<MachineBasicBlock, true>;
template class ForwardDominanceFrontierBase<MachineBasicBlock>;
}
-
char MachineDominanceFrontierWrapperPass::ID = 0;
-INITIALIZE_PASS_BEGIN(MachineDominanceFrontierWrapperPass, "machine-domfrontier",
- "Machine Dominance Frontier Construction", true, true)
+INITIALIZE_PASS_BEGIN(MachineDominanceFrontierWrapperPass,
+ "machine-domfrontier",
+ "Machine Dominance Frontier Construction", true, true)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
INITIALIZE_PASS_END(MachineDominanceFrontierWrapperPass, "machine-domfrontier",
- "Machine Dominance Frontier Construction", true, true)
+ "Machine Dominance Frontier Construction", true, true)
MachineDominanceFrontierWrapperPass::MachineDominanceFrontierWrapperPass()
: MachineFunctionPass(ID) {}
-char &llvm::MachineDominanceFrontierID = MachineDominanceFrontierWrapperPass::ID;
+char &llvm::MachineDominanceFrontierID =
+ MachineDominanceFrontierWrapperPass::ID;
-bool MachineDominanceFrontierWrapperPass::runOnMachineFunction(MachineFunction &) {
- auto& MDT = getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
+bool MachineDominanceFrontierWrapperPass::runOnMachineFunction(
+ MachineFunction &) {
+ auto &MDT = getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
return MDF.analyze(MDT);
}
@@ -54,7 +56,8 @@ void MachineDominanceFrontier::releaseMemory() {
Base.releaseMemory();
}
-void MachineDominanceFrontierWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
+void MachineDominanceFrontierWrapperPass::getAnalysisUsage(
+ AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<MachineDominatorTreeWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
@@ -65,7 +68,7 @@ AnalysisKey MachineDominanceFrontierAnalysis::Key;
MachineDominanceFrontierAnalysis::Result
MachineDominanceFrontierAnalysis::run(MachineFunction &MF,
MachineFunctionAnalysisManager &MFAM) {
- auto& MDT = MFAM.getResult<MachineDominatorTreeAnalysis>(MF);
+ auto &MDT = MFAM.getResult<MachineDominatorTreeAnalysis>(MF);
MDF.analyze(MDT);
return MDF;
}
>From 9fdf59715ceb127b2a20730b2e602ca0c3702942 Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Tue, 27 Jan 2026 15:11:54 -0800
Subject: [PATCH 4/9] Update callsites
---
llvm/include/llvm/CodeGen/MachineDominanceFrontier.h | 2 +-
llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp | 6 +++---
llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp | 6 +++---
llvm/lib/Target/WebAssembly/WebAssemblyExceptionInfo.cpp | 6 +++---
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index 97951f9a90243..ed8af63d717ee 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -30,7 +30,7 @@ class MachineDominanceFrontier {
using const_iterator =
DominanceFrontierBase<MachineBasicBlock, false>::const_iterator;
- MachineDominanceFrontier();
+ MachineDominanceFrontier() = default;
ForwardDominanceFrontierBase<MachineBasicBlock> &getBase() { return Base; }
diff --git a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp
index 53afbc433c933..f266678071b5b 100644
--- a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp
@@ -65,7 +65,7 @@ class HexagonOptAddrMode : public MachineFunctionPass {
void getAnalysisUsage(AnalysisUsage &AU) const override {
MachineFunctionPass::getAnalysisUsage(AU);
AU.addRequired<MachineDominatorTreeWrapperPass>();
- AU.addRequired<MachineDominanceFrontier>();
+ AU.addRequired<MachineDominanceFrontierWrapperPass>();
AU.setPreservesAll();
}
@@ -128,7 +128,7 @@ char HexagonOptAddrMode::ID = 0;
INITIALIZE_PASS_BEGIN(HexagonOptAddrMode, "amode-opt",
"Optimize addressing mode", false, false)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontierWrapperPass)
INITIALIZE_PASS_END(HexagonOptAddrMode, "amode-opt", "Optimize addressing mode",
false, false)
@@ -1155,7 +1155,7 @@ bool HexagonOptAddrMode::runOnMachineFunction(MachineFunction &MF) {
TRI = MF.getSubtarget().getRegisterInfo();
HII = HST.getInstrInfo();
HRI = HST.getRegisterInfo();
- const auto &MDF = getAnalysis<MachineDominanceFrontier>();
+ const auto &MDF = getAnalysis<MachineDominanceFrontierWrapperPass>().getMDF();
MDT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
DataFlowGraph G(MF, *HII, *HRI, *MDT, MDF);
diff --git a/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp b/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp
index f375b25e4ceb8..9e8ab8392e3af 100644
--- a/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp
@@ -57,7 +57,7 @@ namespace {
void getAnalysisUsage(AnalysisUsage &AU) const override {
AU.addRequired<MachineDominatorTreeWrapperPass>();
- AU.addRequired<MachineDominanceFrontier>();
+ AU.addRequired<MachineDominanceFrontierWrapperPass>();
AU.setPreservesAll();
MachineFunctionPass::getAnalysisUsage(AU);
}
@@ -102,7 +102,7 @@ char HexagonRDFOpt::ID = 0;
INITIALIZE_PASS_BEGIN(HexagonRDFOpt, "hexagon-rdf-opt",
"Hexagon RDF optimizations", false, false)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontierWrapperPass)
INITIALIZE_PASS_END(HexagonRDFOpt, "hexagon-rdf-opt",
"Hexagon RDF optimizations", false, false)
@@ -295,7 +295,7 @@ bool HexagonRDFOpt::runOnMachineFunction(MachineFunction &MF) {
}
MDT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
- const auto &MDF = getAnalysis<MachineDominanceFrontier>();
+ const auto &MDF = getAnalysis<MachineDominanceFrontierWrapperPass>().getMDF();
const auto &HII = *MF.getSubtarget<HexagonSubtarget>().getInstrInfo();
const auto &HRI = *MF.getSubtarget<HexagonSubtarget>().getRegisterInfo();
MRI = &MF.getRegInfo();
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyExceptionInfo.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyExceptionInfo.cpp
index f0b2e915e5760..a8a2454cd14ca 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyExceptionInfo.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyExceptionInfo.cpp
@@ -32,7 +32,7 @@ char WebAssemblyExceptionInfo::ID = 0;
INITIALIZE_PASS_BEGIN(WebAssemblyExceptionInfo, DEBUG_TYPE,
"WebAssembly Exception Information", true, true)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(MachineDominanceFrontierWrapperPass)
INITIALIZE_PASS_END(WebAssemblyExceptionInfo, DEBUG_TYPE,
"WebAssembly Exception Information", true, true)
@@ -46,7 +46,7 @@ bool WebAssemblyExceptionInfo::runOnMachineFunction(MachineFunction &MF) {
!MF.getFunction().hasPersonalityFn())
return false;
auto &MDT = getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
- auto &MDF = getAnalysis<MachineDominanceFrontier>();
+ auto &MDF = getAnalysis<MachineDominanceFrontierWrapperPass>().getMDF();
recalculate(MF, MDT, MDF);
LLVM_DEBUG(dump());
return false;
@@ -275,7 +275,7 @@ void WebAssemblyExceptionInfo::releaseMemory() {
void WebAssemblyExceptionInfo::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<MachineDominatorTreeWrapperPass>();
- AU.addRequired<MachineDominanceFrontier>();
+ AU.addRequired<MachineDominanceFrontierWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
>From ecefffbbbb21c8d2258c34a082f403fa2cbed87f Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Tue, 27 Jan 2026 17:12:16 -0800
Subject: [PATCH 5/9] Fix dtor arg
---
llvm/include/llvm/CodeGen/MachineDominanceFrontier.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index ed8af63d717ee..11d3c8b4ff949 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -82,10 +82,10 @@ class MachineDominanceFrontierWrapperPass : public MachineFunctionPass {
public:
MachineDominanceFrontierWrapperPass();
- MachineDominanceFrontierWrapperPass(const MachineDominanceFrontier &) =
- delete;
+ MachineDominanceFrontierWrapperPass(
+ const MachineDominanceFrontierWrapperPass &) = delete;
MachineDominanceFrontierWrapperPass &
- operator=(const MachineDominanceFrontier &) = delete;
+ operator=(const MachineDominanceFrontierWrapperPass &) = delete;
static char ID;
>From 9182fba16dbf47d1322fa677783b67c435a1b7c3 Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Tue, 27 Jan 2026 17:23:10 -0800
Subject: [PATCH 6/9] Update MachineDominanceFrontierAnalysis to be stateless.
---
llvm/include/llvm/CodeGen/MachineDominanceFrontier.h | 1 -
llvm/lib/CodeGen/MachineDominanceFrontier.cpp | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index 11d3c8b4ff949..ceb49294adc73 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -102,7 +102,6 @@ class MachineDominanceFrontierAnalysis
: public AnalysisInfoMixin<MachineDominanceFrontierAnalysis> {
friend AnalysisInfoMixin<MachineDominanceFrontierAnalysis>;
static AnalysisKey Key;
- MachineDominanceFrontier MDF;
public:
using Result = MachineDominanceFrontier;
diff --git a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
index 0afa9b5a850dd..b99c34014c64f 100644
--- a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
+++ b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
@@ -68,6 +68,7 @@ AnalysisKey MachineDominanceFrontierAnalysis::Key;
MachineDominanceFrontierAnalysis::Result
MachineDominanceFrontierAnalysis::run(MachineFunction &MF,
MachineFunctionAnalysisManager &MFAM) {
+ MachineDominanceFrontier MDF;
auto &MDT = MFAM.getResult<MachineDominatorTreeAnalysis>(MF);
MDF.analyze(MDT);
return MDF;
>From 5748d5074218e42ed79f90188054d1a2e33b0c1f Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Fri, 30 Jan 2026 22:34:18 -0800
Subject: [PATCH 7/9] Update MachineDominanceFrontier to inherit from
ForwardDominanceFrontierBase<MachineBasicBlock>
---
.../llvm/CodeGen/MachineDominanceFrontier.h | 48 ++-----------------
llvm/lib/CodeGen/MachineDominanceFrontier.cpp | 21 ++++----
2 files changed, 15 insertions(+), 54 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index ceb49294adc73..ea55a2beea4c6 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -19,9 +19,8 @@
namespace llvm {
-class MachineDominanceFrontier {
- ForwardDominanceFrontierBase<MachineBasicBlock> Base;
-
+class MachineDominanceFrontier
+ : public ForwardDominanceFrontierBase<MachineBasicBlock> {
public:
using DomTreeT = DomTreeBase<MachineBasicBlock>;
using DomTreeNodeT = DomTreeNodeBase<MachineBasicBlock>;
@@ -32,47 +31,8 @@ class MachineDominanceFrontier {
MachineDominanceFrontier() = default;
- ForwardDominanceFrontierBase<MachineBasicBlock> &getBase() { return Base; }
-
- const SmallVectorImpl<MachineBasicBlock *> &getRoots() const {
- return Base.getRoots();
- }
-
- MachineBasicBlock *getRoot() const {
- return Base.getRoot();
- }
-
- bool isPostDominator() const {
- return Base.isPostDominator();
- }
-
- iterator begin() {
- return Base.begin();
- }
-
- const_iterator begin() const {
- return Base.begin();
- }
-
- iterator end() {
- return Base.end();
- }
-
- const_iterator end() const {
- return Base.end();
- }
-
- iterator find(MachineBasicBlock *B) {
- return Base.find(B);
- }
-
- const_iterator find(MachineBasicBlock *B) const {
- return Base.find(B);
- }
-
- bool analyze(MachineDominatorTree &MDT);
-
- void releaseMemory();
+ bool invalidate(Function &F, const PreservedAnalyses &PA,
+ FunctionAnalysisManager::Invalidator &);
};
class MachineDominanceFrontierWrapperPass : public MachineFunctionPass {
diff --git a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
index b99c34014c64f..06447e622a493 100644
--- a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
+++ b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
@@ -36,15 +36,20 @@ MachineDominanceFrontierWrapperPass::MachineDominanceFrontierWrapperPass()
char &llvm::MachineDominanceFrontierID =
MachineDominanceFrontierWrapperPass::ID;
+bool MachineDominanceFrontier::invalidate(
+ Function &F, const PreservedAnalyses &PA,
+ FunctionAnalysisManager::Invalidator &) {
+ auto PAC = PA.getChecker<MachineDominanceFrontierAnalysis>();
+ return !(PAC.preserved() ||
+ PAC.preservedSet<AllAnalysesOn<MachineFunction>>() ||
+ PAC.preservedSet<CFGAnalyses>());
+}
+
bool MachineDominanceFrontierWrapperPass::runOnMachineFunction(
MachineFunction &) {
+ MDF.releaseMemory();
auto &MDT = getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree();
- return MDF.analyze(MDT);
-}
-
-bool MachineDominanceFrontier::analyze(MachineDominatorTree &MDT) {
- releaseMemory();
- Base.analyze(MDT);
+ MDF.analyze(MDT);
return false;
}
@@ -52,10 +57,6 @@ void MachineDominanceFrontierWrapperPass::releaseMemory() {
MDF.releaseMemory();
}
-void MachineDominanceFrontier::releaseMemory() {
- Base.releaseMemory();
-}
-
void MachineDominanceFrontierWrapperPass::getAnalysisUsage(
AnalysisUsage &AU) const {
AU.setPreservesAll();
>From 3246064ba02b6e7833562c945debe4ac2fece3ad Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Fri, 30 Jan 2026 22:46:43 -0800
Subject: [PATCH 8/9] Fix types for invalidate arg
---
llvm/include/llvm/CodeGen/MachineDominanceFrontier.h | 4 ++--
llvm/lib/CodeGen/MachineDominanceFrontier.cpp | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
index ea55a2beea4c6..bbbd1a546a573 100644
--- a/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/llvm/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -31,8 +31,8 @@ class MachineDominanceFrontier
MachineDominanceFrontier() = default;
- bool invalidate(Function &F, const PreservedAnalyses &PA,
- FunctionAnalysisManager::Invalidator &);
+ bool invalidate(MachineFunction &F, const PreservedAnalyses &PA,
+ MachineFunctionAnalysisManager::Invalidator &);
};
class MachineDominanceFrontierWrapperPass : public MachineFunctionPass {
diff --git a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
index 06447e622a493..b229106fdc7ea 100644
--- a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
+++ b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp
@@ -37,8 +37,8 @@ char &llvm::MachineDominanceFrontierID =
MachineDominanceFrontierWrapperPass::ID;
bool MachineDominanceFrontier::invalidate(
- Function &F, const PreservedAnalyses &PA,
- FunctionAnalysisManager::Invalidator &) {
+ MachineFunction &F, const PreservedAnalyses &PA,
+ MachineFunctionAnalysisManager::Invalidator &) {
auto PAC = PA.getChecker<MachineDominanceFrontierAnalysis>();
return !(PAC.preserved() ||
PAC.preservedSet<AllAnalysesOn<MachineFunction>>() ||
>From fe2e5802ceb4d5c202ae2293c416562fcaf964c8 Mon Sep 17 00:00:00 2001
From: Anshul Nigham <nigham at google.com>
Date: Sat, 31 Jan 2026 09:04:46 -0800
Subject: [PATCH 9/9] Fix WebAssemblyExceptionInfoTest
---
.../Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp b/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp
index c36ed93a20cef..84c49eb2c8d09 100644
--- a/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp
+++ b/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp
@@ -168,7 +168,7 @@ body: |
MachineDominatorTree MDT;
MachineDominanceFrontier MDF;
MDT.recalculate(*MF);
- MDF.getBase().analyze(MDT);
+ MDF.analyze(MDT);
WEI.recalculate(*MF, MDT, MDF);
// Exception info structure:
@@ -342,7 +342,7 @@ body: |
MachineDominatorTree MDT;
MachineDominanceFrontier MDF;
MDT.recalculate(*MF);
- MDF.getBase().analyze(MDT);
+ MDF.analyze(MDT);
WEI.recalculate(*MF, MDT, MDF);
// Exception info structure:
More information about the llvm-commits
mailing list