[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
This revision was automatically updated to reflect the committed changes. Closed by commit rL331592: [ThinLTO] Support opt remarks options with distributed ThinLTO backends (authored by tejohnson, committed by ). Herald added a subscriber: llvm-commits. Repository: rL LLVM https://reviews.llvm.org/D46464 Files: cfe/trunk/lib/CodeGen/BackendUtil.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll cfe/trunk/test/CodeGen/thinlto_backend.ll Index: cfe/trunk/test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll === --- cfe/trunk/test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll +++ cfe/trunk/test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll @@ -0,0 +1,47 @@ +; Test to ensure -fdiagnostics-show-hotness and -fsave-optimization-record +; work when invoking the ThinLTO backend path. +; RUN: opt -module-summary -o %t.o %s +; RUN: llvm-lto -thinlto -o %t %t.o + +; First try with pass remarks to stderr +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -mllvm -pass-remarks=inline -fdiagnostics-show-hotness -o %t2.o -c 2>&1 | FileCheck %s + +; CHECK: tinkywinky inlined into main with cost=0 (threshold=337) (hotness: 300) + +; Next try YAML pass remarks file +; RUN: rm -f %t2.opt.yaml +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml | FileCheck %s -check-prefix=YAML + +; YAML: --- !Passed +; YAML-NEXT: Pass:inline +; YAML-NEXT: Name:Inlined +; YAML-NEXT: Function:main +; YAML-NEXT: Hotness: 300 +; YAML-NEXT: Args: +; YAML-NEXT: - Callee: tinkywinky +; YAML-NEXT: - String: ' inlined into ' +; YAML-NEXT: - Caller: main +; YAML-NEXT: - String: ' with cost=' +; YAML-NEXT: - Cost:'0' +; YAML-NEXT: - String: ' (threshold=' +; YAML-NEXT: - Threshold: '337' +; YAML-NEXT: - String: ')' +; YAML-NEXT: ... + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-scei-ps4" + +declare i32 @patatino() + +define i32 @tinkywinky() { + %a = call i32 @patatino() + ret i32 %a +} + +define i32 @main() !prof !0 { + %i = call i32 @tinkywinky() + ret i32 %i +} + +!0 = !{!"function_entry_count", i64 300} Index: cfe/trunk/test/CodeGen/thinlto_backend.ll === --- cfe/trunk/test/CodeGen/thinlto_backend.ll +++ cfe/trunk/test/CodeGen/thinlto_backend.ll @@ -29,13 +29,13 @@ ; Ensure f2 was imported. Check for all 3 flavors of -save-temps[=cwd|obj]. ; RUN: %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps=obj -; RUN: llvm-dis %t1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s +; RUN: llvm-dis %t1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s ; RUN: mkdir -p %T/dir1 ; RUN: (cd %T/dir1 && %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps=cwd) -; RUN: llvm-dis %T/dir1/*1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s +; RUN: llvm-dis %T/dir1/*1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s ; RUN: mkdir -p %T/dir2 ; RUN: (cd %T/dir2 && %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps) -; RUN: llvm-dis %T/dir2/*1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s +; RUN: llvm-dis %T/dir2/*1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s ; CHECK-IMPORT: define available_externally void @f2() ; RUN: llvm-nm %t3.o | FileCheck --check-prefix=CHECK-OBJ %s ; CHECK-OBJ: T f1 Index: cfe/trunk/lib/CodeGen/BackendUtil.cpp === --- cfe/trunk/lib/CodeGen/BackendUtil.cpp +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp @@ -1136,6 +1136,8 @@ Conf.SampleProfile = std::move(SampleProfile); Conf.UseNewPM = CGOpts.ExperimentalNewPassManager; Conf.DebugPassManager = CGOpts.DebugPassManager; + Conf.RemarksWithHotness = CGOpts.DiagnosticsWithHotness; + Conf.RemarksFilename = CGOpts.OptRecordFile; switch (Action) { case Backend_EmitNothing: Conf.PreCodeGenModuleHook = [](size_t Task, const Module ) { @@ -1159,7 +1161,7 @@ break; } if (Error E = thinBackend( - Conf, 0, AddStream, *M, *CombinedIndex, ImportList, + Conf, -1, AddStream, *M, *CombinedIndex, ImportList, ModuleToDefinedGVSummaries[M->getModuleIdentifier()], ModuleMap)) { handleAllErrors(std::move(E), [&](ErrorInfoBase ) { errs() << "Error running ThinLTO backend: " << EIB.message() << '\n'; Index: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
pcc accepted this revision. pcc added a comment. LGTM Repository: rC Clang https://reviews.llvm.org/D46464 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
tejohnson added inline comments. Comment at: test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll:14 +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml.thin.0.yaml | FileCheck %s -check-prefix=YAML + pcc wrote: > This file isn't named correctly according to the `-foptimization-record-file` > flag, right? Looks like the easy fix would be to pass -1 as the task > identifier to thinBackend, but it would probably be worth looking more > closely at some point at how we name these extra files in LTO. I realized after cleaning out old test outputs that this causes an issue with the handling of save-temps for ThinLTO distributed backends. Previously they were adding the task ID of "0", and this became unsigned -1 after this change. I sent an LLVM patch D46488 to change that so no Task ID is added to the path if it is -1, and updated the test in this clang patch. Repository: rC Clang https://reviews.llvm.org/D46464 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
tejohnson updated this revision to Diff 145348. tejohnson added a comment. Update test for change to pass -1 as the Task ID for distributed backends, and to reflect companion llvm change (https://reviews.llvm.org/D46488). Repository: rC Clang https://reviews.llvm.org/D46464 Files: lib/CodeGen/BackendUtil.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll test/CodeGen/thinlto_backend.ll Index: test/CodeGen/thinlto_backend.ll === --- test/CodeGen/thinlto_backend.ll +++ test/CodeGen/thinlto_backend.ll @@ -29,13 +29,13 @@ ; Ensure f2 was imported. Check for all 3 flavors of -save-temps[=cwd|obj]. ; RUN: %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps=obj -; RUN: llvm-dis %t1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s +; RUN: llvm-dis %t1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s ; RUN: mkdir -p %T/dir1 ; RUN: (cd %T/dir1 && %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps=cwd) -; RUN: llvm-dis %T/dir1/*1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s +; RUN: llvm-dis %T/dir1/*1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s ; RUN: mkdir -p %T/dir2 ; RUN: (cd %T/dir2 && %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc -save-temps) -; RUN: llvm-dis %T/dir2/*1.s.0.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s +; RUN: llvm-dis %T/dir2/*1.s.3.import.bc -o - | FileCheck --check-prefix=CHECK-IMPORT %s ; CHECK-IMPORT: define available_externally void @f2() ; RUN: llvm-nm %t3.o | FileCheck --check-prefix=CHECK-OBJ %s ; CHECK-OBJ: T f1 Index: test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll === --- /dev/null +++ test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll @@ -0,0 +1,47 @@ +; Test to ensure -fdiagnostics-show-hotness and -fsave-optimization-record +; work when invoking the ThinLTO backend path. +; RUN: opt -module-summary -o %t.o %s +; RUN: llvm-lto -thinlto -o %t %t.o + +; First try with pass remarks to stderr +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -mllvm -pass-remarks=inline -fdiagnostics-show-hotness -o %t2.o -c 2>&1 | FileCheck %s + +; CHECK: tinkywinky inlined into main with cost=0 (threshold=337) (hotness: 300) + +; Next try YAML pass remarks file +; RUN: rm -f %t2.opt.yaml +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml | FileCheck %s -check-prefix=YAML + +; YAML: --- !Passed +; YAML-NEXT: Pass:inline +; YAML-NEXT: Name:Inlined +; YAML-NEXT: Function:main +; YAML-NEXT: Hotness: 300 +; YAML-NEXT: Args: +; YAML-NEXT: - Callee: tinkywinky +; YAML-NEXT: - String: ' inlined into ' +; YAML-NEXT: - Caller: main +; YAML-NEXT: - String: ' with cost=' +; YAML-NEXT: - Cost:'0' +; YAML-NEXT: - String: ' (threshold=' +; YAML-NEXT: - Threshold: '337' +; YAML-NEXT: - String: ')' +; YAML-NEXT: ... + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-scei-ps4" + +declare i32 @patatino() + +define i32 @tinkywinky() { + %a = call i32 @patatino() + ret i32 %a +} + +define i32 @main() !prof !0 { + %i = call i32 @tinkywinky() + ret i32 %i +} + +!0 = !{!"function_entry_count", i64 300} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -1075,7 +1075,9 @@ bool UsingProfile = UsingSampleProfile || (Opts.getProfileUse() != CodeGenOptions::ProfileNone); - if (Opts.DiagnosticsWithHotness && !UsingProfile) + if (Opts.DiagnosticsWithHotness && !UsingProfile && + // An IR file will contain PGO as metadata + IK.getLanguage() != InputKind::LLVM_IR) Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << "-fdiagnostics-show-hotness"; Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -1136,6 +1136,8 @@ Conf.SampleProfile = std::move(SampleProfile); Conf.UseNewPM = CGOpts.ExperimentalNewPassManager; Conf.DebugPassManager = CGOpts.DebugPassManager; + Conf.RemarksWithHotness = CGOpts.DiagnosticsWithHotness; + Conf.RemarksFilename = CGOpts.OptRecordFile; switch (Action) { case Backend_EmitNothing: Conf.PreCodeGenModuleHook = [](size_t Task, const Module ) { @@ -1159,7 +1161,7 @@ break; } if (Error E = thinBackend( - Conf, 0,
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
pcc accepted this revision. pcc added a comment. This revision is now accepted and ready to land. LGTM Repository: rC Clang https://reviews.llvm.org/D46464 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
tejohnson marked an inline comment as done. tejohnson added a comment. Fixed the output file as suggested. Also note that this test will fail and can't go in until after https://reviews.llvm.org/D46387 Repository: rC Clang https://reviews.llvm.org/D46464 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
tejohnson updated this revision to Diff 145321. tejohnson added a comment. Address comments Repository: rC Clang https://reviews.llvm.org/D46464 Files: lib/CodeGen/BackendUtil.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll Index: test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll === --- /dev/null +++ test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll @@ -0,0 +1,47 @@ +; Test to ensure -fdiagnostics-show-hotness and -fsave-optimization-record +; work when invoking the ThinLTO backend path. +; RUN: opt -module-summary -o %t.o %s +; RUN: llvm-lto -thinlto -o %t %t.o + +; First try with pass remarks to stderr +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -mllvm -pass-remarks=inline -fdiagnostics-show-hotness -o %t2.o -c 2>&1 | FileCheck %s + +; CHECK: tinkywinky inlined into main with cost=0 (threshold=337) (hotness: 300) + +; Next try YAML pass remarks file +; RUN: rm -f %t2.opt.yaml +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml | FileCheck %s -check-prefix=YAML + +; YAML: --- !Passed +; YAML-NEXT: Pass:inline +; YAML-NEXT: Name:Inlined +; YAML-NEXT: Function:main +; YAML-NEXT: Hotness: 300 +; YAML-NEXT: Args: +; YAML-NEXT: - Callee: tinkywinky +; YAML-NEXT: - String: ' inlined into ' +; YAML-NEXT: - Caller: main +; YAML-NEXT: - String: ' with cost=' +; YAML-NEXT: - Cost:'0' +; YAML-NEXT: - String: ' (threshold=' +; YAML-NEXT: - Threshold: '337' +; YAML-NEXT: - String: ')' +; YAML-NEXT: ... + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-scei-ps4" + +declare i32 @patatino() + +define i32 @tinkywinky() { + %a = call i32 @patatino() + ret i32 %a +} + +define i32 @main() !prof !0 { + %i = call i32 @tinkywinky() + ret i32 %i +} + +!0 = !{!"function_entry_count", i64 300} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -1075,7 +1075,9 @@ bool UsingProfile = UsingSampleProfile || (Opts.getProfileUse() != CodeGenOptions::ProfileNone); - if (Opts.DiagnosticsWithHotness && !UsingProfile) + if (Opts.DiagnosticsWithHotness && !UsingProfile && + // An IR file will contain PGO as metadata + IK.getLanguage() != InputKind::LLVM_IR) Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << "-fdiagnostics-show-hotness"; Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -1136,6 +1136,8 @@ Conf.SampleProfile = std::move(SampleProfile); Conf.UseNewPM = CGOpts.ExperimentalNewPassManager; Conf.DebugPassManager = CGOpts.DebugPassManager; + Conf.RemarksWithHotness = CGOpts.DiagnosticsWithHotness; + Conf.RemarksFilename = CGOpts.OptRecordFile; switch (Action) { case Backend_EmitNothing: Conf.PreCodeGenModuleHook = [](size_t Task, const Module ) { @@ -1159,7 +1161,7 @@ break; } if (Error E = thinBackend( - Conf, 0, AddStream, *M, *CombinedIndex, ImportList, + Conf, -1, AddStream, *M, *CombinedIndex, ImportList, ModuleToDefinedGVSummaries[M->getModuleIdentifier()], ModuleMap)) { handleAllErrors(std::move(E), [&](ErrorInfoBase ) { errs() << "Error running ThinLTO backend: " << EIB.message() << '\n'; Index: test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll === --- /dev/null +++ test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll @@ -0,0 +1,47 @@ +; Test to ensure -fdiagnostics-show-hotness and -fsave-optimization-record +; work when invoking the ThinLTO backend path. +; RUN: opt -module-summary -o %t.o %s +; RUN: llvm-lto -thinlto -o %t %t.o + +; First try with pass remarks to stderr +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -mllvm -pass-remarks=inline -fdiagnostics-show-hotness -o %t2.o -c 2>&1 | FileCheck %s + +; CHECK: tinkywinky inlined into main with cost=0 (threshold=337) (hotness: 300) + +; Next try YAML pass remarks file +; RUN: rm -f %t2.opt.yaml +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml | FileCheck %s -check-prefix=YAML + +; YAML: --- !Passed +; YAML-NEXT: Pass:inline +; YAML-NEXT: Name:Inlined +; YAML-NEXT: Function:main +; YAML-NEXT: Hotness: 300 +; YAML-NEXT: Args: +; YAML-NEXT: - Callee: tinkywinky +; YAML-NEXT: - String:
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
pcc added inline comments. Comment at: test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll:14 +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml.thin.0.yaml | FileCheck %s -check-prefix=YAML + This file isn't named correctly according to the `-foptimization-record-file` flag, right? Looks like the easy fix would be to pass -1 as the task identifier to thinBackend, but it would probably be worth looking more closely at some point at how we name these extra files in LTO. Repository: rC Clang https://reviews.llvm.org/D46464 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D46464: [ThinLTO] Support opt remarks options with distributed ThinLTO backends
tejohnson created this revision. tejohnson added a reviewer: pcc. Herald added subscribers: eraman, inglorion, mehdi_amini. Passes down the necessary code ge options to the LTO Config to enable -fdiagnostics-show-hotness and -fsave-optimization-record in the ThinLTO backend for a distributed build. Also, remove warning about not having PGO when the input is IR. Repository: rC Clang https://reviews.llvm.org/D46464 Files: lib/CodeGen/BackendUtil.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll Index: test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll === --- /dev/null +++ test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll @@ -0,0 +1,47 @@ +; Test to ensure -fdiagnostics-show-hotness and -fsave-optimization-record +; work when invoking the ThinLTO backend path. +; RUN: opt -module-summary -o %t.o %s +; RUN: llvm-lto -thinlto -o %t %t.o + +; First try with pass remarks to stderr +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -mllvm -pass-remarks=inline -fdiagnostics-show-hotness -o %t2.o -c 2>&1 | FileCheck %s + +; CHECK: tinkywinky inlined into main with cost=0 (threshold=337) (hotness: 300) + +; Next try YAML pass remarks file +; RUN: rm -f %t2.opt.yaml.thin.0.yaml +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml.thin.0.yaml | FileCheck %s -check-prefix=YAML + +; YAML: --- !Passed +; YAML-NEXT: Pass:inline +; YAML-NEXT: Name:Inlined +; YAML-NEXT: Function:main +; YAML-NEXT: Hotness: 300 +; YAML-NEXT: Args: +; YAML-NEXT: - Callee: tinkywinky +; YAML-NEXT: - String: ' inlined into ' +; YAML-NEXT: - Caller: main +; YAML-NEXT: - String: ' with cost=' +; YAML-NEXT: - Cost:'0' +; YAML-NEXT: - String: ' (threshold=' +; YAML-NEXT: - Threshold: '337' +; YAML-NEXT: - String: ')' +; YAML-NEXT: ... + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-scei-ps4" + +declare i32 @patatino() + +define i32 @tinkywinky() { + %a = call i32 @patatino() + ret i32 %a +} + +define i32 @main() !prof !0 { + %i = call i32 @tinkywinky() + ret i32 %i +} + +!0 = !{!"function_entry_count", i64 300} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -1075,7 +1075,9 @@ bool UsingProfile = UsingSampleProfile || (Opts.getProfileUse() != CodeGenOptions::ProfileNone); - if (Opts.DiagnosticsWithHotness && !UsingProfile) + if (Opts.DiagnosticsWithHotness && !UsingProfile && + // An IR file will contain PGO as metadata + IK.getLanguage() != InputKind::LLVM_IR) Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << "-fdiagnostics-show-hotness"; Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -1136,6 +1136,8 @@ Conf.SampleProfile = std::move(SampleProfile); Conf.UseNewPM = CGOpts.ExperimentalNewPassManager; Conf.DebugPassManager = CGOpts.DebugPassManager; + Conf.RemarksWithHotness = CGOpts.DiagnosticsWithHotness; + Conf.RemarksFilename = CGOpts.OptRecordFile; switch (Action) { case Backend_EmitNothing: Conf.PreCodeGenModuleHook = [](size_t Task, const Module ) { Index: test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll === --- /dev/null +++ test/CodeGen/thinlto-diagnostic-handler-remarks-with-hotness.ll @@ -0,0 +1,47 @@ +; Test to ensure -fdiagnostics-show-hotness and -fsave-optimization-record +; work when invoking the ThinLTO backend path. +; RUN: opt -module-summary -o %t.o %s +; RUN: llvm-lto -thinlto -o %t %t.o + +; First try with pass remarks to stderr +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -mllvm -pass-remarks=inline -fdiagnostics-show-hotness -o %t2.o -c 2>&1 | FileCheck %s + +; CHECK: tinkywinky inlined into main with cost=0 (threshold=337) (hotness: 300) + +; Next try YAML pass remarks file +; RUN: rm -f %t2.opt.yaml.thin.0.yaml +; RUN: %clang -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -fsave-optimization-record -fdiagnostics-show-hotness -o %t2.o -c +; RUN: cat %t2.opt.yaml.thin.0.yaml | FileCheck %s -check-prefix=YAML + +; YAML: --- !Passed +; YAML-NEXT: Pass:inline +; YAML-NEXT: Name:Inlined +; YAML-NEXT: Function:main +; YAML-NEXT: Hotness: 300 +; YAML-NEXT: Args: +; YAML-NEXT: - Callee: tinkywinky +; YAML-NEXT: - String: ' inlined into ' +; YAML-NEXT: - Caller: main +; YAML-NEXT: - String: