dongjunduo updated this revision to Diff 439389. dongjunduo added a comment.
[Clang] change directory-store to path-store Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D128048/new/ https://reviews.llvm.org/D128048 Files: clang/include/clang/Driver/Options.td clang/include/clang/Frontend/FrontendOptions.h clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/check-time-trace-path.cpp clang/tools/driver/cc1_main.cpp Index: clang/tools/driver/cc1_main.cpp =================================================================== --- clang/tools/driver/cc1_main.cpp +++ clang/tools/driver/cc1_main.cpp @@ -255,7 +255,12 @@ if (llvm::timeTraceProfilerEnabled()) { SmallString<128> Path(Clang->getFrontendOpts().OutputFile); - llvm::sys::path::replace_extension(Path, "json"); + if (Clang->getFrontendOpts().TimeTracePath.empty()) { + // replace the suffix to '.json' directly + llvm::sys::path::replace_extension(Path, "json"); + } else { + Path.assign(Clang->getFrontendOpts().TimeTracePath); + } if (auto profilerOutput = Clang->createOutputFile( Path.str(), /*Binary=*/false, /*RemoveFileOnSignal=*/false, /*useTemporary=*/false)) { Index: clang/test/Driver/check-time-trace-path.cpp =================================================================== --- /dev/null +++ clang/test/Driver/check-time-trace-path.cpp @@ -0,0 +1,29 @@ +// RUN: %clangxx -S -ftime-trace -ftime-trace-path=%T/new-name.json -ftime-trace-granularity=0 -o %T/check-time-trace %s +// RUN: cat %T/new-name.json \ +// RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \ +// RUN: | FileCheck %s + +// CHECK: "beginningOfTime": {{[0-9]{16},}} +// CHECK-NEXT: "traceEvents": [ +// CHECK: "args": +// CHECK: "detail": +// CHECK: "dur": +// CHECK: "name": +// CHECK-NEXT: "ph": +// CHECK-NEXT: "pid": +// CHECK-NEXT: "tid": +// CHECK-NEXT: "ts": +// CHECK: "name": "clang{{.*}}" +// CHECK: "name": "process_name" +// CHECK: "name": "thread_name" + +template <typename T> +struct Struct { + T Num; +}; + +int main() { + Struct<int> S; + + return 0; +} Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -6183,6 +6183,7 @@ Args.AddLastArg(CmdArgs, options::OPT_ftime_report_EQ); Args.AddLastArg(CmdArgs, options::OPT_ftime_trace); Args.AddLastArg(CmdArgs, options::OPT_ftime_trace_granularity_EQ); + Args.AddLastArg(CmdArgs, options::OPT_ftime_trace_path); Args.AddLastArg(CmdArgs, options::OPT_ftrapv); Args.AddLastArg(CmdArgs, options::OPT_malign_double); Args.AddLastArg(CmdArgs, options::OPT_fno_temp_file); Index: clang/include/clang/Frontend/FrontendOptions.h =================================================================== --- clang/include/clang/Frontend/FrontendOptions.h +++ clang/include/clang/Frontend/FrontendOptions.h @@ -499,6 +499,9 @@ /// Minimum time granularity (in microseconds) traced by time profiler. unsigned TimeTraceGranularity; + /// Path which stores the output files for -ftime-trace + std::string TimeTracePath; + public: FrontendOptions() : DisableFree(false), RelocatablePCH(false), ShowHelp(false), Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2828,6 +2828,10 @@ HelpText<"Minimum time granularity (in microseconds) traced by time profiler">, Flags<[CC1Option, CoreOption]>, MarshallingInfoInt<FrontendOpts<"TimeTraceGranularity">, "500u">; +def ftime_trace_path : Joined<["-"], "ftime-trace-path=">, Group<f_Group>, + HelpText<"Path which stores the output files for -ftime-trace">, + Flags<[CC1Option, CoreOption]>, + MarshallingInfoString<FrontendOpts<"TimeTracePath">>; def fproc_stat_report : Joined<["-"], "fproc-stat-report">, Group<f_Group>, HelpText<"Print subprocess statistics">; def fproc_stat_report_EQ : Joined<["-"], "fproc-stat-report=">, Group<f_Group>,
Index: clang/tools/driver/cc1_main.cpp =================================================================== --- clang/tools/driver/cc1_main.cpp +++ clang/tools/driver/cc1_main.cpp @@ -255,7 +255,12 @@ if (llvm::timeTraceProfilerEnabled()) { SmallString<128> Path(Clang->getFrontendOpts().OutputFile); - llvm::sys::path::replace_extension(Path, "json"); + if (Clang->getFrontendOpts().TimeTracePath.empty()) { + // replace the suffix to '.json' directly + llvm::sys::path::replace_extension(Path, "json"); + } else { + Path.assign(Clang->getFrontendOpts().TimeTracePath); + } if (auto profilerOutput = Clang->createOutputFile( Path.str(), /*Binary=*/false, /*RemoveFileOnSignal=*/false, /*useTemporary=*/false)) { Index: clang/test/Driver/check-time-trace-path.cpp =================================================================== --- /dev/null +++ clang/test/Driver/check-time-trace-path.cpp @@ -0,0 +1,29 @@ +// RUN: %clangxx -S -ftime-trace -ftime-trace-path=%T/new-name.json -ftime-trace-granularity=0 -o %T/check-time-trace %s +// RUN: cat %T/new-name.json \ +// RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \ +// RUN: | FileCheck %s + +// CHECK: "beginningOfTime": {{[0-9]{16},}} +// CHECK-NEXT: "traceEvents": [ +// CHECK: "args": +// CHECK: "detail": +// CHECK: "dur": +// CHECK: "name": +// CHECK-NEXT: "ph": +// CHECK-NEXT: "pid": +// CHECK-NEXT: "tid": +// CHECK-NEXT: "ts": +// CHECK: "name": "clang{{.*}}" +// CHECK: "name": "process_name" +// CHECK: "name": "thread_name" + +template <typename T> +struct Struct { + T Num; +}; + +int main() { + Struct<int> S; + + return 0; +} Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -6183,6 +6183,7 @@ Args.AddLastArg(CmdArgs, options::OPT_ftime_report_EQ); Args.AddLastArg(CmdArgs, options::OPT_ftime_trace); Args.AddLastArg(CmdArgs, options::OPT_ftime_trace_granularity_EQ); + Args.AddLastArg(CmdArgs, options::OPT_ftime_trace_path); Args.AddLastArg(CmdArgs, options::OPT_ftrapv); Args.AddLastArg(CmdArgs, options::OPT_malign_double); Args.AddLastArg(CmdArgs, options::OPT_fno_temp_file); Index: clang/include/clang/Frontend/FrontendOptions.h =================================================================== --- clang/include/clang/Frontend/FrontendOptions.h +++ clang/include/clang/Frontend/FrontendOptions.h @@ -499,6 +499,9 @@ /// Minimum time granularity (in microseconds) traced by time profiler. unsigned TimeTraceGranularity; + /// Path which stores the output files for -ftime-trace + std::string TimeTracePath; + public: FrontendOptions() : DisableFree(false), RelocatablePCH(false), ShowHelp(false), Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2828,6 +2828,10 @@ HelpText<"Minimum time granularity (in microseconds) traced by time profiler">, Flags<[CC1Option, CoreOption]>, MarshallingInfoInt<FrontendOpts<"TimeTraceGranularity">, "500u">; +def ftime_trace_path : Joined<["-"], "ftime-trace-path=">, Group<f_Group>, + HelpText<"Path which stores the output files for -ftime-trace">, + Flags<[CC1Option, CoreOption]>, + MarshallingInfoString<FrontendOpts<"TimeTracePath">>; def fproc_stat_report : Joined<["-"], "fproc-stat-report">, Group<f_Group>, HelpText<"Print subprocess statistics">; def fproc_stat_report_EQ : Joined<["-"], "fproc-stat-report=">, Group<f_Group>,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits