Index: lib/LTO/LTOBackend.cpp =================================================================== --- lib/LTO/LTOBackend.cpp +++ lib/LTO/LTOBackend.cpp @@ -498,13 +498,23 @@ std::unique_ptr TM = createTargetMachine(Conf, *TOrErr, Mod); + // Setup optimization remarks. + auto DiagFileOrErr = lto::setupOptimizationRemarks( + Mod.getContext(), Conf.RemarksFilename, Conf.RemarksWithHotness, Task); + if (!DiagFileOrErr) + return DiagFileOrErr.takeError(); + auto DiagnosticOutputFile = std::move(*DiagFileOrErr); + if (Conf.CodeGenOnly) { codegen(Conf, TM.get(), AddStream, Task, Mod); + finalizeOptimizationRemarks(std::move(DiagnosticOutputFile)); return Error::success(); } - if (Conf.PreOptModuleHook && !Conf.PreOptModuleHook(Task, Mod)) + if (Conf.PreOptModuleHook && !Conf.PreOptModuleHook(Task, Mod)) { + finalizeOptimizationRemarks(std::move(DiagnosticOutputFile)); return Error::success(); + } renameModuleForThinLTO(Mod, CombinedIndex); @@ -512,15 +522,19 @@ thinLTOResolveWeakForLinkerModule(Mod, DefinedGlobals); - if (Conf.PostPromoteModuleHook && !Conf.PostPromoteModuleHook(Task, Mod)) + if (Conf.PostPromoteModuleHook && !Conf.PostPromoteModuleHook(Task, Mod)) { + finalizeOptimizationRemarks(std::move(DiagnosticOutputFile)); return Error::success(); + } if (!DefinedGlobals.empty()) thinLTOInternalizeModule(Mod, DefinedGlobals); if (Conf.PostInternalizeModuleHook && - !Conf.PostInternalizeModuleHook(Task, Mod)) + !Conf.PostInternalizeModuleHook(Task, Mod)) { + finalizeOptimizationRemarks(std::move(DiagnosticOutputFile)); return Error::success(); + } auto ModuleLoader = [&](StringRef Identifier) { assert(Mod.getContext().isODRUniquingDebugTypes() && @@ -536,13 +550,18 @@ if (Error Err = Importer.importFunctions(Mod, ImportList).takeError()) return Err; - if (Conf.PostImportModuleHook && !Conf.PostImportModuleHook(Task, Mod)) + if (Conf.PostImportModuleHook && !Conf.PostImportModuleHook(Task, Mod)) { + finalizeOptimizationRemarks(std::move(DiagnosticOutputFile)); return Error::success(); + } if (!opt(Conf, TM.get(), Task, Mod, /*IsThinLTO=*/true, - /*ExportSummary=*/nullptr, /*ImportSummary=*/&CombinedIndex)) + /*ExportSummary=*/nullptr, /*ImportSummary=*/&CombinedIndex)) { + finalizeOptimizationRemarks(std::move(DiagnosticOutputFile)); return Error::success(); + } codegen(Conf, TM.get(), AddStream, Task, Mod); + finalizeOptimizationRemarks(std::move(DiagnosticOutputFile)); return Error::success(); } Index: test/LTO/Resolution/X86/diagnostic-handler-remarks.ll =================================================================== --- test/LTO/Resolution/X86/diagnostic-handler-remarks.ll +++ test/LTO/Resolution/X86/diagnostic-handler-remarks.ll @@ -1,5 +1,7 @@ -; RUN: llvm-as < %s >%t.bc +; Test of LTO with opt remarks YAML output. +; First try with Regular LTO +; RUN: llvm-as < %s >%t.bc ; RUN: rm -f %t.yaml ; RUN: llvm-lto2 run -pass-remarks-output=%t.yaml \ ; RUN: -r %t.bc,tinkywinky,p \ @@ -7,6 +9,15 @@ ; RUN: -r %t.bc,main,px -o %t.o %t.bc ; RUN: cat %t.yaml | FileCheck %s -check-prefix=YAML +; Try again with ThinLTO +; RUN: opt -module-summary %s -o %t.bc +; RUN: rm -f %t.thin.1.yaml +; RUN: llvm-lto2 run -pass-remarks-output=%t \ +; RUN: -r %t.bc,tinkywinky,p \ +; RUN: -r %t.bc,patatino,px \ +; RUN: -r %t.bc,main,px -o %t.o %t.bc +; RUN: cat %t.thin.1.yaml | FileCheck %s -check-prefix=YAML + ; YAML: --- !Passed ; YAML-NEXT: Pass: inline ; YAML-NEXT: Name: Inlined