https://github.com/usx95 updated https://github.com/llvm/llvm-project/pull/98320
>From 03cc5fbebaf0c0c737e9304b8b3310ab4908fcaa Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Wed, 10 Jul 2024 13:52:46 +0000 Subject: [PATCH 1/4] Add an option to add source file info to -ftime-trace --- clang/include/clang/Driver/Options.td | 4 ++++ clang/include/clang/Frontend/FrontendOptions.h | 3 +++ clang/lib/Sema/SemaTemplateInstantiate.cpp | 2 ++ clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 2 ++ 4 files changed, 11 insertions(+) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index be7c3b60c20f1..c15f1b57bafc9 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3989,6 +3989,10 @@ def ftime_trace_EQ : Joined<["-"], "ftime-trace=">, Group<f_Group>, HelpText<"Similar to -ftime-trace. Specify the JSON file or a directory which will contain the JSON file">, Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>, MarshallingInfoString<FrontendOpts<"TimeTracePath">>; +def ftime_trace_add_filename : Flag<["-"], "ftime-trace-add-filename">, Group<f_Group>, + HelpText<"Adds filename to event details wherever supported. Eg: For template instantiation A<int>, details would include A<int>@source_file.h.">, + Visibility<[ClangOption, CLOption, DXCOption]>; + MarshallingInfoString<FrontendOpts<"TimeTraceAddFilename">>; 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>, diff --git a/clang/include/clang/Frontend/FrontendOptions.h b/clang/include/clang/Frontend/FrontendOptions.h index 5e5034fe01eb5..019a6737f8129 100644 --- a/clang/include/clang/Frontend/FrontendOptions.h +++ b/clang/include/clang/Frontend/FrontendOptions.h @@ -583,6 +583,9 @@ class FrontendOptions { /// Path which stores the output files for -ftime-trace std::string TimeTracePath; + /// Adds filename to event details wherever supported + bool TimeTraceAddFilename = false; + /// Output Path for module output file. std::string ModuleOutputPath; diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index a7bc6749c5852..f0fa7fd427906 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -3430,6 +3430,8 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation, llvm::raw_string_ostream OS(Name); Instantiation->getNameForDiagnostic(OS, getPrintingPolicy(), /*Qualified=*/true); + if (llvm::timeTraceAddFilename()) + OS << "@" << SourceMgr.getFilename(Instantiation->getLocation()); return Name; }); diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 88f6af80cbc55..ba55db4117c34 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -4966,6 +4966,8 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, llvm::raw_string_ostream OS(Name); Function->getNameForDiagnostic(OS, getPrintingPolicy(), /*Qualified=*/true); + if (llvm::timeTraceAddFilename()) + OS << "@" << SourceMgr.getFilename(Function->getLocation()); return Name; }); >From ae991f8c88c21a0872a5fa63219b3cb9b2787d9a Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Wed, 10 Jul 2024 15:52:55 +0000 Subject: [PATCH 2/4] Add tests --- clang/include/clang/Driver/Options.td | 4 ---- clang/include/clang/Frontend/FrontendOptions.h | 3 --- clang/lib/Sema/SemaTemplateInstantiate.cpp | 3 +-- clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 3 +-- clang/test/Driver/ftime-trace-sections.py | 16 +++++++++++++++- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index c15f1b57bafc9..be7c3b60c20f1 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3989,10 +3989,6 @@ def ftime_trace_EQ : Joined<["-"], "ftime-trace=">, Group<f_Group>, HelpText<"Similar to -ftime-trace. Specify the JSON file or a directory which will contain the JSON file">, Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>, MarshallingInfoString<FrontendOpts<"TimeTracePath">>; -def ftime_trace_add_filename : Flag<["-"], "ftime-trace-add-filename">, Group<f_Group>, - HelpText<"Adds filename to event details wherever supported. Eg: For template instantiation A<int>, details would include A<int>@source_file.h.">, - Visibility<[ClangOption, CLOption, DXCOption]>; - MarshallingInfoString<FrontendOpts<"TimeTraceAddFilename">>; 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>, diff --git a/clang/include/clang/Frontend/FrontendOptions.h b/clang/include/clang/Frontend/FrontendOptions.h index 019a6737f8129..5e5034fe01eb5 100644 --- a/clang/include/clang/Frontend/FrontendOptions.h +++ b/clang/include/clang/Frontend/FrontendOptions.h @@ -583,9 +583,6 @@ class FrontendOptions { /// Path which stores the output files for -ftime-trace std::string TimeTracePath; - /// Adds filename to event details wherever supported - bool TimeTraceAddFilename = false; - /// Output Path for module output file. std::string ModuleOutputPath; diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index f0fa7fd427906..69f46a77d8067 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -3430,8 +3430,7 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation, llvm::raw_string_ostream OS(Name); Instantiation->getNameForDiagnostic(OS, getPrintingPolicy(), /*Qualified=*/true); - if (llvm::timeTraceAddFilename()) - OS << "@" << SourceMgr.getFilename(Instantiation->getLocation()); + OS << "@" << SourceMgr.getFilename(Instantiation->getLocation()); return Name; }); diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index ba55db4117c34..d835a217802ac 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -4966,8 +4966,7 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, llvm::raw_string_ostream OS(Name); Function->getNameForDiagnostic(OS, getPrintingPolicy(), /*Qualified=*/true); - if (llvm::timeTraceAddFilename()) - OS << "@" << SourceMgr.getFilename(Function->getLocation()); + OS << "@" << SourceMgr.getFilename(Function->getLocation()); return Name; }); diff --git a/clang/test/Driver/ftime-trace-sections.py b/clang/test/Driver/ftime-trace-sections.py index 02afa4ac54eb7..cfec77fc97a8e 100644 --- a/clang/test/Driver/ftime-trace-sections.py +++ b/clang/test/Driver/ftime-trace-sections.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -import json, sys, time +import json, sys, time, re def is_inside(range1, range2): @@ -16,12 +16,18 @@ def is_before(range1, range2): c = range2["ts"] return b <= c +instantiation_pattern = re.compile("^.*<.*>@.*.cpp$") + +def is_valid_instantiation(instantiation): + return instantiation_pattern.match(instantiation["args"]["detail"]) + log_contents = json.loads(sys.stdin.read()) events = log_contents["traceEvents"] codegens = [event for event in events if event["name"] == "CodeGen Function"] frontends = [event for event in events if event["name"] == "Frontend"] backends = [event for event in events if event["name"] == "Backend"] +instantiations = [event for event in events if event["name"].startswith("Instantiate")] beginning_of_time = log_contents["beginningOfTime"] / 1000000 seconds_since_epoch = time.time() @@ -48,3 +54,11 @@ def is_before(range1, range2): ] ): sys.exit("Not all Frontend section are before all Backend sections!") + +if not all( + [ + is_valid_instantiation(instantiation) + for instantiation in instantiations + ] +): + sys.exit("Not all Frontend section are before all Backend sections!") >From afdaaddcb490668d0565c4a0a4de1bc49b9f41e9 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Wed, 10 Jul 2024 15:57:55 +0000 Subject: [PATCH 3/4] use , file: as separator --- clang/lib/Sema/SemaTemplateInstantiate.cpp | 2 +- clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 2 +- clang/test/Driver/ftime-trace-sections.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index 69f46a77d8067..3105f3eefa0ba 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -3430,7 +3430,7 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation, llvm::raw_string_ostream OS(Name); Instantiation->getNameForDiagnostic(OS, getPrintingPolicy(), /*Qualified=*/true); - OS << "@" << SourceMgr.getFilename(Instantiation->getLocation()); + OS << ", file:" << SourceMgr.getFilename(Instantiation->getLocation()); return Name; }); diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index d835a217802ac..88390d82260f5 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -4966,7 +4966,7 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, llvm::raw_string_ostream OS(Name); Function->getNameForDiagnostic(OS, getPrintingPolicy(), /*Qualified=*/true); - OS << "@" << SourceMgr.getFilename(Function->getLocation()); + OS << ", file:" << SourceMgr.getFilename(Function->getLocation()); return Name; }); diff --git a/clang/test/Driver/ftime-trace-sections.py b/clang/test/Driver/ftime-trace-sections.py index cfec77fc97a8e..cec62db6b0d7b 100644 --- a/clang/test/Driver/ftime-trace-sections.py +++ b/clang/test/Driver/ftime-trace-sections.py @@ -16,7 +16,7 @@ def is_before(range1, range2): c = range2["ts"] return b <= c -instantiation_pattern = re.compile("^.*<.*>@.*.cpp$") +instantiation_pattern = re.compile("^.*<.*>, file:.*.cpp$") def is_valid_instantiation(instantiation): return instantiation_pattern.match(instantiation["args"]["detail"]) >From f3a5c475935f8519d85332750bb43c4ac99d7668 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Wed, 10 Jul 2024 16:01:08 +0000 Subject: [PATCH 4/4] format and fix error messages --- clang/test/Driver/ftime-trace-sections.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/clang/test/Driver/ftime-trace-sections.py b/clang/test/Driver/ftime-trace-sections.py index cec62db6b0d7b..c42fa3c406ff4 100644 --- a/clang/test/Driver/ftime-trace-sections.py +++ b/clang/test/Driver/ftime-trace-sections.py @@ -16,8 +16,10 @@ def is_before(range1, range2): c = range2["ts"] return b <= c + instantiation_pattern = re.compile("^.*<.*>, file:.*.cpp$") + def is_valid_instantiation(instantiation): return instantiation_pattern.match(instantiation["args"]["detail"]) @@ -55,10 +57,6 @@ def is_valid_instantiation(instantiation): ): sys.exit("Not all Frontend section are before all Backend sections!") -if not all( - [ - is_valid_instantiation(instantiation) - for instantiation in instantiations - ] -): - sys.exit("Not all Frontend section are before all Backend sections!") +for instantiation in instantiations: + if not is_valid_instantiation(instantiation): + sys.exit("Invalid instantiation: " + str(instantiation)) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits