@@ -72,39 +72,72 @@ PreservedAnalyses UnreachableBlockElimPass::run(Function &F,
72
72
}
73
73
74
74
namespace {
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 ;
85
96
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 )
88
100
89
- char &llvm::UnreachableMachineBlockElimID = UnreachableMachineBlockElim::ID;
101
+ char &llvm::UnreachableMachineBlockElimID =
102
+ UnreachableMachineBlockElimLegacy::ID;
90
103
91
- void UnreachableMachineBlockElim::getAnalysisUsage (AnalysisUsage &AU) const {
104
+ void UnreachableMachineBlockElimLegacy::getAnalysisUsage (
105
+ AnalysisUsage &AU) const {
92
106
AU.addPreserved <MachineLoopInfoWrapperPass>();
93
107
AU.addPreserved <MachineDominatorTreeWrapperPass>();
94
108
MachineFunctionPass::getAnalysisUsage (AU);
95
109
}
96
110
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
+ }
100
124
125
+ bool UnreachableMachineBlockElimLegacy::runOnMachineFunction (
126
+ MachineFunction &MF) {
101
127
MachineDominatorTreeWrapperPass *MDTWrapper =
102
128
getAnalysisIfAvailable<MachineDominatorTreeWrapperPass>();
103
129
MachineDominatorTree *MDT = MDTWrapper ? &MDTWrapper->getDomTree () : nullptr ;
104
130
MachineLoopInfoWrapperPass *MLIWrapper =
105
131
getAnalysisIfAvailable<MachineLoopInfoWrapperPass>();
106
132
MachineLoopInfo *MLI = MLIWrapper ? &MLIWrapper->getLI () : nullptr ;
107
133
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
+
108
141
// Mark all reachable blocks.
109
142
for (MachineBasicBlock *BB : depth_first_ext (&F, Reachable))
110
143
(void )BB/* Mark all reachable blocks */ ;
0 commit comments