1414//
1515// ===----------------------------------------------------------------------===//
1616
17+ #include " llvm/CodeGen/FinalizeISel.h"
1718#include " llvm/CodeGen/MachineFrameInfo.h"
1819#include " llvm/CodeGen/MachineFunction.h"
1920#include " llvm/CodeGen/MachineFunctionPass.h"
@@ -40,13 +41,9 @@ namespace {
4041 };
4142} // end anonymous namespace
4243
43- char FinalizeISel::ID = 0 ;
44- char &llvm::FinalizeISelID = FinalizeISel::ID;
45- INITIALIZE_PASS (FinalizeISel, DEBUG_TYPE,
46- " Finalize ISel and expand pseudo-instructions" , false , false )
47-
48- bool FinalizeISel::runOnMachineFunction(MachineFunction &MF) {
44+ static std::pair<bool , bool > runImpl (MachineFunction &MF) {
4945 bool Changed = false ;
46+ bool PreserveCFG = true ;
5047 const TargetInstrInfo *TII = MF.getSubtarget ().getInstrInfo ();
5148 const TargetLowering *TLI = MF.getSubtarget ().getTargetLowering ();
5249
@@ -68,6 +65,7 @@ bool FinalizeISel::runOnMachineFunction(MachineFunction &MF) {
6865 MachineBasicBlock *NewMBB = TLI->EmitInstrWithCustomInserter (MI, MBB);
6966 // The expansion may involve new basic blocks.
7067 if (NewMBB != MBB) {
68+ PreserveCFG = false ;
7169 MBB = NewMBB;
7270 I = NewMBB->getIterator ();
7371 MBBI = NewMBB->begin ();
@@ -79,5 +77,25 @@ bool FinalizeISel::runOnMachineFunction(MachineFunction &MF) {
7977
8078 TLI->finalizeLowering (MF);
8179
82- return Changed;
80+ return {Changed, PreserveCFG};
81+ }
82+
83+ char FinalizeISel::ID = 0 ;
84+ char &llvm::FinalizeISelID = FinalizeISel::ID;
85+ INITIALIZE_PASS (FinalizeISel, DEBUG_TYPE,
86+ " Finalize ISel and expand pseudo-instructions" , false , false )
87+
88+ bool FinalizeISel::runOnMachineFunction(MachineFunction &MF) {
89+ return runImpl (MF).first ;
90+ }
91+
92+ PreservedAnalyses FinalizeISelPass::run (MachineFunction &MF,
93+ MachineFunctionAnalysisManager &) {
94+ auto [Changed, PreserveCFG] = runImpl (MF);
95+ if (!Changed)
96+ return PreservedAnalyses::all ();
97+ auto PA = getMachineFunctionPassPreservedAnalyses ();
98+ if (PreserveCFG)
99+ PA.preserveSet <CFGAnalyses>();
100+ return PA;
83101}
0 commit comments