Skip to content

Commit 88f08e9

Browse files
committed
[CodeGen][NPM] Port UnreachableMachineBlockElim to NPM
1 parent a09fd9c commit 88f08e9

File tree

6 files changed

+63
-20
lines changed

6 files changed

+63
-20
lines changed

llvm/include/llvm/CodeGen/UnreachableBlockElim.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#ifndef LLVM_CODEGEN_UNREACHABLEBLOCKELIM_H
2323
#define LLVM_CODEGEN_UNREACHABLEBLOCKELIM_H
2424

25+
#include "llvm/CodeGen/MachinePassManager.h"
2526
#include "llvm/IR/PassManager.h"
2627

2728
namespace llvm {
@@ -31,6 +32,13 @@ class UnreachableBlockElimPass
3132
public:
3233
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
3334
};
35+
36+
class UnreachableMachineBlockElimPass
37+
: public PassInfoMixin<UnreachableMachineBlockElimPass> {
38+
public:
39+
PreservedAnalyses run(MachineFunction &F, MachineFunctionAnalysisManager &AM);
40+
};
41+
3442
} // end namespace llvm
3543

3644
#endif // LLVM_CODEGEN_UNREACHABLEBLOCKELIM_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ void initializeUniformityInfoWrapperPassPass(PassRegistry &);
315315
void initializeUnifyLoopExitsLegacyPassPass(PassRegistry &);
316316
void initializeUnpackMachineBundlesPass(PassRegistry &);
317317
void initializeUnreachableBlockElimLegacyPassPass(PassRegistry &);
318-
void initializeUnreachableMachineBlockElimPass(PassRegistry &);
318+
void initializeUnreachableMachineBlockElimLegacyPass(PassRegistry &);
319319
void initializeVerifierLegacyPassPass(PassRegistry &);
320320
void initializeVirtRegMapWrapperLegacyPass(PassRegistry &);
321321
void initializeVirtRegRewriterPass(PassRegistry &);

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass())
194194
MACHINE_FUNCTION_PASS("tailduplication", TailDuplicatePass())
195195
MACHINE_FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass())
196196
MACHINE_FUNCTION_PASS("two-address-instruction", TwoAddressInstructionPass())
197+
MACHINE_FUNCTION_PASS("unreachable-machine-block-elim",
198+
UnreachableMachineBlockElimPass())
197199
MACHINE_FUNCTION_PASS("verify", MachineVerifierPass())
198200
MACHINE_FUNCTION_PASS("verify<machine-trace-metrics>", MachineTraceMetricsVerifierPass())
199201
MACHINE_FUNCTION_PASS("xray-instrumentation", XRayInstrumentationPass())

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
140140
initializeTypePromotionLegacyPass(Registry);
141141
initializeUnpackMachineBundlesPass(Registry);
142142
initializeUnreachableBlockElimLegacyPassPass(Registry);
143-
initializeUnreachableMachineBlockElimPass(Registry);
143+
initializeUnreachableMachineBlockElimLegacyPass(Registry);
144144
initializeVirtRegMapWrapperLegacyPass(Registry);
145145
initializeVirtRegRewriterPass(Registry);
146146
initializeWasmEHPreparePass(Registry);

llvm/lib/CodeGen/LiveVariables.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ char LiveVariablesWrapperPass::ID = 0;
6161
char &llvm::LiveVariablesID = LiveVariablesWrapperPass::ID;
6262
INITIALIZE_PASS_BEGIN(LiveVariablesWrapperPass, "livevars",
6363
"Live Variable Analysis", false, false)
64-
INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElim)
64+
INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElimLegacy)
6565
INITIALIZE_PASS_END(LiveVariablesWrapperPass, "livevars",
6666
"Live Variable Analysis", false, false)
6767

llvm/lib/CodeGen/UnreachableBlockElim.cpp

Lines changed: 50 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,39 +72,72 @@ PreservedAnalyses UnreachableBlockElimPass::run(Function &F,
7272
}
7373

7474
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;
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

Comments
 (0)