forked from OSchip/llvm-project
[Support] Fix `-ftime-trace-granularity` option
Summary: Move `-ftime-trace-granularity` option to frontend options. Without patch this option is showed up in the help for any tool that links libSupport. Reviewers: sammccall Subscribers: hiraditya, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D65202 llvm-svn: 366911
This commit is contained in:
parent
69fba7434e
commit
4fdcabf259
|
@ -1944,6 +1944,14 @@ Perform ThinLTO importing using provided function summary index
|
||||||
|
|
||||||
.. option:: -ftime-report
|
.. option:: -ftime-report
|
||||||
|
|
||||||
|
.. option:: -ftime-trace
|
||||||
|
|
||||||
|
Turn on time profiler
|
||||||
|
|
||||||
|
.. option:: -ftime-trace-granularity=<arg>
|
||||||
|
|
||||||
|
Minimum time granularity (in microseconds) traced by time profiler
|
||||||
|
|
||||||
.. option:: -ftls-model=<arg>
|
.. option:: -ftls-model=<arg>
|
||||||
|
|
||||||
.. option:: -ftrap-function=<arg>
|
.. option:: -ftrap-function=<arg>
|
||||||
|
|
|
@ -225,6 +225,8 @@ CODEGENOPT(StrictEnums , 1, 0) ///< Optimize based on strict enum definiti
|
||||||
CODEGENOPT(StrictVTablePointers, 1, 0) ///< Optimize based on the strict vtable pointers
|
CODEGENOPT(StrictVTablePointers, 1, 0) ///< Optimize based on the strict vtable pointers
|
||||||
CODEGENOPT(TimePasses , 1, 0) ///< Set when -ftime-report is enabled.
|
CODEGENOPT(TimePasses , 1, 0) ///< Set when -ftime-report is enabled.
|
||||||
CODEGENOPT(TimeTrace , 1, 0) ///< Set when -ftime-trace is enabled.
|
CODEGENOPT(TimeTrace , 1, 0) ///< Set when -ftime-trace is enabled.
|
||||||
|
VALUE_CODEGENOPT(TimeTraceGranularity, 32, 500) ///< Minimum time granularity (in microseconds),
|
||||||
|
///< traced by time profiler
|
||||||
CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled.
|
CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled.
|
||||||
CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled.
|
CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled.
|
||||||
CODEGENOPT(NoUseJumpTables , 1, 0) ///< Set when -fno-jump-tables is enabled.
|
CODEGENOPT(NoUseJumpTables , 1, 0) ///< Set when -fno-jump-tables is enabled.
|
||||||
|
|
|
@ -1757,7 +1757,11 @@ def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Group<f_Group>
|
||||||
def : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>;
|
def : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>;
|
||||||
def fthreadsafe_statics : Flag<["-"], "fthreadsafe-statics">, Group<f_Group>;
|
def fthreadsafe_statics : Flag<["-"], "fthreadsafe-statics">, Group<f_Group>;
|
||||||
def ftime_report : Flag<["-"], "ftime-report">, Group<f_Group>, Flags<[CC1Option]>;
|
def ftime_report : Flag<["-"], "ftime-report">, Group<f_Group>, Flags<[CC1Option]>;
|
||||||
def ftime_trace : Flag<["-"], "ftime-trace">, Group<f_Group>, Flags<[CC1Option, CoreOption]>;
|
def ftime_trace : Flag<["-"], "ftime-trace">, Group<f_Group>,
|
||||||
|
HelpText<"Turn on time profiler">, Flags<[CC1Option, CoreOption]>;
|
||||||
|
def ftime_trace_granularity_EQ : Joined<["-"], "ftime-trace-granularity=">, Group<f_Group>,
|
||||||
|
HelpText<"Minimum time granularity (in microseconds) traced by time profiler">,
|
||||||
|
Flags<[CC1Option, CoreOption]>;
|
||||||
def ftlsmodel_EQ : Joined<["-"], "ftls-model=">, Group<f_Group>, Flags<[CC1Option]>;
|
def ftlsmodel_EQ : Joined<["-"], "ftls-model=">, Group<f_Group>, Flags<[CC1Option]>;
|
||||||
def ftrapv : Flag<["-"], "ftrapv">, Group<f_Group>, Flags<[CC1Option]>,
|
def ftrapv : Flag<["-"], "ftrapv">, Group<f_Group>, Flags<[CC1Option]>,
|
||||||
HelpText<"Trap on integer overflow">;
|
HelpText<"Trap on integer overflow">;
|
||||||
|
|
|
@ -451,6 +451,9 @@ public:
|
||||||
/// Filename to write statistics to.
|
/// Filename to write statistics to.
|
||||||
std::string StatsFile;
|
std::string StatsFile;
|
||||||
|
|
||||||
|
/// Minimum time granularity (in microseconds) traced by time profiler.
|
||||||
|
unsigned TimeTraceGranularity;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FrontendOptions()
|
FrontendOptions()
|
||||||
: DisableFree(false), RelocatablePCH(false), ShowHelp(false),
|
: DisableFree(false), RelocatablePCH(false), ShowHelp(false),
|
||||||
|
@ -461,7 +464,7 @@ public:
|
||||||
UseGlobalModuleIndex(true), GenerateGlobalModuleIndex(true),
|
UseGlobalModuleIndex(true), GenerateGlobalModuleIndex(true),
|
||||||
ASTDumpDecls(false), ASTDumpLookups(false),
|
ASTDumpDecls(false), ASTDumpLookups(false),
|
||||||
BuildingImplicitModule(false), ModulesEmbedAllFiles(false),
|
BuildingImplicitModule(false), ModulesEmbedAllFiles(false),
|
||||||
IncludeTimestamps(true) {}
|
IncludeTimestamps(true), TimeTraceGranularity(500) {}
|
||||||
|
|
||||||
/// getInputKindForExtension - Return the appropriate input kind for a file
|
/// getInputKindForExtension - Return the appropriate input kind for a file
|
||||||
/// extension. For example, "c" would return InputKind::C.
|
/// extension. For example, "c" would return InputKind::C.
|
||||||
|
|
|
@ -4595,6 +4595,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_parseable_fixits);
|
Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_parseable_fixits);
|
||||||
Args.AddLastArg(CmdArgs, options::OPT_ftime_report);
|
Args.AddLastArg(CmdArgs, options::OPT_ftime_report);
|
||||||
Args.AddLastArg(CmdArgs, options::OPT_ftime_trace);
|
Args.AddLastArg(CmdArgs, options::OPT_ftime_trace);
|
||||||
|
Args.AddLastArg(CmdArgs, options::OPT_ftime_trace_granularity_EQ);
|
||||||
Args.AddLastArg(CmdArgs, options::OPT_ftrapv);
|
Args.AddLastArg(CmdArgs, options::OPT_ftrapv);
|
||||||
Args.AddLastArg(CmdArgs, options::OPT_malign_double);
|
Args.AddLastArg(CmdArgs, options::OPT_malign_double);
|
||||||
|
|
||||||
|
|
|
@ -1796,6 +1796,8 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
|
||||||
Opts.ShowTimers = Args.hasArg(OPT_ftime_report);
|
Opts.ShowTimers = Args.hasArg(OPT_ftime_report);
|
||||||
Opts.PrintSupportedCPUs = Args.hasArg(OPT_print_supported_cpus);
|
Opts.PrintSupportedCPUs = Args.hasArg(OPT_print_supported_cpus);
|
||||||
Opts.TimeTrace = Args.hasArg(OPT_ftime_trace);
|
Opts.TimeTrace = Args.hasArg(OPT_ftime_trace);
|
||||||
|
Opts.TimeTraceGranularity = getLastArgIntValue(
|
||||||
|
Args, OPT_ftime_trace_granularity_EQ, Opts.TimeTraceGranularity, Diags);
|
||||||
Opts.ShowVersion = Args.hasArg(OPT_version);
|
Opts.ShowVersion = Args.hasArg(OPT_version);
|
||||||
Opts.ASTMergeFiles = Args.getAllArgValues(OPT_ast_merge);
|
Opts.ASTMergeFiles = Args.getAllArgValues(OPT_ast_merge);
|
||||||
Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
|
Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// REQUIRES: shell
|
// REQUIRES: shell
|
||||||
// RUN: %clangxx -S -ftime-trace -mllvm --time-trace-granularity=0 -o %T/check-time-trace %s
|
// RUN: %clangxx -S -ftime-trace -ftime-trace-granularity=0 -o %T/check-time-trace %s
|
||||||
// RUN: cat %T/check-time-trace.json \
|
// RUN: cat %T/check-time-trace.json \
|
||||||
// RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
|
// RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
|
||||||
// RUN: | FileCheck %s
|
// RUN: | FileCheck %s
|
||||||
|
|
|
@ -216,9 +216,10 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
|
||||||
bool Success = CompilerInvocation::CreateFromArgs(
|
bool Success = CompilerInvocation::CreateFromArgs(
|
||||||
Clang->getInvocation(), Argv.begin(), Argv.end(), Diags);
|
Clang->getInvocation(), Argv.begin(), Argv.end(), Diags);
|
||||||
|
|
||||||
if (Clang->getFrontendOpts().TimeTrace)
|
if (Clang->getFrontendOpts().TimeTrace) {
|
||||||
llvm::timeTraceProfilerInitialize();
|
llvm::timeTraceProfilerInitialize(
|
||||||
|
Clang->getFrontendOpts().TimeTraceGranularity);
|
||||||
|
}
|
||||||
// --print-supported-cpus takes priority over the actual compilation.
|
// --print-supported-cpus takes priority over the actual compilation.
|
||||||
if (Clang->getFrontendOpts().PrintSupportedCPUs)
|
if (Clang->getFrontendOpts().PrintSupportedCPUs)
|
||||||
return PrintSupportedCPUs(Clang->getTargetOpts().Triple);
|
return PrintSupportedCPUs(Clang->getTargetOpts().Triple);
|
||||||
|
|
|
@ -19,7 +19,7 @@ extern TimeTraceProfiler *TimeTraceProfilerInstance;
|
||||||
/// Initialize the time trace profiler.
|
/// Initialize the time trace profiler.
|
||||||
/// This sets up the global \p TimeTraceProfilerInstance
|
/// This sets up the global \p TimeTraceProfilerInstance
|
||||||
/// variable to be the profiler instance.
|
/// variable to be the profiler instance.
|
||||||
void timeTraceProfilerInitialize();
|
void timeTraceProfilerInitialize(unsigned TimeTraceGranularity);
|
||||||
|
|
||||||
/// Cleanup the time trace profiler, if it was initialized.
|
/// Cleanup the time trace profiler, if it was initialized.
|
||||||
void timeTraceProfilerCleanup();
|
void timeTraceProfilerCleanup();
|
||||||
|
|
|
@ -24,12 +24,6 @@ using namespace std::chrono;
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
static cl::opt<unsigned> TimeTraceGranularity(
|
|
||||||
"time-trace-granularity",
|
|
||||||
cl::desc(
|
|
||||||
"Minimum time granularity (in microseconds) traced by time profiler"),
|
|
||||||
cl::init(500));
|
|
||||||
|
|
||||||
TimeTraceProfiler *TimeTraceProfilerInstance = nullptr;
|
TimeTraceProfiler *TimeTraceProfilerInstance = nullptr;
|
||||||
|
|
||||||
typedef duration<steady_clock::rep, steady_clock::period> DurationType;
|
typedef duration<steady_clock::rep, steady_clock::period> DurationType;
|
||||||
|
@ -161,12 +155,16 @@ struct TimeTraceProfiler {
|
||||||
SmallVector<Entry, 128> Entries;
|
SmallVector<Entry, 128> Entries;
|
||||||
StringMap<CountAndDurationType> CountAndTotalPerName;
|
StringMap<CountAndDurationType> CountAndTotalPerName;
|
||||||
time_point<steady_clock> StartTime;
|
time_point<steady_clock> StartTime;
|
||||||
|
|
||||||
|
// Minimum time granularity (in microseconds)
|
||||||
|
unsigned TimeTraceGranularity;
|
||||||
};
|
};
|
||||||
|
|
||||||
void timeTraceProfilerInitialize() {
|
void timeTraceProfilerInitialize(unsigned TimeTraceGranularity) {
|
||||||
assert(TimeTraceProfilerInstance == nullptr &&
|
assert(TimeTraceProfilerInstance == nullptr &&
|
||||||
"Profiler should not be initialized");
|
"Profiler should not be initialized");
|
||||||
TimeTraceProfilerInstance = new TimeTraceProfiler();
|
TimeTraceProfilerInstance = new TimeTraceProfiler();
|
||||||
|
TimeTraceProfilerInstance->TimeTraceGranularity = TimeTraceGranularity;
|
||||||
}
|
}
|
||||||
|
|
||||||
void timeTraceProfilerCleanup() {
|
void timeTraceProfilerCleanup() {
|
||||||
|
|
Loading…
Reference in New Issue