@@ -72,39 +72,72 @@ PreservedAnalyses UnreachableBlockElimPass::run(Function &F,
7272}
7373
7474namespace {
75- class UnreachableMachineBlockElim : public MachineFunctionPass {
76- bool runOnMachineFunction (MachineFunction &F) override ;
77- void getAnalysisUsage (AnalysisUsage &AU) const override ;
78-
79- public:
80- static char ID; // Pass identification, replacement for typeid
81- UnreachableMachineBlockElim () : MachineFunctionPass(ID) {}
82- };
83- }
84- char UnreachableMachineBlockElim::ID = 0 ;
75+ class UnreachableMachineBlockElim {
76+ MachineDominatorTree *MDT;
77+ MachineLoopInfo *MLI;
78+
79+ public:
80+ UnreachableMachineBlockElim (MachineDominatorTree *MDT, MachineLoopInfo *MLI)
81+ : MDT(MDT), MLI(MLI) {}
82+ bool run (MachineFunction &MF);
83+ };
84+
85+ class UnreachableMachineBlockElimLegacy : public MachineFunctionPass {
86+ bool runOnMachineFunction (MachineFunction &F) override ;
87+ void getAnalysisUsage (AnalysisUsage &AU) const override ;
88+
89+ public:
90+ static char ID; // Pass identification, replacement for typeid
91+ UnreachableMachineBlockElimLegacy () : MachineFunctionPass(ID) {}
92+ };
93+ } // namespace
94+
95+ char UnreachableMachineBlockElimLegacy::ID = 0 ;
8596
86- INITIALIZE_PASS (UnreachableMachineBlockElim, " unreachable-mbb-elimination" ,
87- " Remove unreachable machine basic blocks" , false , false )
97+ INITIALIZE_PASS (UnreachableMachineBlockElimLegacy,
98+ " unreachable-mbb-elimination" ,
99+ " Remove unreachable machine basic blocks" , false , false )
88100
89- char &llvm::UnreachableMachineBlockElimID = UnreachableMachineBlockElim::ID;
101+ char &llvm::UnreachableMachineBlockElimID =
102+ UnreachableMachineBlockElimLegacy::ID;
90103
91- void UnreachableMachineBlockElim::getAnalysisUsage (AnalysisUsage &AU) const {
104+ void UnreachableMachineBlockElimLegacy::getAnalysisUsage (
105+ AnalysisUsage &AU) const {
92106 AU.addPreserved <MachineLoopInfoWrapperPass>();
93107 AU.addPreserved <MachineDominatorTreeWrapperPass>();
94108 MachineFunctionPass::getAnalysisUsage (AU);
95109}
96110
97- bool UnreachableMachineBlockElim::runOnMachineFunction (MachineFunction &F) {
98- df_iterator_default_set<MachineBasicBlock*> Reachable;
99- bool ModifiedPHI = false ;
111+ PreservedAnalyses
112+ UnreachableMachineBlockElimPass::run (MachineFunction &MF,
113+ MachineFunctionAnalysisManager &AM) {
114+ auto *MDT = AM.getCachedResult <MachineDominatorTreeAnalysis>(MF);
115+ auto *MLI = AM.getCachedResult <MachineLoopAnalysis>(MF);
116+
117+ if (!UnreachableMachineBlockElim (MDT, MLI).run (MF))
118+ return PreservedAnalyses::all ();
119+
120+ return getMachineFunctionPassPreservedAnalyses ()
121+ .preserve <MachineLoopAnalysis>()
122+ .preserve <MachineDominatorTreeAnalysis>();
123+ }
100124
125+ bool UnreachableMachineBlockElimLegacy::runOnMachineFunction (
126+ MachineFunction &MF) {
101127 MachineDominatorTreeWrapperPass *MDTWrapper =
102128 getAnalysisIfAvailable<MachineDominatorTreeWrapperPass>();
103129 MachineDominatorTree *MDT = MDTWrapper ? &MDTWrapper->getDomTree () : nullptr ;
104130 MachineLoopInfoWrapperPass *MLIWrapper =
105131 getAnalysisIfAvailable<MachineLoopInfoWrapperPass>();
106132 MachineLoopInfo *MLI = MLIWrapper ? &MLIWrapper->getLI () : nullptr ;
107133
134+ return UnreachableMachineBlockElim (MDT, MLI).run (MF);
135+ }
136+
137+ bool UnreachableMachineBlockElim::run (MachineFunction &F) {
138+ df_iterator_default_set<MachineBasicBlock *> Reachable;
139+ bool ModifiedPHI = false ;
140+
108141 // Mark all reachable blocks.
109142 for (MachineBasicBlock *BB : depth_first_ext (&F, Reachable))
110143 (void )BB/* Mark all reachable blocks */ ;
0 commit comments