Skip to content

[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

Conversation

optimisan
Copy link
Contributor

No description provided.

Copy link
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@optimisan optimisan marked this pull request as ready for review April 17, 2025 11:04
@llvmbot
Copy link
Member

llvmbot commented Apr 17, 2025

@llvm/pr-subscribers-backend-hexagon
@llvm/pr-subscribers-debuginfo

@llvm/pr-subscribers-llvm-regalloc

Author: Akshat Oke (optimisan)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/136127.diff

6 Files Affected:

  • (modified) llvm/include/llvm/CodeGen/UnreachableBlockElim.h (+8)
  • (modified) llvm/include/llvm/InitializePasses.h (+1-1)
  • (modified) llvm/include/llvm/Passes/MachinePassRegistry.def (+2)
  • (modified) llvm/lib/CodeGen/CodeGen.cpp (+1-1)
  • (modified) llvm/lib/CodeGen/LiveVariables.cpp (+1-1)
  • (modified) llvm/lib/CodeGen/UnreachableBlockElim.cpp (+50-17)
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 */;

@optimisan optimisan force-pushed the users/optimisan/04-17-_codegen_npm_port_unreachablemachineblockelim_to_npm branch from 88f08e9 to 8d3c61a Compare April 17, 2025 11:10
@optimisan optimisan requested a review from Copilot April 17, 2025 11:11
Copy link
Contributor

@Copilot Copilot AI left a 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 {

@optimisan optimisan merged commit 31ddaef into main Apr 18, 2025
13 checks passed
@optimisan optimisan deleted the users/optimisan/04-17-_codegen_npm_port_unreachablemachineblockelim_to_npm branch April 18, 2025 09:36
IanWood1 pushed a commit to IanWood1/llvm-project that referenced this pull request May 6, 2025
IanWood1 pushed a commit to IanWood1/llvm-project that referenced this pull request May 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants