@@ -107,10 +107,8 @@ class BlockData {
107107
108108namespace {
109109
110- class SIModeRegister : public MachineFunctionPass {
110+ class SIModeRegister {
111111public:
112- static char ID;
113-
114112 std::vector<std::unique_ptr<BlockData>> BlockInfo;
115113 std::queue<MachineBasicBlock *> Phase2List;
116114
@@ -125,15 +123,7 @@ class SIModeRegister : public MachineFunctionPass {
125123
126124 bool Changed = false ;
127125
128- public:
129- SIModeRegister () : MachineFunctionPass(ID) {}
130-
131- bool runOnMachineFunction (MachineFunction &MF) override ;
132-
133- void getAnalysisUsage (AnalysisUsage &AU) const override {
134- AU.setPreservesCFG ();
135- MachineFunctionPass::getAnalysisUsage (AU);
136- }
126+ bool run (MachineFunction &MF);
137127
138128 void processBlockPhase1 (MachineBasicBlock &MBB, const SIInstrInfo *TII);
139129
@@ -146,16 +136,32 @@ class SIModeRegister : public MachineFunctionPass {
146136 void insertSetreg (MachineBasicBlock &MBB, MachineInstr *I,
147137 const SIInstrInfo *TII, Status InstrMode);
148138};
139+
140+ class SIModeRegisterLegacy : public MachineFunctionPass {
141+ public:
142+ static char ID;
143+
144+ SIModeRegisterLegacy () : MachineFunctionPass(ID) {}
145+
146+ bool runOnMachineFunction (MachineFunction &MF) override ;
147+
148+ void getAnalysisUsage (AnalysisUsage &AU) const override {
149+ AU.setPreservesCFG ();
150+ MachineFunctionPass::getAnalysisUsage (AU);
151+ }
152+ };
149153} // End anonymous namespace.
150154
151- INITIALIZE_PASS (SIModeRegister , DEBUG_TYPE,
155+ INITIALIZE_PASS (SIModeRegisterLegacy , DEBUG_TYPE,
152156 " Insert required mode register values" , false , false )
153157
154- char SIModeRegister ::ID = 0;
158+ char SIModeRegisterLegacy ::ID = 0;
155159
156- char &llvm::SIModeRegisterID = SIModeRegister ::ID;
160+ char &llvm::SIModeRegisterID = SIModeRegisterLegacy ::ID;
157161
158- FunctionPass *llvm::createSIModeRegisterPass () { return new SIModeRegister (); }
162+ FunctionPass *llvm::createSIModeRegisterPass () {
163+ return new SIModeRegisterLegacy ();
164+ }
159165
160166// Determine the Mode register setting required for this instruction.
161167// Instructions which don't use the Mode register return a null Status.
@@ -422,7 +428,20 @@ void SIModeRegister::processBlockPhase3(MachineBasicBlock &MBB,
422428 }
423429}
424430
425- bool SIModeRegister::runOnMachineFunction (MachineFunction &MF) {
431+ bool SIModeRegisterLegacy::runOnMachineFunction (MachineFunction &MF) {
432+ return SIModeRegister ().run (MF);
433+ }
434+
435+ PreservedAnalyses SIModeRegisterPass::run (MachineFunction &MF,
436+ MachineFunctionAnalysisManager &AM) {
437+ if (!SIModeRegister ().run (MF))
438+ return PreservedAnalyses::all ();
439+ auto PA = getMachineFunctionPassPreservedAnalyses ();
440+ PA.preserveSet <CFGAnalyses>();
441+ return PA;
442+ }
443+
444+ bool SIModeRegister::run (MachineFunction &MF) {
426445 // Constrained FP intrinsics are used to support non-default rounding modes.
427446 // strictfp attribute is required to mark functions with strict FP semantics
428447 // having constrained FP intrinsics. This pass fixes up operations that uses
0 commit comments