diff --git a/llvm/lib/CodeGen/MachinePassManager.cpp b/llvm/lib/CodeGen/MachinePassManager.cpp index a13f820e45776..914e6b19fde9a 100644 --- a/llvm/lib/CodeGen/MachinePassManager.cpp +++ b/llvm/lib/CodeGen/MachinePassManager.cpp @@ -33,10 +33,11 @@ Error MachineFunctionPassManager::run(Module &M, (void)RequireCodeGenSCCOrder; assert(!RequireCodeGenSCCOrder && "not implemented"); + // M is unused here + PassInstrumentation PI = MFAM.getResult(M); + // Add a PIC to verify machine functions. if (VerifyMachineFunction) { - PassInstrumentation PI = MFAM.getResult(M); - // No need to pop this callback later since MIR pipeline is flat which means // current pipeline is the top-level pipeline. Callbacks are not used after // current pipeline. @@ -59,8 +60,11 @@ Error MachineFunctionPassManager::run(Module &M, do { // Run machine module passes for (; MachineModulePasses.count(Idx) && Idx != Size; ++Idx) { + if (!PI.runBeforePass(*Passes[Idx], M)) + continue; if (auto Err = MachineModulePasses.at(Idx)(M, MFAM)) return Err; + PI.runAfterPass(*Passes[Idx], M, PreservedAnalyses::all()); } // Finish running all passes. @@ -81,7 +85,6 @@ Error MachineFunctionPassManager::run(Module &M, continue; MachineFunction &MF = MMI.getOrCreateMachineFunction(F); - PassInstrumentation PI = MFAM.getResult(MF); for (unsigned I = Begin, E = Idx; I != E; ++I) { auto *P = Passes[I].get();