https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/122225
>From 586f1fa8fb02431a962ca606fd546c2310427c80 Mon Sep 17 00:00:00 2001 From: Fangrui Song <i...@maskray.me> Date: Wed, 8 Jan 2025 23:19:56 -0800 Subject: [PATCH 1/4] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?= =?UTF-8?q?itial=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.5-bogner --- clang/include/clang/CodeGen/BackendUtil.h | 10 ++---- .../include/clang/Frontend/CompilerInstance.h | 4 +++ clang/lib/CodeGen/BackendConsumer.h | 4 +-- clang/lib/CodeGen/BackendUtil.cpp | 34 +++++++++++-------- clang/lib/CodeGen/CodeGenAction.cpp | 34 ++++++++++--------- .../CodeGen/ObjectFilePCHContainerWriter.cpp | 15 ++++---- .../Frontend/ftime-report-template-decl.cpp | 14 ++++---- 7 files changed, 59 insertions(+), 56 deletions(-) diff --git a/clang/include/clang/CodeGen/BackendUtil.h b/clang/include/clang/CodeGen/BackendUtil.h index 7aa4f9db6c2e42..78d1e5ee8e6d59 100644 --- a/clang/include/clang/CodeGen/BackendUtil.h +++ b/clang/include/clang/CodeGen/BackendUtil.h @@ -25,11 +25,9 @@ class FileSystem; } // namespace llvm namespace clang { +class CompilerInstance; class DiagnosticsEngine; -class HeaderSearchOptions; class CodeGenOptions; -class TargetOptions; -class LangOptions; class BackendConsumer; enum BackendAction { @@ -41,10 +39,8 @@ enum BackendAction { Backend_EmitObj ///< Emit native object files }; -void EmitBackendOutput(DiagnosticsEngine &Diags, const HeaderSearchOptions &, - const CodeGenOptions &CGOpts, const TargetOptions &TOpts, - const LangOptions &LOpts, StringRef TDesc, - llvm::Module *M, BackendAction Action, +void emitBackendOutput(CompilerInstance &CI, StringRef TDesc, llvm::Module *M, + BackendAction Action, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, std::unique_ptr<raw_pwrite_stream> OS, BackendConsumer *BC = nullptr); diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index 1220a4e29471d1..3cec57abae4445 100644 --- a/clang/include/clang/Frontend/CompilerInstance.h +++ b/clang/include/clang/Frontend/CompilerInstance.h @@ -630,6 +630,10 @@ class CompilerInstance : public ModuleLoader { /// @name Frontend timer /// @{ + llvm::TimerGroup &getFrontendTimerGroup() const { + return *FrontendTimerGroup; + } + bool hasFrontendTimer() const { return (bool)FrontendTimer; } llvm::Timer &getFrontendTimer() const { diff --git a/clang/lib/CodeGen/BackendConsumer.h b/clang/lib/CodeGen/BackendConsumer.h index d932a78f469b95..ad3adfca367858 100644 --- a/clang/lib/CodeGen/BackendConsumer.h +++ b/clang/lib/CodeGen/BackendConsumer.h @@ -28,8 +28,8 @@ class BackendConsumer : public ASTConsumer { using LinkModule = CodeGenAction::LinkModule; virtual void anchor(); + CompilerInstance &CI; DiagnosticsEngine &Diags; - const HeaderSearchOptions &HeaderSearchOpts; const CodeGenOptions &CodeGenOpts; const TargetOptions &TargetOpts; const LangOptions &LangOpts; @@ -70,7 +70,7 @@ class BackendConsumer : public ASTConsumer { llvm::Module *CurLinkModule = nullptr; public: - BackendConsumer(const CompilerInstance &CI, BackendAction Action, + BackendConsumer(CompilerInstance &CI, BackendAction Action, IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, llvm::LLVMContext &C, SmallVector<LinkModule, 4> LinkModules, StringRef InFile, std::unique_ptr<raw_pwrite_stream> OS, diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 2dbab785658aa4..bcb14a9a166077 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -137,8 +137,6 @@ class EmitAssemblyHelper { llvm::Module *TheModule; IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS; - Timer CodeGenerationTime; - std::unique_ptr<raw_pwrite_stream> OS; Triple TargetTriple; @@ -211,7 +209,6 @@ class EmitAssemblyHelper { IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) : Diags(_Diags), HSOpts(HeaderSearchOpts), CodeGenOpts(CGOpts), TargetOpts(TOpts), LangOpts(LOpts), TheModule(M), VFS(std::move(VFS)), - CodeGenerationTime("codegen", "Code Generation Time"), TargetTriple(TheModule->getTargetTriple()) {} ~EmitAssemblyHelper() { @@ -222,8 +219,8 @@ class EmitAssemblyHelper { std::unique_ptr<TargetMachine> TM; // Emit output using the new pass manager for the optimization pipeline. - void EmitAssembly(BackendAction Action, std::unique_ptr<raw_pwrite_stream> OS, - BackendConsumer *BC); + void emitAssembly(const CompilerInstance &CI, BackendAction Action, + std::unique_ptr<raw_pwrite_stream> OS, BackendConsumer *BC); }; } // namespace @@ -1212,10 +1209,14 @@ void EmitAssemblyHelper::RunCodegenPipeline( } } -void EmitAssemblyHelper::EmitAssembly(BackendAction Action, +void EmitAssemblyHelper::emitAssembly(const CompilerInstance &CI, + BackendAction Action, std::unique_ptr<raw_pwrite_stream> OS, BackendConsumer *BC) { - TimeRegion Region(CodeGenOpts.TimePasses ? &CodeGenerationTime : nullptr); + Timer timer; + if (CodeGenOpts.TimePasses) + timer.init("codegen", "Code Generation Time", CI.getFrontendTimerGroup()); + TimeRegion Region(CodeGenOpts.TimePasses ? &timer : nullptr); setCommandLineOpts(CodeGenOpts); bool RequiresCodeGen = actionRequiresCodeGen(Action); @@ -1346,14 +1347,17 @@ static void runThinLTOBackend( } } -void clang::EmitBackendOutput( - DiagnosticsEngine &Diags, const HeaderSearchOptions &HeaderOpts, - const CodeGenOptions &CGOpts, const clang::TargetOptions &TOpts, - const LangOptions &LOpts, StringRef TDesc, llvm::Module *M, - BackendAction Action, IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, - std::unique_ptr<raw_pwrite_stream> OS, BackendConsumer *BC) { - +void clang::emitBackendOutput(CompilerInstance &CI, StringRef TDesc, + llvm::Module *M, BackendAction Action, + IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, + std::unique_ptr<raw_pwrite_stream> OS, + BackendConsumer *BC) { llvm::TimeTraceScope TimeScope("Backend"); + DiagnosticsEngine &Diags = CI.getDiagnostics(); + const auto &HeaderOpts = CI.getHeaderSearchOpts(); + const auto &CGOpts = CI.getCodeGenOpts(); + const auto &TOpts = CI.getTargetOpts(); + const auto &LOpts = CI.getLangOpts(); std::unique_ptr<llvm::Module> EmptyModule; if (!CGOpts.ThinLTOIndexFile.empty()) { @@ -1394,7 +1398,7 @@ void clang::EmitBackendOutput( } EmitAssemblyHelper AsmHelper(Diags, HeaderOpts, CGOpts, TOpts, LOpts, M, VFS); - AsmHelper.EmitAssembly(Action, std::move(OS), BC); + AsmHelper.emitAssembly(CI, Action, std::move(OS), BC); // Verify clang's TargetInfo DataLayout against the LLVM TargetMachine's // DataLayout. diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index f63cb9b082d5bf..8681f5f848da84 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -105,16 +105,17 @@ static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, }); } -BackendConsumer::BackendConsumer( - const CompilerInstance &CI, BackendAction Action, - IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, LLVMContext &C, - SmallVector<LinkModule, 4> LinkModules, StringRef InFile, - std::unique_ptr<raw_pwrite_stream> OS, CoverageSourceInfo *CoverageInfo, - llvm::Module *CurLinkModule) - : Diags(CI.getDiagnostics()), HeaderSearchOpts(CI.getHeaderSearchOpts()), - CodeGenOpts(CI.getCodeGenOpts()), TargetOpts(CI.getTargetOpts()), - LangOpts(CI.getLangOpts()), AsmOutStream(std::move(OS)), FS(VFS), - LLVMIRGeneration("irgen", "LLVM IR Generation Time"), Action(Action), +BackendConsumer::BackendConsumer(CompilerInstance &CI, BackendAction Action, + IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, + LLVMContext &C, + SmallVector<LinkModule, 4> LinkModules, + StringRef InFile, + std::unique_ptr<raw_pwrite_stream> OS, + CoverageSourceInfo *CoverageInfo, + llvm::Module *CurLinkModule) + : CI(CI), Diags(CI.getDiagnostics()), CodeGenOpts(CI.getCodeGenOpts()), + TargetOpts(CI.getTargetOpts()), LangOpts(CI.getLangOpts()), + AsmOutStream(std::move(OS)), FS(VFS), Action(Action), Gen(CreateLLVMCodeGen(Diags, InFile, std::move(VFS), CI.getHeaderSearchOpts(), CI.getPreprocessorOpts(), CI.getCodeGenOpts(), C, CoverageInfo)), @@ -122,6 +123,9 @@ BackendConsumer::BackendConsumer( TimerIsEnabled = CodeGenOpts.TimePasses; llvm::TimePassesIsEnabled = CodeGenOpts.TimePasses; llvm::TimePassesPerRun = CodeGenOpts.TimePassesPerRun; + if (CodeGenOpts.TimePasses) + LLVMIRGeneration.init("irgen", "LLVM IR Generation Time", + CI.getFrontendTimerGroup()); } llvm::Module* BackendConsumer::getModule() const { @@ -321,8 +325,7 @@ void BackendConsumer::HandleTranslationUnit(ASTContext &C) { EmbedBitcode(getModule(), CodeGenOpts, llvm::MemoryBufferRef()); - EmitBackendOutput(Diags, HeaderSearchOpts, CodeGenOpts, TargetOpts, LangOpts, - C.getTargetInfo().getDataLayoutString(), getModule(), + emitBackendOutput(CI, C.getTargetInfo().getDataLayoutString(), getModule(), Action, FS, std::move(AsmOutStream), this); Ctx.setDiagnosticHandler(std::move(OldDiagnosticHandler)); @@ -1183,10 +1186,9 @@ void CodeGenAction::ExecuteAction() { std::unique_ptr<llvm::ToolOutputFile> OptRecordFile = std::move(*OptRecordFileOrErr); - EmitBackendOutput( - Diagnostics, CI.getHeaderSearchOpts(), CodeGenOpts, TargetOpts, - CI.getLangOpts(), CI.getTarget().getDataLayoutString(), TheModule.get(), - BA, CI.getFileManager().getVirtualFileSystemPtr(), std::move(OS)); + emitBackendOutput(CI, CI.getTarget().getDataLayoutString(), TheModule.get(), + BA, CI.getFileManager().getVirtualFileSystemPtr(), + std::move(OS)); if (OptRecordFile) OptRecordFile->keep(); } diff --git a/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp b/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp index 71745480706ed6..5447b98d7105e0 100644 --- a/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp +++ b/clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp @@ -37,6 +37,7 @@ using namespace clang; namespace { class PCHContainerGenerator : public ASTConsumer { + CompilerInstance &CI; DiagnosticsEngine &Diags; const std::string MainFileName; const std::string OutputFileName; @@ -139,7 +140,7 @@ class PCHContainerGenerator : public ASTConsumer { const std::string &OutputFileName, std::unique_ptr<raw_pwrite_stream> OS, std::shared_ptr<PCHBuffer> Buffer) - : Diags(CI.getDiagnostics()), MainFileName(MainFileName), + : CI(CI), Diags(CI.getDiagnostics()), MainFileName(MainFileName), OutputFileName(OutputFileName), Ctx(nullptr), MMap(CI.getPreprocessor().getHeaderSearchInfo().getModuleMap()), FS(&CI.getVirtualFileSystem()), @@ -317,19 +318,17 @@ class PCHContainerGenerator : public ASTConsumer { LLVM_DEBUG({ // Print the IR for the PCH container to the debug output. llvm::SmallString<0> Buffer; - clang::EmitBackendOutput( - Diags, HeaderSearchOpts, CodeGenOpts, TargetOpts, LangOpts, - Ctx.getTargetInfo().getDataLayoutString(), M.get(), + clang::emitBackendOutput( + CI, Ctx.getTargetInfo().getDataLayoutString(), M.get(), BackendAction::Backend_EmitLL, FS, std::make_unique<llvm::raw_svector_ostream>(Buffer)); llvm::dbgs() << Buffer; }); // Use the LLVM backend to emit the pch container. - clang::EmitBackendOutput(Diags, HeaderSearchOpts, CodeGenOpts, TargetOpts, - LangOpts, - Ctx.getTargetInfo().getDataLayoutString(), M.get(), - BackendAction::Backend_EmitObj, FS, std::move(OS)); + clang::emitBackendOutput(CI, Ctx.getTargetInfo().getDataLayoutString(), + M.get(), BackendAction::Backend_EmitObj, FS, + std::move(OS)); // Free the memory for the temporary buffer. llvm::SmallVector<char, 0> Empty; diff --git a/clang/test/Frontend/ftime-report-template-decl.cpp b/clang/test/Frontend/ftime-report-template-decl.cpp index 9ba9107b980408..fa8b12c143e779 100644 --- a/clang/test/Frontend/ftime-report-template-decl.cpp +++ b/clang/test/Frontend/ftime-report-template-decl.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 %s -emit-llvm -o - -ftime-report 2>&1 | FileCheck %s -// RUN: %clang_cc1 %s -emit-llvm -o - -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING -ftime-report 2>&1 | FileCheck %s +// RUN: %clang_cc1 %s -emit-llvm -mllvm -sort-timers=0 -o - -ftime-report 2>&1 | FileCheck %s +// RUN: %clang_cc1 %s -emit-llvm -mllvm -sort-timers=0 -o - -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING -ftime-report 2>&1 | FileCheck %s // Template function declarations template <typename T> @@ -150,10 +150,8 @@ struct _Wrap_alloc { }; _Wrap_alloc<int>::rebind<int> w; -// CHECK: Miscellaneous Ungrouped Timers -// CHECK-DAG: LLVM IR Generation Time -// CHECK-DAG: Code Generation Time -// CHECK: Total // CHECK: Clang front-end time report -// CHECK: Clang front-end timer -// CHECK: Total +// CHECK: Clang front-end timer +// CHECK-NEXT: LLVM IR Generation Time +// CHECK-NEXT: Code Generation Time +// CHECK-NEXT: Total >From 97fdcb871beae39e8b73977206f1f4ef2be2662d Mon Sep 17 00:00:00 2001 From: Fangrui Song <i...@maskray.me> Date: Wed, 8 Jan 2025 23:47:37 -0800 Subject: [PATCH 2/4] . Created using spr 1.3.5-bogner --- clang/lib/CodeGen/BackendUtil.cpp | 2 +- clang/test/Frontend/ftime-report-template-decl.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index bcb14a9a166077..ea61d48f69be96 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1215,7 +1215,7 @@ void EmitAssemblyHelper::emitAssembly(const CompilerInstance &CI, BackendConsumer *BC) { Timer timer; if (CodeGenOpts.TimePasses) - timer.init("codegen", "Code Generation Time", CI.getFrontendTimerGroup()); + timer.init("codegen", "Code Generation Time"); TimeRegion Region(CodeGenOpts.TimePasses ? &timer : nullptr); setCommandLineOpts(CodeGenOpts); diff --git a/clang/test/Frontend/ftime-report-template-decl.cpp b/clang/test/Frontend/ftime-report-template-decl.cpp index fa8b12c143e779..f303cf9687889f 100644 --- a/clang/test/Frontend/ftime-report-template-decl.cpp +++ b/clang/test/Frontend/ftime-report-template-decl.cpp @@ -150,8 +150,10 @@ struct _Wrap_alloc { }; _Wrap_alloc<int>::rebind<int> w; +// CHECK: Miscellaneous Ungrouped Timers +// CHECK: Code Generation Time +// CHECK: Total // CHECK: Clang front-end time report // CHECK: Clang front-end timer // CHECK-NEXT: LLVM IR Generation Time -// CHECK-NEXT: Code Generation Time // CHECK-NEXT: Total >From dc3ded766d8da5b0db4c979f820652645b2a48fc Mon Sep 17 00:00:00 2001 From: Fangrui Song <i...@maskray.me> Date: Thu, 9 Jan 2025 00:13:14 -0800 Subject: [PATCH 3/4] . Created using spr 1.3.5-bogner --- .../include/clang/Frontend/CompilerInstance.h | 6 ++--- clang/lib/CodeGen/BackendUtil.cpp | 18 +++++++++++---- clang/lib/CodeGen/CodeGenAction.cpp | 3 +-- clang/lib/Frontend/CompilerInstance.cpp | 23 ++++++++----------- .../Frontend/ftime-report-template-decl.cpp | 10 ++++---- 5 files changed, 31 insertions(+), 29 deletions(-) diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index 3cec57abae4445..4a79b8d107171a 100644 --- a/clang/include/clang/Frontend/CompilerInstance.h +++ b/clang/include/clang/Frontend/CompilerInstance.h @@ -118,7 +118,7 @@ class CompilerInstance : public ModuleLoader { std::unique_ptr<Sema> TheSema; /// The frontend timer group. - std::unique_ptr<llvm::TimerGroup> FrontendTimerGroup; + std::unique_ptr<llvm::TimerGroup> timerGroup; /// The frontend timer. std::unique_ptr<llvm::Timer> FrontendTimer; @@ -630,9 +630,7 @@ class CompilerInstance : public ModuleLoader { /// @name Frontend timer /// @{ - llvm::TimerGroup &getFrontendTimerGroup() const { - return *FrontendTimerGroup; - } + llvm::TimerGroup &getTimerGroup() const { return *timerGroup; } bool hasFrontendTimer() const { return (bool)FrontendTimer; } diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index ea61d48f69be96..78597ffa2b5b10 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -16,6 +16,7 @@ #include "clang/Frontend/FrontendDiagnostic.h" #include "clang/Frontend/Utils.h" #include "clang/Lex/HeaderSearchOptions.h" +#include "llvm/ADT/ScopeExit.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Analysis/GlobalsModRef.h" @@ -1213,10 +1214,6 @@ void EmitAssemblyHelper::emitAssembly(const CompilerInstance &CI, BackendAction Action, std::unique_ptr<raw_pwrite_stream> OS, BackendConsumer *BC) { - Timer timer; - if (CodeGenOpts.TimePasses) - timer.init("codegen", "Code Generation Time"); - TimeRegion Region(CodeGenOpts.TimePasses ? &timer : nullptr); setCommandLineOpts(CodeGenOpts); bool RequiresCodeGen = actionRequiresCodeGen(Action); @@ -1359,6 +1356,19 @@ void clang::emitBackendOutput(CompilerInstance &CI, StringRef TDesc, const auto &TOpts = CI.getTargetOpts(); const auto &LOpts = CI.getLangOpts(); + Timer timer; + if (CGOpts.TimePasses) { + CI.getFrontendTimer().stopTimer(); + timer.init("backend", "Backend", CI.getTimerGroup()); + timer.startTimer(); + } + auto _ = llvm::make_scope_exit([&] { + if (!CGOpts.TimePasses) + return; + timer.stopTimer(); + CI.getFrontendTimer().startTimer(); + }); + std::unique_ptr<llvm::Module> EmptyModule; if (!CGOpts.ThinLTOIndexFile.empty()) { // If we are performing a ThinLTO importing compile, load the function index diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index 8681f5f848da84..150faa9fc5960e 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -124,8 +124,7 @@ BackendConsumer::BackendConsumer(CompilerInstance &CI, BackendAction Action, llvm::TimePassesIsEnabled = CodeGenOpts.TimePasses; llvm::TimePassesPerRun = CodeGenOpts.TimePassesPerRun; if (CodeGenOpts.TimePasses) - LLVMIRGeneration.init("irgen", "LLVM IR Generation Time", - CI.getFrontendTimerGroup()); + LLVMIRGeneration.init("irgen", "LLVM IR Generation", CI.getTimerGroup()); } llvm::Module* BackendConsumer::getModule() const { diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index fbfc305ca06a04..43a0a79bf8d28b 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -722,11 +722,9 @@ void CompilerInstance::createCodeCompletionConsumer() { } void CompilerInstance::createFrontendTimer() { - FrontendTimerGroup.reset( - new llvm::TimerGroup("frontend", "Clang front-end time report")); + timerGroup.reset(new llvm::TimerGroup("clang", "Clang time report")); FrontendTimer.reset( - new llvm::Timer("frontend", "Clang front-end timer", - *FrontendTimerGroup)); + new llvm::Timer("frontend", "Clang front-end", *timerGroup)); } CodeCompleteConsumer * @@ -1726,10 +1724,9 @@ void CompilerInstance::createASTReader() { const FrontendOptions &FEOpts = getFrontendOpts(); std::unique_ptr<llvm::Timer> ReadTimer; - if (FrontendTimerGroup) + if (timerGroup) ReadTimer = std::make_unique<llvm::Timer>("reading_modules", - "Reading modules", - *FrontendTimerGroup); + "Reading modules", *timerGroup); TheASTReader = new ASTReader( getPreprocessor(), getModuleCache(), &getASTContext(), getPCHContainerReader(), getFrontendOpts().ModuleFileExtensions, @@ -1758,10 +1755,10 @@ void CompilerInstance::createASTReader() { bool CompilerInstance::loadModuleFile( StringRef FileName, serialization::ModuleFile *&LoadedModuleFile) { llvm::Timer Timer; - if (FrontendTimerGroup) + if (timerGroup) Timer.init("preloading." + FileName.str(), "Preloading " + FileName.str(), - *FrontendTimerGroup); - llvm::TimeRegion TimeLoading(FrontendTimerGroup ? &Timer : nullptr); + *timerGroup); + llvm::TimeRegion TimeLoading(timerGroup ? &Timer : nullptr); // If we don't already have an ASTReader, create one now. if (!TheASTReader) @@ -1892,10 +1889,10 @@ ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST( // Time how long it takes to load the module. llvm::Timer Timer; - if (FrontendTimerGroup) + if (timerGroup) Timer.init("loading." + ModuleFilename, "Loading " + ModuleFilename, - *FrontendTimerGroup); - llvm::TimeRegion TimeLoading(FrontendTimerGroup ? &Timer : nullptr); + *timerGroup); + llvm::TimeRegion TimeLoading(timerGroup ? &Timer : nullptr); llvm::TimeTraceScope TimeScope("Module Load", ModuleName); // Try to load the module file. If we are not trying to load from the diff --git a/clang/test/Frontend/ftime-report-template-decl.cpp b/clang/test/Frontend/ftime-report-template-decl.cpp index f303cf9687889f..7be18fd1deacc2 100644 --- a/clang/test/Frontend/ftime-report-template-decl.cpp +++ b/clang/test/Frontend/ftime-report-template-decl.cpp @@ -150,10 +150,8 @@ struct _Wrap_alloc { }; _Wrap_alloc<int>::rebind<int> w; -// CHECK: Miscellaneous Ungrouped Timers -// CHECK: Code Generation Time -// CHECK: Total -// CHECK: Clang front-end time report -// CHECK: Clang front-end timer -// CHECK-NEXT: LLVM IR Generation Time +// CHECK: Clang time report +// CHECK: Clang front-end +// CHECK-NEXT: LLVM IR Generation +// CHECK-NEXT: Backend // CHECK-NEXT: Total >From 1a3259983efadd83a2a90a424046a7d5807a4759 Mon Sep 17 00:00:00 2001 From: Fangrui Song <i...@maskray.me> Date: Thu, 9 Jan 2025 00:32:15 -0800 Subject: [PATCH 4/4] fix overlap Created using spr 1.3.5-bogner --- clang/lib/CodeGen/CodeGenAction.cpp | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index 150faa9fc5960e..00fa42a124c854 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -163,18 +163,16 @@ bool BackendConsumer::HandleTopLevelDecl(DeclGroupRef D) { "LLVM IR generation of declaration"); // Recurse. - if (TimerIsEnabled) { - LLVMIRGenerationRefCount += 1; - if (LLVMIRGenerationRefCount == 1) - LLVMIRGeneration.startTimer(); + if (TimerIsEnabled && !LLVMIRGenerationRefCount++) { + CI.getFrontendTimer().stopTimer(); + LLVMIRGeneration.startTimer(); } Gen->HandleTopLevelDecl(D); - if (TimerIsEnabled) { - LLVMIRGenerationRefCount -= 1; - if (LLVMIRGenerationRefCount == 0) - LLVMIRGeneration.stopTimer(); + if (TimerIsEnabled && !--LLVMIRGenerationRefCount) { + LLVMIRGeneration.stopTimer(); + CI.getFrontendTimer().startTimer(); } return true; @@ -184,13 +182,17 @@ void BackendConsumer::HandleInlineFunctionDefinition(FunctionDecl *D) { PrettyStackTraceDecl CrashInfo(D, SourceLocation(), Context->getSourceManager(), "LLVM IR generation of inline function"); - if (TimerIsEnabled) + if (TimerIsEnabled) { + CI.getFrontendTimer().stopTimer(); LLVMIRGeneration.startTimer(); + } Gen->HandleInlineFunctionDefinition(D); - if (TimerIsEnabled) + if (TimerIsEnabled) { LLVMIRGeneration.stopTimer(); + CI.getFrontendTimer().startTimer(); + } } void BackendConsumer::HandleInterestingDecl(DeclGroupRef D) { @@ -240,18 +242,16 @@ void BackendConsumer::HandleTranslationUnit(ASTContext &C) { { llvm::TimeTraceScope TimeScope("Frontend"); PrettyStackTraceString CrashInfo("Per-file LLVM IR generation"); - if (TimerIsEnabled) { - LLVMIRGenerationRefCount += 1; - if (LLVMIRGenerationRefCount == 1) - LLVMIRGeneration.startTimer(); + if (TimerIsEnabled && !LLVMIRGenerationRefCount++) { + CI.getFrontendTimer().stopTimer(); + LLVMIRGeneration.startTimer(); } Gen->HandleTranslationUnit(C); - if (TimerIsEnabled) { - LLVMIRGenerationRefCount -= 1; - if (LLVMIRGenerationRefCount == 0) - LLVMIRGeneration.stopTimer(); + if (TimerIsEnabled && !--LLVMIRGenerationRefCount) { + LLVMIRGeneration.stopTimer(); + CI.getFrontendTimer().startTimer(); } IRGenFinished = true; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits