[llvm] [CodeGen] Port DeadMachineInstructionElim to new pass manager (PR #80582)
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 5 10:16:59 PST 2024
================
@@ -28,37 +29,57 @@ using namespace llvm;
STATISTIC(NumDeletes, "Number of dead instructions deleted");
namespace {
- class DeadMachineInstructionElim : public MachineFunctionPass {
- bool runOnMachineFunction(MachineFunction &MF) override;
+class DeadMachineInstructionElimImpl {
+ const MachineRegisterInfo *MRI = nullptr;
+ const TargetInstrInfo *TII = nullptr;
+ LiveRegUnits LivePhysRegs;
- const MachineRegisterInfo *MRI = nullptr;
- const TargetInstrInfo *TII = nullptr;
- LiveRegUnits LivePhysRegs;
+public:
+ bool runImpl(MachineFunction &MF);
- public:
- static char ID; // Pass identification, replacement for typeid
- DeadMachineInstructionElim() : MachineFunctionPass(ID) {
- initializeDeadMachineInstructionElimPass(*PassRegistry::getPassRegistry());
- }
+private:
+ bool isDead(const MachineInstr *MI) const;
+ bool eliminateDeadMI(MachineFunction &MF);
+};
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.setPreservesCFG();
- MachineFunctionPass::getAnalysisUsage(AU);
- }
+class DeadMachineInstructionElim : public MachineFunctionPass {
+public:
+ static char ID; // Pass identification, replacement for typeid
- private:
- bool isDead(const MachineInstr *MI) const;
+ DeadMachineInstructionElim() : MachineFunctionPass(ID) {
+ initializeDeadMachineInstructionElimPass(*PassRegistry::getPassRegistry());
+ }
+
+ bool runOnMachineFunction(MachineFunction &MF) override {
+ if (skipFunction(MF.getFunction()))
+ return false;
+ return DeadMachineInstructionElimImpl().runImpl(MF);
+ }
- bool eliminateDeadMI(MachineFunction &MF);
- };
+ void getAnalysisUsage(AnalysisUsage &AU) const override {
+ AU.setPreservesCFG();
+ MachineFunctionPass::getAnalysisUsage(AU);
+ }
+};
+} // namespace
+
+PreservedAnalyses
+DeadMachineInstructionElimPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &) {
+ if (!DeadMachineInstructionElimImpl().runImpl(MF))
+ return PreservedAnalyses::all();
+ PreservedAnalyses PA;
+ PA.preserveSet<CFGAnalyses>();
----------------
aeubanks wrote:
I'm working on this sort of thing in https://github.com/aeubanks/llvm-project/commit/91e493983d7c2f135767e2a78c0247565011e864. We can port passes in the meantime though.
Question: can an MIR function pass ever modify the corresponding IR function? Module MIR passes can introduce dummy IR functions corresponding to new (e.g. outlined) MIR functions, but that's different.
https://github.com/llvm/llvm-project/pull/80582
More information about the llvm-commits
mailing list