danielcdh updated this revision to Diff 79770. danielcdh added a comment. change the flag name to -fprofile-debug
https://reviews.llvm.org/D25435 Files: include/clang/Driver/Options.td include/clang/Frontend/CodeGenOptions.def lib/CodeGen/BackendUtil.cpp 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-profile-debug -fprofile-debug %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-DEBUG %s +// RUN: %clang -### -S -fprofile-debug -fno-profile-debug %s 2>&1 | FileCheck -check-prefix=CHECK-NO-PROFILE-DEBUG %s +// CHECK-PROFILE-DEBUG: -fprofile-debug +// CHECK-NO-PROFILE-DEBUG-NOT: -fprofile-debug Index: lib/Frontend/CompilerInvocation.cpp =================================================================== --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -538,6 +538,8 @@ 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.ProfileDebug = Args.hasFlag(OPT_fprofile_debug, + OPT_fno_profile_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_fprofile_debug, + options::OPT_fno_profile_debug, false)) + CmdArgs.push_back("-fprofile-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().ProfileDebug && DebugKind <= codegenoptions::DebugLineTablesOnly)) LinkageName = StringRef(); Index: lib/CodeGen/BackendUtil.cpp =================================================================== --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -576,6 +576,7 @@ Options.DisableIntegratedAS = CodeGenOpts.DisableIntegratedAS; Options.CompressDebugSections = CodeGenOpts.CompressDebugSections; Options.RelaxELFRelocations = CodeGenOpts.RelaxELFRelocations; + Options.ProfileDebug = CodeGenOpts.ProfileDebug; // Set EABI version. Options.EABIVersion = llvm::StringSwitch<llvm::EABI>(TargetOpts.EABIVersion) 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(ProfileDebug, 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 fprofile_debug : Flag<["-"], "fprofile-debug">, Group<f_Group>, + Flags<[CC1Option]>, + HelpText<"Emit extra debug info to make sample profile more accurate.">; +def fno_profile_debug : Flag<["-"], "fno-profile-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-profile-debug -fprofile-debug %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-DEBUG %s +// RUN: %clang -### -S -fprofile-debug -fno-profile-debug %s 2>&1 | FileCheck -check-prefix=CHECK-NO-PROFILE-DEBUG %s +// CHECK-PROFILE-DEBUG: -fprofile-debug +// CHECK-NO-PROFILE-DEBUG-NOT: -fprofile-debug Index: lib/Frontend/CompilerInvocation.cpp =================================================================== --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -538,6 +538,8 @@ 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.ProfileDebug = Args.hasFlag(OPT_fprofile_debug, + OPT_fno_profile_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_fprofile_debug, + options::OPT_fno_profile_debug, false)) + CmdArgs.push_back("-fprofile-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().ProfileDebug && DebugKind <= codegenoptions::DebugLineTablesOnly)) LinkageName = StringRef(); Index: lib/CodeGen/BackendUtil.cpp =================================================================== --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -576,6 +576,7 @@ Options.DisableIntegratedAS = CodeGenOpts.DisableIntegratedAS; Options.CompressDebugSections = CodeGenOpts.CompressDebugSections; Options.RelaxELFRelocations = CodeGenOpts.RelaxELFRelocations; + Options.ProfileDebug = CodeGenOpts.ProfileDebug; // Set EABI version. Options.EABIVersion = llvm::StringSwitch<llvm::EABI>(TargetOpts.EABIVersion) 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(ProfileDebug, 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 fprofile_debug : Flag<["-"], "fprofile-debug">, Group<f_Group>, + Flags<[CC1Option]>, + HelpText<"Emit extra debug info to make sample profile more accurate.">; +def fno_profile_debug : Flag<["-"], "fno-profile-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