diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -992,6 +992,16 @@ MPM.addPass(InstrProfiling(*Options, false)); }); + // TODO: Consider passing the MemoryProfileOutput to the pass builder via + // the PGOOptions, and set this up there. + if (!CodeGenOpts.MemoryProfileOutput.empty()) { + PB.registerOptimizerLastEPCallback( + [](ModulePassManager &MPM, OptimizationLevel Level) { + MPM.addPass(createModuleToFunctionPassAdaptor(MemProfilerPass())); + MPM.addPass(ModuleMemProfilerPass()); + }); + } + if (IsThinLTO) { MPM = PB.buildThinLTOPreLinkDefaultPipeline(Level); } else if (IsLTO) { @@ -999,11 +1009,6 @@ } else { MPM = PB.buildPerModuleDefaultPipeline(Level); } - - if (!CodeGenOpts.MemoryProfileOutput.empty()) { - MPM.addPass(createModuleToFunctionPassAdaptor(MemProfilerPass())); - MPM.addPass(ModuleMemProfilerPass()); - } } // Add a verifier pass if requested. We don't have to do this if the action diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -155,9 +155,6 @@ cl::Hidden, cl::desc("Enable inline deferral during PGO")); -static cl::opt EnableMemProfiler("enable-mem-prof", cl::Hidden, - cl::desc("Enable memory profiler")); - static cl::opt EnableModuleInliner("enable-module-inliner", cl::init(false), cl::Hidden, cl::desc("Enable module inliner")); @@ -1122,11 +1119,6 @@ MPM.addPass(GlobalOptPass()); MPM.addPass(GlobalDCEPass()); - if (EnableMemProfiler && Phase != ThinOrFullLTOPhase::ThinLTOPreLink) { - MPM.addPass(createModuleToFunctionPassAdaptor(MemProfilerPass())); - MPM.addPass(ModuleMemProfilerPass()); - } - return MPM; }