[PATCH] Support using sample profiles with partial debug info (driver)

Justin Bogner mail at justinbogner.com
Tue Oct 21 12:41:09 PDT 2014


Diego Novillo <dnovillo at google.com> writes:
> When using a profile, we used to require the use -gmlt so that we could
> get access to the line locations. This is used to match line numbers in
> the input profile to the line numbers in the function's IR.
>
> But this is actually not necessary. The driver can provide source
> location tracking without the emission of debug information. In these
> cases, the annotation 'llvm.dbg.cu' is missing from the IR, but the
> actual line location annotations are still present.
>
> This patch tells the driver to only emit source location tracking
> when -fprofile-sample-use is present in the command line.

LGTM with a minor nit.

> http://reviews.llvm.org/D5888
>
> Files:
>   lib/Frontend/CompilerInvocation.cpp
>   test/Frontend/Inputs/profile-sample-use-loc-tracking.prof
>   test/Frontend/profile-sample-use-loc-tracking.c
>
>
> Index: lib/Frontend/CompilerInvocation.cpp
> ===================================================================
> --- lib/Frontend/CompilerInvocation.cpp
> +++ lib/Frontend/CompilerInvocation.cpp
> @@ -575,6 +575,12 @@
>      NeedLocTracking = true;
>    }
>  
> +  // 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())
> +    NeedLocTracking = true;
> +
>    // If the user requested one of the flags in the -Rpass family, make sure
>    // that the backend tracks source location information.

Please update this comment, since NeedLocTracking isn't -Rpass specific
anymore.

>    if (NeedLocTracking && Opts.getDebugInfo() == CodeGenOptions::NoDebugInfo)
> Index: test/Frontend/Inputs/profile-sample-use-loc-tracking.prof
> ===================================================================
> --- /dev/null
> +++ test/Frontend/Inputs/profile-sample-use-loc-tracking.prof
> @@ -0,0 +1,2 @@
> +bar:100:100
> +1: 2000
> Index: test/Frontend/profile-sample-use-loc-tracking.c
> ===================================================================
> --- /dev/null
> +++ test/Frontend/profile-sample-use-loc-tracking.c
> @@ -0,0 +1,19 @@
> +// This file tests that -fprofile-sample-use enables location tracking
> +// generation in the same way that -Rpass does. The sample profiler needs
> +// to associate line locations in the profile to the code, so it needs the
> +// frontend to emit source location annotations.
> +
> +// RUN: %clang_cc1 %s -fprofile-sample-use=%S/Inputs/profile-sample-use-loc-tracking.prof -emit-llvm -o - 2>/dev/null | FileCheck %s
> +
> +// -fprofile-sample-use should produce source location annotations, exclusively
> +// (just like -gmlt).
> +// CHECK: , !dbg !
> +// CHECK-NOT: DW_TAG_base_type
> +
> +// But llvm.dbg.cu should be missing (to prevent writing debug info to
> +// the final output).
> +// CHECK-NOT: !llvm.dbg.cu = !{
> +
> +int bar(int j) {
> +  return (j + j - 2) * (j - 2) * j;
> +}
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list