Skip to content

Commit

Permalink
[Frontend] 'Show hotness' can be used with a sampling profile
Browse files Browse the repository at this point in the history
Summary:
Prior to this change, using `-fdiagnostics-show-hotness` with a sampling
profile specified via `-fprofile-sample-use=` would result in the Clang
frontend emitting a warning: "argument '-fdiagnostics-show-hotness' requires
profile-guided optimization information". Of course, a sampling profile
*is* profile-guided optimization information, so the warning is misleading.
Furthermore, despite the warning, hotness was displayed based on the data in
the sampling profile.

Prevent the warning from being emitted when a sampling profile is used, and
add a test that verifies this.

Reviewers: anemet, davidxl

Reviewed By: davidxl

Subscribers: danielcdh, cfe-commits

Differential Revision: https://reviews.llvm.org/D34082

llvm-svn: 306079
  • Loading branch information
modocache committed Jun 23, 2017
1 parent 34e94a8 commit 0ea5888
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 3 deletions.
8 changes: 6 additions & 2 deletions clang/lib/Frontend/CompilerInvocation.cpp
Expand Up @@ -892,14 +892,18 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,

Opts.DiagnosticsWithHotness =
Args.hasArg(options::OPT_fdiagnostics_show_hotness);
bool UsingSampleProfile = !Opts.SampleProfileFile.empty();

if (Opts.DiagnosticsWithHotness &&
Opts.getProfileUse() == CodeGenOptions::ProfileNone)
Opts.getProfileUse() == CodeGenOptions::ProfileNone &&
!UsingSampleProfile) {
Diags.Report(diag::warn_drv_fdiagnostics_show_hotness_requires_pgo);
}

// If the user requested to use a sample profile for PGO, then the
// backend will need to track source location information so the profile
// can be incorporated into the IR.
if (!Opts.SampleProfileFile.empty())
if (UsingSampleProfile)
NeedLocTracking = true;

// If the user requested a flag that requires source locations available in
Expand Down
@@ -0,0 +1,7 @@
foo:0:0
0: 0
bar:29:29
6: foo:0
main:0:0
0: 0 bar:0

12 changes: 11 additions & 1 deletion clang/test/Frontend/optimization-remark-with-hotness.c
@@ -1,11 +1,21 @@
// Generate instrumentation and sampling profile data.
// RUN: llvm-profdata merge \
// RUN: %S/Inputs/optimization-remark-with-hotness.proftext \
// RUN: %S/Inputs/optimization-remark-with-hotness.proftext \
// RUN: -o %t.profdata
// RUN: llvm-profdata merge -sample \
// RUN: %S/Inputs/optimization-remark-with-hotness-sample.proftext \
// RUN: -o %t-sample.profdata
//
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name \
// RUN: optimization-remark-with-hotness.c %s -emit-llvm-only \
// RUN: -fprofile-instrument-use-path=%t.profdata -Rpass=inline \
// RUN: -Rpass-analysis=inline -Rpass-missed=inline \
// RUN: -fdiagnostics-show-hotness -verify
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name \
// RUN: optimization-remark-with-hotness.c %s -emit-llvm-only \
// RUN: -fprofile-sample-use=%t-sample.profdata -Rpass=inline \
// RUN: -Rpass-analysis=inline -Rpass-missed=inline \
// RUN: -fdiagnostics-show-hotness -verify
// The clang version of the previous test.
// RUN: %clang -target x86_64-apple-macosx10.9 %s -c -emit-llvm -o /dev/null \
// RUN: -fprofile-instr-use=%t.profdata -Rpass=inline \
Expand Down

0 comments on commit 0ea5888

Please sign in to comment.