================
@@ -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

Reply via email to