https://github.com/usx95 created https://github.com/llvm/llvm-project/pull/106277
Uniformly use file and line metadata information in `-ftime-trace` profiles. This makes post processing simpler and not fragile. >From b2bb29ec61f4e9a7b3b7f9bcd0f5b7a12c844d14 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Tue, 27 Aug 2024 19:44:34 +0000 Subject: [PATCH] [clang] Properly set file and line info for -ftime-trace --- clang/lib/Parse/Parser.cpp | 9 +++++++-- ...-trace-ParseDeclarationOrFunctionDefinition.cpp | 3 ++- clang/unittests/Support/TimeProfilerTest.cpp | 14 +++++++------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 5ebe71e496a2e8..cc16a9d98d0ca6 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -16,6 +16,7 @@ #include "clang/AST/ASTLambda.h" #include "clang/AST/DeclTemplate.h" #include "clang/Basic/FileManager.h" +#include "clang/Basic/SourceManager.h" #include "clang/Parse/ParseDiagnostic.h" #include "clang/Parse/RAIIObjectsForParser.h" #include "clang/Sema/DeclSpec.h" @@ -1255,8 +1256,12 @@ Parser::DeclGroupPtrTy Parser::ParseDeclarationOrFunctionDefinition( // Add an enclosing time trace scope for a bunch of small scopes with // "EvaluateAsConstExpr". llvm::TimeTraceScope TimeScope("ParseDeclarationOrFunctionDefinition", [&]() { - return Tok.getLocation().printToString( - Actions.getASTContext().getSourceManager()); + llvm::TimeTraceMetadata M; + const SourceManager &SM = Actions.getASTContext().getSourceManager(); + auto Loc = SM.getExpansionLoc(Tok.getLocation()); + M.File = SM.getFilename(Loc); + M.Line = SM.getExpansionLineNumber(Loc); + return M; }); if (DS) { diff --git a/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp b/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp index f854cddadbfcc1..8a1127752b325b 100644 --- a/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp +++ b/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp @@ -4,7 +4,8 @@ // RUN: | FileCheck %s // CHECK-DAG: "name": "ParseDeclarationOrFunctionDefinition" -// CHECK-DAG: "detail": "{{.*}}check-time-trace-ParseDeclarationOrFunctionDefinition.cpp:15:1" +// CHECK-DAG: "file": "{{.*}}check-time-trace-ParseDeclarationOrFunctionDefinition.cpp" +// CHECK-DAG: "line": 16 // CHECK-DAG: "name": "ParseFunctionDefinition" // CHECK-DAG: "detail": "foo" // CHECK-DAG: "name": "ParseFunctionDefinition" diff --git a/clang/unittests/Support/TimeProfilerTest.cpp b/clang/unittests/Support/TimeProfilerTest.cpp index f53fe71d630bf5..6d8b4e0453294f 100644 --- a/clang/unittests/Support/TimeProfilerTest.cpp +++ b/clang/unittests/Support/TimeProfilerTest.cpp @@ -210,8 +210,8 @@ constexpr int slow_init_list[] = {1, 1, 2, 3, 5, 8, 13, 21}; // 25th line std::string Json = teardownProfiler(); ASSERT_EQ(R"( Frontend (test.cc) -| ParseDeclarationOrFunctionDefinition (test.cc:2:1) -| ParseDeclarationOrFunctionDefinition (test.cc:6:1) +| ParseDeclarationOrFunctionDefinition (test.cc:2) +| ParseDeclarationOrFunctionDefinition (test.cc:6) | | ParseFunctionDefinition (slow_func) | | | EvaluateAsRValue (<test.cc:8:21>) | | | EvaluateForOverflow (<test.cc:8:21, col:25>) @@ -223,15 +223,15 @@ Frontend (test.cc) | | | | EvaluateAsRValue (<test.cc:8:21, col:25>) | | | EvaluateAsBooleanCondition (<test.cc:8:21, col:25>) | | | | EvaluateAsRValue (<test.cc:8:21, col:25>) -| ParseDeclarationOrFunctionDefinition (test.cc:16:1) +| ParseDeclarationOrFunctionDefinition (test.cc:16) | | ParseFunctionDefinition (slow_test) | | | EvaluateAsInitializer (slow_value) | | | EvaluateAsConstantExpr (<test.cc:17:33, col:59>) | | | EvaluateAsConstantExpr (<test.cc:18:11, col:37>) -| ParseDeclarationOrFunctionDefinition (test.cc:22:1) +| ParseDeclarationOrFunctionDefinition (test.cc:22) | | EvaluateAsConstantExpr (<test.cc:23:31, col:57>) | | EvaluateAsRValue (<test.cc:22:14, line:23:58>) -| ParseDeclarationOrFunctionDefinition (test.cc:25:1) +| ParseDeclarationOrFunctionDefinition (test.cc:25) | | EvaluateAsInitializer (slow_init_list) | PerformPendingInstantiations )", @@ -270,7 +270,7 @@ Frontend (test.cc) | ParseFunctionDefinition (fooB) | ParseFunctionDefinition (fooMTA) | ParseFunctionDefinition (fooA) -| ParseDeclarationOrFunctionDefinition (test.cc:3:5) +| ParseDeclarationOrFunctionDefinition (test.cc:3) | | ParseFunctionDefinition (user) | PerformPendingInstantiations | | InstantiateFunction (fooA<int>, a.h:7) @@ -292,7 +292,7 @@ struct { std::string Json = teardownProfiler(); ASSERT_EQ(R"( Frontend (test.c) -| ParseDeclarationOrFunctionDefinition (test.c:2:1) +| ParseDeclarationOrFunctionDefinition (test.c:2) | | isIntegerConstantExpr (<test.c:3:18>) | | EvaluateKnownConstIntCheckOverflow (<test.c:3:18>) | PerformPendingInstantiations _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits