danielcdh created this revision. Herald added a subscriber: sanjoy. With accurate sample profile, we can do more aggressive size optimization. For some size-critical application, this can reduce the text size by 20%
https://reviews.llvm.org/D37091 Files: include/clang/Driver/Options.td lib/Driver/ToolChains/Clang.cpp Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -2340,6 +2340,12 @@ true)) CmdArgs.push_back("-fno-jump-tables"); + if (Args.hasFlag(options::OPT_faccurate_sample_profile, + options::OPT_fno_accurate_sample_profile, false)) { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-accurate-sample-profile"); + } + if (!Args.hasFlag(options::OPT_fpreserve_as_comments, options::OPT_fno_preserve_as_comments, true)) CmdArgs.push_back("-fno-preserve-as-comments"); Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -587,6 +587,14 @@ def fPIE : Flag<["-"], "fPIE">, Group<f_Group>; def fno_PIE : Flag<["-"], "fno-PIE">, Group<f_Group>; def faccess_control : Flag<["-"], "faccess-control">, Group<f_Group>; +def faccurate_sample_profile : Flag<["-"], "faccurate-sample-profile">, + Group<f_Group>, Flags<[DriverOption]>, + HelpText<"If sample profile is accurate, we will mark all un-sampled " + "callsite as cold. Otherwise, treat un-sampled callsites as if " + "we have no profile">; +def fno_accurate_sample_profile : Flag<["-"], "fno-accurate-sample-profile">, + Group<f_Group>, Flags<[DriverOption]>; + def fallow_unsupported : Flag<["-"], "fallow-unsupported">, Group<f_Group>; def fapple_kext : Flag<["-"], "fapple-kext">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use Apple's kernel extensions ABI">; @@ -643,6 +651,10 @@ Alias<fno_profile_sample_use>; def fauto_profile_EQ : Joined<["-"], "fauto-profile=">, Alias<fprofile_sample_use_EQ>; +def fauto_profile_accurate : Flag<["-"], "fauto-profile-accurate">, + Group<f_Group>, Alias<faccurate_sample_profile>; +def fno_auto_profile_accurate : Flag<["-"], "fno-auto-profile-accurate">, + Group<f_Group>, Alias<fno_accurate_sample_profile>; 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.">;
Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -2340,6 +2340,12 @@ true)) CmdArgs.push_back("-fno-jump-tables"); + if (Args.hasFlag(options::OPT_faccurate_sample_profile, + options::OPT_fno_accurate_sample_profile, false)) { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-accurate-sample-profile"); + } + if (!Args.hasFlag(options::OPT_fpreserve_as_comments, options::OPT_fno_preserve_as_comments, true)) CmdArgs.push_back("-fno-preserve-as-comments"); Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -587,6 +587,14 @@ def fPIE : Flag<["-"], "fPIE">, Group<f_Group>; def fno_PIE : Flag<["-"], "fno-PIE">, Group<f_Group>; def faccess_control : Flag<["-"], "faccess-control">, Group<f_Group>; +def faccurate_sample_profile : Flag<["-"], "faccurate-sample-profile">, + Group<f_Group>, Flags<[DriverOption]>, + HelpText<"If sample profile is accurate, we will mark all un-sampled " + "callsite as cold. Otherwise, treat un-sampled callsites as if " + "we have no profile">; +def fno_accurate_sample_profile : Flag<["-"], "fno-accurate-sample-profile">, + Group<f_Group>, Flags<[DriverOption]>; + def fallow_unsupported : Flag<["-"], "fallow-unsupported">, Group<f_Group>; def fapple_kext : Flag<["-"], "fapple-kext">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use Apple's kernel extensions ABI">; @@ -643,6 +651,10 @@ Alias<fno_profile_sample_use>; def fauto_profile_EQ : Joined<["-"], "fauto-profile=">, Alias<fprofile_sample_use_EQ>; +def fauto_profile_accurate : Flag<["-"], "fauto-profile-accurate">, + Group<f_Group>, Alias<faccurate_sample_profile>; +def fno_auto_profile_accurate : Flag<["-"], "fno-auto-profile-accurate">, + Group<f_Group>, Alias<fno_accurate_sample_profile>; 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.">;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits