diff options
author | Alan Zhao <ayzhao@google.com> | 2025-04-30 13:43:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-30 13:43:05 -0700 |
commit | 4a6c81dc0e2790ec48a7da483970b95d847be8d7 (patch) | |
tree | a719934390abc3f3c882850b2b474e39a1148445 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 228b3309880bbd5a237257df5d67a0f7f4b5a01f (diff) | |
download | llvm-4a6c81dc0e2790ec48a7da483970b95d847be8d7.zip llvm-4a6c81dc0e2790ec48a7da483970b95d847be8d7.tar.gz llvm-4a6c81dc0e2790ec48a7da483970b95d847be8d7.tar.bz2 |
[clang] Implement JSON formatted -ftime-report (#137737)
This patch adds a new flag, -ftime-report-json, which outputs the same
information as -ftime-report but as JSON instead of -ftime-report's
pretty printed format.
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 8ff62ae2..c7d11e6 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1699,6 +1699,9 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts, GenerateArg(Consumer, OPT_ftime_report_EQ, "per-pass-run"); else GenerateArg(Consumer, OPT_ftime_report); + + if (Opts.TimePassesJson) + GenerateArg(Consumer, OPT_ftime_report_json); } if (Opts.PrepareForLTO && !Opts.PrepareForThinLTO) @@ -2000,12 +2003,13 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, : llvm::codegenoptions::DebugTemplateNamesKind::Mangled); } - if (const Arg *A = Args.getLastArg(OPT_ftime_report, OPT_ftime_report_EQ)) { + if (const Arg *A = Args.getLastArg(OPT_ftime_report, OPT_ftime_report_EQ, + OPT_ftime_report_json)) { Opts.TimePasses = true; // -ftime-report= is only for new pass manager. - if (A->getOption().getID() == OPT_ftime_report_EQ) { - StringRef Val = A->getValue(); + if (const Arg *EQ = Args.getLastArg(OPT_ftime_report_EQ)) { + StringRef Val = EQ->getValue(); if (Val == "per-pass") Opts.TimePassesPerRun = false; else if (Val == "per-pass-run") @@ -2014,6 +2018,9 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue(); } + + if (Args.getLastArg(OPT_ftime_report_json)) + Opts.TimePassesJson = true; } Opts.PrepareForLTO = false; |