================ @@ -1346,14 +1344,30 @@ 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(); + + Timer timer; + if (CGOpts.TimePasses) { + CI.getFrontendTimer().stopTimer(); + timer.init("backend", "Backend", CI.getTimerGroup()); + timer.startTimer(); + } + auto _ = llvm::make_scope_exit([&] { ---------------- MaskRay wrote:
This is difficult.... Parsing and codegen are interleaved in clang.`ParseAST` calls BackendConsumer::HandleTopLevelDecl and BackendConsumer::HandleTranslationUnit ([call stack](https://maskray.me/blog/2023-09-24-a-deep-dive-into-clang-source-file-compilation), which do code generation. I've introduced `yieldTo` and changed the timers. Updated the description. https://github.com/llvm/llvm-project/pull/122225 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits