1111//
1212// ===----------------------------------------------------------------------===//
1313
14+ #include " llvm/CodeGen/OptimizePHIs.h"
1415#include " llvm/ADT/SmallPtrSet.h"
1516#include " llvm/ADT/Statistic.h"
1617#include " llvm/CodeGen/MachineBasicBlock.h"
1718#include " llvm/CodeGen/MachineFunction.h"
1819#include " llvm/CodeGen/MachineFunctionPass.h"
1920#include " llvm/CodeGen/MachineInstr.h"
2021#include " llvm/CodeGen/MachineOperand.h"
22+ #include " llvm/CodeGen/MachinePassManager.h"
2123#include " llvm/CodeGen/MachineRegisterInfo.h"
2224#include " llvm/CodeGen/TargetSubtargetInfo.h"
25+ #include " llvm/IR/Analysis.h"
2326#include " llvm/InitializePasses.h"
2427#include " llvm/Pass.h"
2528#include < cassert>
@@ -33,23 +36,12 @@ STATISTIC(NumDeadPHICycles, "Number of dead PHI cycles");
3336
3437namespace {
3538
36- class OptimizePHIs : public MachineFunctionPass {
39+ class OptimizePHIs {
3740 MachineRegisterInfo *MRI = nullptr ;
3841 const TargetInstrInfo *TII = nullptr ;
3942
4043 public:
41- static char ID; // Pass identification
42-
43- OptimizePHIs () : MachineFunctionPass(ID) {
44- initializeOptimizePHIsPass (*PassRegistry::getPassRegistry ());
45- }
46-
47- bool runOnMachineFunction (MachineFunction &Fn) override ;
48-
49- void getAnalysisUsage (AnalysisUsage &AU) const override {
50- AU.setPreservesCFG ();
51- MachineFunctionPass::getAnalysisUsage (AU);
52- }
44+ bool run (MachineFunction &Fn);
5345
5446 private:
5547 using InstrSet = SmallPtrSet<MachineInstr *, 16 >;
@@ -61,19 +53,45 @@ namespace {
6153 bool OptimizeBB (MachineBasicBlock &MBB);
6254 };
6355
56+ class OptimizePHIsLegacy : public MachineFunctionPass {
57+ public:
58+ static char ID;
59+ OptimizePHIsLegacy () : MachineFunctionPass(ID) {
60+ initializeOptimizePHIsLegacyPass (*PassRegistry::getPassRegistry ());
61+ }
62+
63+ bool runOnMachineFunction (MachineFunction &MF) override {
64+ if (skipFunction (MF.getFunction ()))
65+ return false ;
66+ OptimizePHIs OP;
67+ return OP.run (MF);
68+ }
69+
70+ void getAnalysisUsage (AnalysisUsage &AU) const override {
71+ AU.setPreservesCFG ();
72+ MachineFunctionPass::getAnalysisUsage (AU);
73+ }
74+ };
6475} // end anonymous namespace
6576
66- char OptimizePHIs ::ID = 0 ;
77+ char OptimizePHIsLegacy ::ID = 0 ;
6778
68- char &llvm::OptimizePHIsID = OptimizePHIs ::ID;
79+ char &llvm::OptimizePHIsLegacyID = OptimizePHIsLegacy ::ID;
6980
70- INITIALIZE_PASS (OptimizePHIs , DEBUG_TYPE,
81+ INITIALIZE_PASS (OptimizePHIsLegacy , DEBUG_TYPE,
7182 " Optimize machine instruction PHIs" , false , false )
7283
73- bool OptimizePHIs::runOnMachineFunction(MachineFunction &Fn) {
74- if (skipFunction (Fn.getFunction ()))
75- return false ;
84+ PreservedAnalyses OptimizePHIsPass::run(MachineFunction &MF,
85+ MachineFunctionAnalysisManager &MFAM) {
86+ OptimizePHIs OP;
87+ if (!OP.run (MF))
88+ return PreservedAnalyses::all ();
89+ auto PA = getMachineFunctionPassPreservedAnalyses ();
90+ PA.preserveSet <CFGAnalyses>();
91+ return PA;
92+ }
7693
94+ bool OptimizePHIs::run (MachineFunction &Fn) {
7795 MRI = &Fn.getRegInfo ();
7896 TII = Fn.getSubtarget ().getInstrInfo ();
7997
0 commit comments