danielcdh updated this revision to Diff 79629. danielcdh marked an inline comment as done. danielcdh added a comment.
Change the flag to -fprof-debug, which is more concise. The flag name is still open for discussion. https://reviews.llvm.org/D25435 Files: include/clang/Driver/Options.td include/clang/Frontend/CodeGenOptions.def lib/CodeGen/CGDebugInfo.cpp lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/Driver/clang_f_opts.c Index: test/Driver/clang_f_opts.c =================================================================== --- test/Driver/clang_f_opts.c +++ test/Driver/clang_f_opts.c @@ -469,3 +469,8 @@ // CHECK-WCHAR2: -fshort-wchar // CHECK-WCHAR2-NOT: -fno-short-wchar // DELIMITERS: {{^ *"}} + +// RUN: %clang -### -S -fno-prof-debug -fprof-debug %s 2>&1 | FileCheck -check-prefix=CHECK-PROF-DEBUG %s +// RUN: %clang -### -S -fprof-debug -fno-prof-debug %s 2>&1 | FileCheck -check-prefix=CHECK-NO-PROF-DEBUG %s +// CHECK-PROF-DEBUG: -fprof-debug +// CHECK-NO-PROF-DEBUG-NOT: -fprof-debug Index: lib/Frontend/CompilerInvocation.cpp =================================================================== --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -538,6 +538,7 @@ 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.ProfDebug = Args.hasFlag(OPT_fprof_debug, OPT_fno_prof_debug, false); setPGOInstrumentor(Opts, Args, Diags); Opts.InstrProfileOutput = Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -5508,6 +5508,10 @@ A->render(Args, CmdArgs); } + if (Args.hasFlag(options::OPT_fprof_debug, + options::OPT_fno_prof_debug, false)) + CmdArgs.push_back("-fprof-debug"); + // -fbuiltin is default unless -mkernel is used. bool UseBuiltins = Args.hasFlag(options::OPT_fbuiltin, options::OPT_fno_builtin, Index: lib/CodeGen/CGDebugInfo.cpp =================================================================== --- lib/CodeGen/CGDebugInfo.cpp +++ lib/CodeGen/CGDebugInfo.cpp @@ -2739,9 +2739,10 @@ } // 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().ProfDebug && DebugKind <= codegenoptions::DebugLineTablesOnly)) LinkageName = StringRef(); Index: include/clang/Frontend/CodeGenOptions.def =================================================================== --- include/clang/Frontend/CodeGenOptions.def +++ include/clang/Frontend/CodeGenOptions.def @@ -256,6 +256,9 @@ /// Whether copy relocations support is available when building as PIE. CODEGENOPT(PIECopyRelocations, 1, 0) +/// Whether emit extra debug info for sample pgo profile collection. +CODEGENOPT(ProfDebug, 1, 0) + #undef CODEGENOPT #undef ENUM_CODEGENOPT #undef VALUE_CODEGENOPT Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -509,6 +509,12 @@ HelpText<"Enable sample-based profile guided optimizations">; def fauto_profile_EQ : Joined<["-"], "fauto-profile=">, Alias<fprofile_sample_use_EQ>; +def fprof_debug : Flag<["-"], "fprof-debug">, Group<f_Group>, + Flags<[CC1Option]>, + HelpText<"Emit extra debug info to make sample profile more accurate.">; +def fno_prof_debug : Flag<["-"], "fno-prof-debug">, 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<[DriverOption]>, HelpText<"Generate instrumented code to collect execution counts into default.profraw file (overriden by '=' form of option or LLVM_PROFILE_FILE env var)">;
Index: test/Driver/clang_f_opts.c =================================================================== --- test/Driver/clang_f_opts.c +++ test/Driver/clang_f_opts.c @@ -469,3 +469,8 @@ // CHECK-WCHAR2: -fshort-wchar // CHECK-WCHAR2-NOT: -fno-short-wchar // DELIMITERS: {{^ *"}} + +// RUN: %clang -### -S -fno-prof-debug -fprof-debug %s 2>&1 | FileCheck -check-prefix=CHECK-PROF-DEBUG %s +// RUN: %clang -### -S -fprof-debug -fno-prof-debug %s 2>&1 | FileCheck -check-prefix=CHECK-NO-PROF-DEBUG %s +// CHECK-PROF-DEBUG: -fprof-debug +// CHECK-NO-PROF-DEBUG-NOT: -fprof-debug Index: lib/Frontend/CompilerInvocation.cpp =================================================================== --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -538,6 +538,7 @@ 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.ProfDebug = Args.hasFlag(OPT_fprof_debug, OPT_fno_prof_debug, false); setPGOInstrumentor(Opts, Args, Diags); Opts.InstrProfileOutput = Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -5508,6 +5508,10 @@ A->render(Args, CmdArgs); } + if (Args.hasFlag(options::OPT_fprof_debug, + options::OPT_fno_prof_debug, false)) + CmdArgs.push_back("-fprof-debug"); + // -fbuiltin is default unless -mkernel is used. bool UseBuiltins = Args.hasFlag(options::OPT_fbuiltin, options::OPT_fno_builtin, Index: lib/CodeGen/CGDebugInfo.cpp =================================================================== --- lib/CodeGen/CGDebugInfo.cpp +++ lib/CodeGen/CGDebugInfo.cpp @@ -2739,9 +2739,10 @@ } // 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().ProfDebug && DebugKind <= codegenoptions::DebugLineTablesOnly)) LinkageName = StringRef(); Index: include/clang/Frontend/CodeGenOptions.def =================================================================== --- include/clang/Frontend/CodeGenOptions.def +++ include/clang/Frontend/CodeGenOptions.def @@ -256,6 +256,9 @@ /// Whether copy relocations support is available when building as PIE. CODEGENOPT(PIECopyRelocations, 1, 0) +/// Whether emit extra debug info for sample pgo profile collection. +CODEGENOPT(ProfDebug, 1, 0) + #undef CODEGENOPT #undef ENUM_CODEGENOPT #undef VALUE_CODEGENOPT Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -509,6 +509,12 @@ HelpText<"Enable sample-based profile guided optimizations">; def fauto_profile_EQ : Joined<["-"], "fauto-profile=">, Alias<fprofile_sample_use_EQ>; +def fprof_debug : Flag<["-"], "fprof-debug">, Group<f_Group>, + Flags<[CC1Option]>, + HelpText<"Emit extra debug info to make sample profile more accurate.">; +def fno_prof_debug : Flag<["-"], "fno-prof-debug">, 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<[DriverOption]>, HelpText<"Generate instrumented code to collect execution counts into default.profraw file (overriden by '=' form of option or LLVM_PROFILE_FILE env var)">;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits