diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index c3536113e9bef..a04b89d296113 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -942,13 +942,20 @@ void AMDGPUTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) { *this, Opt, ThinOrFullLTOPhase::FullLTOPostLink)); } } - if (!NoKernelInfoEndLTO) { - FunctionPassManager FPM; - FPM.addPass(KernelInfoPrinter(this)); - PM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); - } }); + // Add kernel-info pass using OptimizerLastEPCallback to run during LTO + // while remark streamer is still active + if (!NoKernelInfoEndLTO) { + PB.registerOptimizerLastEPCallback([this](ModulePassManager &PM, + OptimizationLevel Level, + ThinOrFullLTOPhase Phase) { + FunctionPassManager FPM; + FPM.addPass(KernelInfoPrinter(this)); + PM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); + }); + } + PB.registerRegClassFilterParsingCallback( [](StringRef FilterName) -> RegAllocFilterFunc { if (FilterName == "sgpr") diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp index 0603994606d71..5f345369766cd 100644 --- a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -261,12 +261,13 @@ void NVPTXTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) { }); if (!NoKernelInfoEndLTO) { - PB.registerFullLinkTimeOptimizationLastEPCallback( - [this](ModulePassManager &PM, OptimizationLevel Level) { - FunctionPassManager FPM; - FPM.addPass(KernelInfoPrinter(this)); - PM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); - }); + PB.registerOptimizerLastEPCallback([this](ModulePassManager &PM, + OptimizationLevel Level, + ThinOrFullLTOPhase Phase) { + FunctionPassManager FPM; + FPM.addPass(KernelInfoPrinter(this)); + PM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); + }); } }