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"
17- #include " llvm/CodeGen/MachineFunction.h"
1818#include " llvm/CodeGen/MachineFunctionPass.h"
1919#include " llvm/CodeGen/MachineInstr.h"
2020#include " llvm/CodeGen/MachineOperand.h"
2121#include " llvm/CodeGen/MachineRegisterInfo.h"
2222#include " llvm/CodeGen/TargetSubtargetInfo.h"
23+ #include " llvm/IR/Function.h"
2324#include " llvm/InitializePasses.h"
2425#include " llvm/Pass.h"
2526#include < cassert>
@@ -33,23 +34,12 @@ STATISTIC(NumDeadPHICycles, "Number of dead PHI cycles");
3334
3435namespace {
3536
36- class OptimizePHIs : public MachineFunctionPass {
37+ class OptimizePHIs {
3738 MachineRegisterInfo *MRI = nullptr ;
3839 const TargetInstrInfo *TII = nullptr ;
3940
4041 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- }
42+ bool run (MachineFunction &Fn);
5343
5444 private:
5545 using InstrSet = SmallPtrSet<MachineInstr *, 16 >;
@@ -61,19 +51,48 @@ namespace {
6151 bool OptimizeBB (MachineBasicBlock &MBB);
6252 };
6353
54+ class OptimizePHIsLegacy : public MachineFunctionPass {
55+ public:
56+ static char ID;
57+ OptimizePHIsLegacy () : MachineFunctionPass(ID) {
58+ initializeOptimizePHIsLegacyPass (*PassRegistry::getPassRegistry ());
59+ }
60+
61+ bool runOnMachineFunction (MachineFunction &MF) override {
62+ if (skipFunction (MF.getFunction ()))
63+ return false ;
64+ OptimizePHIs OP;
65+ return OP.run (MF);
66+ }
67+
68+ void getAnalysisUsage (AnalysisUsage &AU) const override {
69+ AU.setPreservesCFG ();
70+ MachineFunctionPass::getAnalysisUsage (AU);
71+ }
72+ };
6473} // end anonymous namespace
6574
66- char OptimizePHIs ::ID = 0 ;
75+ char OptimizePHIsLegacy ::ID = 0 ;
6776
68- char &llvm::OptimizePHIsID = OptimizePHIs ::ID;
77+ char &llvm::OptimizePHIsLegacyID = OptimizePHIsLegacy ::ID;
6978
70- INITIALIZE_PASS (OptimizePHIs , DEBUG_TYPE,
79+ INITIALIZE_PASS (OptimizePHIsLegacy , DEBUG_TYPE,
7180 " Optimize machine instruction PHIs" , false , false )
7281
73- bool OptimizePHIs::runOnMachineFunction(MachineFunction &Fn) {
74- if (skipFunction (Fn.getFunction ()))
75- return false ;
82+ PreservedAnalyses OptimizePHIsPass::run(MachineFunction &MF,
83+ MachineFunctionAnalysisManager &MFAM) {
84+ if (MF.getFunction ().hasOptNone ())
85+ return PreservedAnalyses::all ();
86+
87+ OptimizePHIs OP;
88+ if (!OP.run (MF))
89+ return PreservedAnalyses::all ();
90+ auto PA = getMachineFunctionPassPreservedAnalyses ();
91+ PA.preserveSet <CFGAnalyses>();
92+ return PA;
93+ }
7694
95+ bool OptimizePHIs::run (MachineFunction &Fn) {
7796 MRI = &Fn.getRegInfo ();
7897 TII = Fn.getSubtarget ().getInstrInfo ();
7998
0 commit comments