-
Notifications
You must be signed in to change notification settings - Fork 13.4k
[CodeGen][NPM] Port UnreachableMachineBlockElim to NPM #136127
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[CodeGen][NPM] Port UnreachableMachineBlockElim to NPM #136127
Conversation
@llvm/pr-subscribers-backend-hexagon @llvm/pr-subscribers-llvm-regalloc Author: Akshat Oke (optimisan) ChangesFull diff: https://github.com/llvm/llvm-project/pull/136127.diff 6 Files Affected:
diff --git a/llvm/include/llvm/CodeGen/UnreachableBlockElim.h b/llvm/include/llvm/CodeGen/UnreachableBlockElim.h
index 7dbae77e34401..3c2b701512df6 100644
--- a/llvm/include/llvm/CodeGen/UnreachableBlockElim.h
+++ b/llvm/include/llvm/CodeGen/UnreachableBlockElim.h
@@ -22,6 +22,7 @@
#ifndef LLVM_CODEGEN_UNREACHABLEBLOCKELIM_H
#define LLVM_CODEGEN_UNREACHABLEBLOCKELIM_H
+#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/IR/PassManager.h"
namespace llvm {
@@ -31,6 +32,13 @@ class UnreachableBlockElimPass
public:
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
};
+
+class UnreachableMachineBlockElimPass
+ : public PassInfoMixin<UnreachableMachineBlockElimPass> {
+public:
+ PreservedAnalyses run(MachineFunction &F, MachineFunctionAnalysisManager &AM);
+};
+
} // end namespace llvm
#endif // LLVM_CODEGEN_UNREACHABLEBLOCKELIM_H
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index 9fd8f8228a717..9bef8e496c57e 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -315,7 +315,7 @@ void initializeUniformityInfoWrapperPassPass(PassRegistry &);
void initializeUnifyLoopExitsLegacyPassPass(PassRegistry &);
void initializeUnpackMachineBundlesPass(PassRegistry &);
void initializeUnreachableBlockElimLegacyPassPass(PassRegistry &);
-void initializeUnreachableMachineBlockElimPass(PassRegistry &);
+void initializeUnreachableMachineBlockElimLegacyPass(PassRegistry &);
void initializeVerifierLegacyPassPass(PassRegistry &);
void initializeVirtRegMapWrapperLegacyPass(PassRegistry &);
void initializeVirtRegRewriterPass(PassRegistry &);
diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def
index fff5083caad1a..5f7645fe65106 100644
--- a/llvm/include/llvm/Passes/MachinePassRegistry.def
+++ b/llvm/include/llvm/Passes/MachinePassRegistry.def
@@ -194,6 +194,8 @@ MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass())
MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass())
MACHINE_FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass())
MACHINE_FUNCTION_PASS("two-address-instruction", TwoAddressInstructionPass())
+MACHINE_FUNCTION_PASS("unreachable-machine-block-elim",
+ UnreachableMachineBlockElimPass())
MACHINE_FUNCTION_PASS("verify", MachineVerifierPass())
MACHINE_FUNCTION_PASS("verify<machine-trace-metrics>", MachineTraceMetricsVerifierPass())
MACHINE_FUNCTION_PASS("xray-instrumentation", XRayInstrumentationPass())
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 2b0e93803971f..a34adcf4803c5 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -140,7 +140,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
initializeTypePromotionLegacyPass(Registry);
initializeUnpackMachineBundlesPass(Registry);
initializeUnreachableBlockElimLegacyPassPass(Registry);
- initializeUnreachableMachineBlockElimPass(Registry);
+ initializeUnreachableMachineBlockElimLegacyPass(Registry);
initializeVirtRegMapWrapperLegacyPass(Registry);
initializeVirtRegRewriterPass(Registry);
initializeWasmEHPreparePass(Registry);
diff --git a/llvm/lib/CodeGen/LiveVariables.cpp b/llvm/lib/CodeGen/LiveVariables.cpp
index ab95200af00e0..f8e0583839b23 100644
--- a/llvm/lib/CodeGen/LiveVariables.cpp
+++ b/llvm/lib/CodeGen/LiveVariables.cpp
@@ -61,7 +61,7 @@ char LiveVariablesWrapperPass::ID = 0;
char &llvm::LiveVariablesID = LiveVariablesWrapperPass::ID;
INITIALIZE_PASS_BEGIN(LiveVariablesWrapperPass, "livevars",
"Live Variable Analysis", false, false)
-INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElim)
+INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElimLegacy)
INITIALIZE_PASS_END(LiveVariablesWrapperPass, "livevars",
"Live Variable Analysis", false, false)
diff --git a/llvm/lib/CodeGen/UnreachableBlockElim.cpp b/llvm/lib/CodeGen/UnreachableBlockElim.cpp
index aa4ccec3338a9..f9f7b47160b6c 100644
--- a/llvm/lib/CodeGen/UnreachableBlockElim.cpp
+++ b/llvm/lib/CodeGen/UnreachableBlockElim.cpp
@@ -72,32 +72,58 @@ PreservedAnalyses UnreachableBlockElimPass::run(Function &F,
}
namespace {
- class UnreachableMachineBlockElim : public MachineFunctionPass {
- bool runOnMachineFunction(MachineFunction &F) override;
- void getAnalysisUsage(AnalysisUsage &AU) const override;
-
- public:
- static char ID; // Pass identification, replacement for typeid
- UnreachableMachineBlockElim() : MachineFunctionPass(ID) {}
- };
-}
-char UnreachableMachineBlockElim::ID = 0;
+class UnreachableMachineBlockElim {
+ MachineDominatorTree *MDT;
+ MachineLoopInfo *MLI;
+
+public:
+ UnreachableMachineBlockElim(MachineDominatorTree *MDT, MachineLoopInfo *MLI)
+ : MDT(MDT), MLI(MLI) {}
+ bool run(MachineFunction &MF);
+};
+
+class UnreachableMachineBlockElimLegacy : public MachineFunctionPass {
+ bool runOnMachineFunction(MachineFunction &F) override;
+ void getAnalysisUsage(AnalysisUsage &AU) const override;
+
+public:
+ static char ID; // Pass identification, replacement for typeid
+ UnreachableMachineBlockElimLegacy() : MachineFunctionPass(ID) {}
+};
+} // namespace
+
+char UnreachableMachineBlockElimLegacy::ID = 0;
-INITIALIZE_PASS(UnreachableMachineBlockElim, "unreachable-mbb-elimination",
- "Remove unreachable machine basic blocks", false, false)
+INITIALIZE_PASS(UnreachableMachineBlockElimLegacy,
+ "unreachable-mbb-elimination",
+ "Remove unreachable machine basic blocks", false, false)
-char &llvm::UnreachableMachineBlockElimID = UnreachableMachineBlockElim::ID;
+char &llvm::UnreachableMachineBlockElimID =
+ UnreachableMachineBlockElimLegacy::ID;
-void UnreachableMachineBlockElim::getAnalysisUsage(AnalysisUsage &AU) const {
+void UnreachableMachineBlockElimLegacy::getAnalysisUsage(
+ AnalysisUsage &AU) const {
AU.addPreserved<MachineLoopInfoWrapperPass>();
AU.addPreserved<MachineDominatorTreeWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
-bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
- df_iterator_default_set<MachineBasicBlock*> Reachable;
- bool ModifiedPHI = false;
+PreservedAnalyses
+UnreachableMachineBlockElimPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &AM) {
+ auto *MDT = AM.getCachedResult<MachineDominatorTreeAnalysis>(MF);
+ auto *MLI = AM.getCachedResult<MachineLoopAnalysis>(MF);
+
+ if (!UnreachableMachineBlockElim(MDT, MLI).run(MF))
+ return PreservedAnalyses::all();
+
+ return getMachineFunctionPassPreservedAnalyses()
+ .preserve<MachineLoopAnalysis>()
+ .preserve<MachineDominatorTreeAnalysis>();
+}
+bool UnreachableMachineBlockElimLegacy::runOnMachineFunction(
+ MachineFunction &MF) {
MachineDominatorTreeWrapperPass *MDTWrapper =
getAnalysisIfAvailable<MachineDominatorTreeWrapperPass>();
MachineDominatorTree *MDT = MDTWrapper ? &MDTWrapper->getDomTree() : nullptr;
@@ -105,6 +131,13 @@ bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
getAnalysisIfAvailable<MachineLoopInfoWrapperPass>();
MachineLoopInfo *MLI = MLIWrapper ? &MLIWrapper->getLI() : nullptr;
+ return UnreachableMachineBlockElim(MDT, MLI).run(MF);
+}
+
+bool UnreachableMachineBlockElim::run(MachineFunction &F) {
+ df_iterator_default_set<MachineBasicBlock *> Reachable;
+ bool ModifiedPHI = false;
+
// Mark all reachable blocks.
for (MachineBasicBlock *BB : depth_first_ext(&F, Reachable))
(void)BB/* Mark all reachable blocks */;
|
88f08e9
to
8d3c61a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 10 out of 10 changed files in this pull request and generated no comments.
Comments suppressed due to low confidence (1)
llvm/lib/CodeGen/UnreachableBlockElim.cpp:75
- [nitpick] Consider adding an inline comment clarifying the roles of 'UnreachableMachineBlockElim' versus 'UnreachableMachineBlockElimLegacy' to improve maintainability and reduce potential confusion.
class UnreachableMachineBlockElim {
No description provided.