On Fri, Aug 18, 2017 at 5:22 PM, Dehao Chen <de...@google.com> wrote: > On Fri, Aug 18, 2017 at 2:46 PM, Hans Wennborg <h...@chromium.org> wrote: >> >> Should we mention this in the release notes? >> >> >> Is the flag documented somewhere? > > > It's documented in the Options.td file, do you think there are other > documents that need to be added/updated?
Maybe https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization if we think this is something users should be using. And if it improves things, perhaps its worth mentioning in the release notes? Thanks, Hans >> On Wed, Jan 18, 2017 at 4:44 PM, Dehao Chen via cfe-commits >> <cfe-commits@lists.llvm.org> wrote: >> > Author: dehao >> > Date: Wed Jan 18 18:44:21 2017 >> > New Revision: 292458 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=292458&view=rev >> > Log: >> > Add -fdebug-info-for-profiling to emit more debug info for sample pgo >> > profile collection >> > >> > Summary: >> > SamplePGO uses profile with debug info to collect profile. Unlike the >> > traditional debugging purpose, sample pgo needs more accurate debug info to >> > represent the profile. We add -femit-accurate-debug-info for this purpose. >> > It can be combined with all debugging modes (-g, -gmlt, etc). It makes sure >> > that the following pieces of info is always emitted: >> > >> > * start line of all subprograms >> > * linkage name of all subprograms >> > * standalone subprograms (functions that has neither inlined nor been >> > inlined) >> > >> > The impact on speccpu2006 binary size (size increase comparing with -g0 >> > binary, also includes data for -g binary, which does not change with this >> > patch): >> > >> > -gmlt(orig) -gmlt(patched) -g >> > 433.milc 4.68% 5.40% 19.73% >> > 444.namd 8.45% 8.93% 45.99% >> > 447.dealII 97.43% 115.21% 374.89% >> > 450.soplex 27.75% 31.88% 126.04% >> > 453.povray 21.81% 26.16% 92.03% >> > 470.lbm 0.60% 0.67% 1.96% >> > 482.sphinx3 5.77% 6.47% 26.17% >> > 400.perlbench 17.81% 19.43% 73.08% >> > 401.bzip2 3.73% 3.92% 12.18% >> > 403.gcc 31.75% 34.48% 122.75% >> > 429.mcf 0.78% 0.88% 3.89% >> > 445.gobmk 6.08% 7.92% 42.27% >> > 456.hmmer 10.36% 11.25% 35.23% >> > 458.sjeng 5.08% 5.42% 14.36% >> > 462.libquantum 1.71% 1.96% 6.36% >> > 464.h264ref 15.61% 16.56% 43.92% >> > 471.omnetpp 11.93% 15.84% 60.09% >> > 473.astar 3.11% 3.69% 14.18% >> > 483.xalancbmk 56.29% 81.63% 353.22% >> > geomean 15.60% 18.30% 57.81% >> > >> > Debug info size change for -gmlt binary with this patch: >> > >> > 433.milc 13.46% >> > 444.namd 5.35% >> > 447.dealII 18.21% >> > 450.soplex 14.68% >> > 453.povray 19.65% >> > 470.lbm 6.03% >> > 482.sphinx3 11.21% >> > 400.perlbench 8.91% >> > 401.bzip2 4.41% >> > 403.gcc 8.56% >> > 429.mcf 8.24% >> > 445.gobmk 29.47% >> > 456.hmmer 8.19% >> > 458.sjeng 6.05% >> > 462.libquantum 11.23% >> > 464.h264ref 5.93% >> > 471.omnetpp 31.89% >> > 473.astar 16.20% >> > 483.xalancbmk 44.62% >> > geomean 16.83% >> > >> > Reviewers: davidxl, andreadb, rob.lougher, dblaikie, echristo >> > >> > Reviewed By: dblaikie, echristo >> > >> > Subscribers: hfinkel, rob.lougher, andreadb, gbedwell, cfe-commits, >> > probinson, llvm-commits, mehdi_amini >> > >> > Differential Revision: https://reviews.llvm.org/D25435 >> > >> > Modified: >> > cfe/trunk/include/clang/Driver/Options.td >> > cfe/trunk/include/clang/Frontend/CodeGenOptions.def >> > cfe/trunk/lib/CodeGen/BackendUtil.cpp >> > cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> > cfe/trunk/lib/Driver/Tools.cpp >> > cfe/trunk/lib/Frontend/CompilerInvocation.cpp >> > cfe/trunk/test/Driver/clang_f_opts.c >> > >> > Modified: cfe/trunk/include/clang/Driver/Options.td >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=292458&r1=292457&r2=292458&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/include/clang/Driver/Options.td (original) >> > +++ cfe/trunk/include/clang/Driver/Options.td Wed Jan 18 18:44:21 2017 >> > @@ -516,6 +516,12 @@ def fprofile_sample_use_EQ : Joined<["-" >> > HelpText<"Enable sample-based profile guided optimizations">; >> > def fauto_profile_EQ : Joined<["-"], "fauto-profile=">, >> > Alias<fprofile_sample_use_EQ>; >> > +def fdebug_info_for_profiling : Flag<["-"], >> > "fdebug-info-for-profiling">, Group<f_Group>, >> > + Flags<[CC1Option]>, >> > + HelpText<"Emit extra debug info to make sample profile more >> > accurate.">; >> > +def fno_debug_info_for_profiling : Flag<["-"], >> > "fno-debug-info-for-profiling">, Group<f_Group>, >> > + Flags<[DriverOption]>, >> > + HelpText<"Do not emit extra debug info for sample profiler.">; >> > def fprofile_instr_generate : Flag<["-"], "fprofile-instr-generate">, >> > Group<f_Group>, Flags<[CoreOption]>, >> > HelpText<"Generate instrumented code to collect execution counts >> > into default.profraw file (overridden by '=' form of option or >> > LLVM_PROFILE_FILE env var)">; >> > >> > Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=292458&r1=292457&r2=292458&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original) >> > +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Wed Jan 18 >> > 18:44:21 2017 >> > @@ -258,6 +258,9 @@ CODEGENOPT(PIECopyRelocations, 1, 0) >> > /// paths that reach the end of a function without executing a required >> > return. >> > CODEGENOPT(StrictReturn, 1, 1) >> > >> > +/// Whether emit extra debug info for sample pgo profile collection. >> > +CODEGENOPT(DebugInfoForProfiling, 1, 0) >> > + >> > #undef CODEGENOPT >> > #undef ENUM_CODEGENOPT >> > #undef VALUE_CODEGENOPT >> > >> > Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=292458&r1=292457&r2=292458&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original) >> > +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Wed Jan 18 18:44:21 2017 >> > @@ -573,6 +573,7 @@ void EmitAssemblyHelper::CreateTargetMac >> > Options.DisableIntegratedAS = CodeGenOpts.DisableIntegratedAS; >> > Options.CompressDebugSections = CodeGenOpts.CompressDebugSections; >> > Options.RelaxELFRelocations = CodeGenOpts.RelaxELFRelocations; >> > + Options.DebugInfoForProfiling = CodeGenOpts.DebugInfoForProfiling; >> > >> > // Set EABI version. >> > Options.EABIVersion = >> > llvm::StringSwitch<llvm::EABI>(TargetOpts.EABIVersion) >> > >> > Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=292458&r1=292457&r2=292458&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) >> > +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Wed Jan 18 18:44:21 2017 >> > @@ -2774,9 +2774,10 @@ void CGDebugInfo::collectFunctionDeclPro >> > } >> > // No need to replicate the linkage name if it isn't different from >> > the >> > // subprogram name, no need to have it at all unless coverage is >> > enabled or >> > - // debug is set to more than just line tables. >> > + // debug is set to more than just line tables or extra debug info is >> > needed. >> > if (LinkageName == Name || (!CGM.getCodeGenOpts().EmitGcovArcs && >> > !CGM.getCodeGenOpts().EmitGcovNotes && >> > + >> > !CGM.getCodeGenOpts().DebugInfoForProfiling && >> > DebugKind <= >> > codegenoptions::DebugLineTablesOnly)) >> > LinkageName = StringRef(); >> > >> > >> > Modified: cfe/trunk/lib/Driver/Tools.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=292458&r1=292457&r2=292458&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/Driver/Tools.cpp (original) >> > +++ cfe/trunk/lib/Driver/Tools.cpp Wed Jan 18 18:44:21 2017 >> > @@ -5615,6 +5615,10 @@ void Clang::ConstructJob(Compilation &C, >> > A->render(Args, CmdArgs); >> > } >> > >> > + if (Args.hasFlag(options::OPT_fdebug_info_for_profiling, >> > + options::OPT_fno_debug_info_for_profiling, false)) >> > + CmdArgs.push_back("-fdebug-info-for-profiling"); >> > + >> > // -fbuiltin is default unless -mkernel is used. >> > bool UseBuiltins = >> > Args.hasFlag(options::OPT_fbuiltin, options::OPT_fno_builtin, >> > >> > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=292458&r1=292457&r2=292458&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) >> > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Jan 18 18:44:21 >> > 2017 >> > @@ -544,6 +544,8 @@ static bool ParseCodeGenArgs(CodeGenOpti >> > Opts.DisableIntegratedAS = Args.hasArg(OPT_fno_integrated_as); >> > Opts.Autolink = !Args.hasArg(OPT_fno_autolink); >> > Opts.SampleProfileFile = >> > Args.getLastArgValue(OPT_fprofile_sample_use_EQ); >> > + Opts.DebugInfoForProfiling = Args.hasFlag( >> > + OPT_fdebug_info_for_profiling, OPT_fno_debug_info_for_profiling, >> > false); >> > >> > setPGOInstrumentor(Opts, Args, Diags); >> > Opts.InstrProfileOutput = >> > >> > Modified: cfe/trunk/test/Driver/clang_f_opts.c >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/clang_f_opts.c?rev=292458&r1=292457&r2=292458&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/test/Driver/clang_f_opts.c (original) >> > +++ cfe/trunk/test/Driver/clang_f_opts.c Wed Jan 18 18:44:21 2017 >> > @@ -482,3 +482,8 @@ >> > // RUN: %clang -### -S -fno-strict-return %s 2>&1 | FileCheck >> > -check-prefix=CHECK-NO-STRICT-RETURN %s >> > // CHECK-STRICT-RETURN-NOT: "-fno-strict-return" >> > // CHECK-NO-STRICT-RETURN: "-fno-strict-return" >> > + >> > +// RUN: %clang -### -S -fno-debug-info-for-profiling >> > -fdebug-info-for-profiling %s 2>&1 | FileCheck >> > -check-prefix=CHECK-PROFILE-DEBUG %s >> > +// RUN: %clang -### -S -fdebug-info-for-profiling >> > -fno-debug-info-for-profiling %s 2>&1 | FileCheck >> > -check-prefix=CHECK-NO-PROFILE-DEBUG %s >> > +// CHECK-PROFILE-DEBUG: -fdebug-info-for-profiling >> > +// CHECK-NO-PROFILE-DEBUG-NOT: -fdebug-info-for-profiling >> > >> > >> > _______________________________________________ >> > cfe-commits mailing list >> > cfe-commits@lists.llvm.org >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits