[Mlir-commits] [mlir] [mlir][target] RAII wrap moduleToObject timer to ensure call `clear` function (PR #136142)

Zichen Lu llvmlistbot at llvm.org
Thu Apr 17 07:04:11 PDT 2025


https://github.com/MikaOvO created https://github.com/llvm/llvm-project/pull/136142

As title, we need to call `Timer::clear` to avoid extra log like this:
```
===-------------------------------------------------------------------------===
                           ...
===-------------------------------------------------------------------------===
  Total Execution Time: 0.0000 seconds (0.0000 wall clock)

   ---Wall Time---  --- Name ---
        -----       ....
        -----       Total
```

>From 71dae2896b871dd52454eb4b1a90f459f8f72372 Mon Sep 17 00:00:00 2001
From: Zichen Lu <mikaovo2000 at gmail.com>
Date: Thu, 17 Apr 2025 22:00:59 +0800
Subject: [PATCH] [mlir][target] RAII wrap moduleToObject timer to ensure call
 clear function

---
 mlir/lib/Target/LLVM/NVVM/Target.cpp | 30 ++++++++++++++++++----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp
index 5a2b829fbd1bd..ea0c2b6663fbb 100644
--- a/mlir/lib/Target/LLVM/NVVM/Target.cpp
+++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp
@@ -669,10 +669,6 @@ NVPTXSerializer::compileToBinaryNVPTX(const std::string &ptxCode) {
 
 std::optional<SmallVector<char, 0>>
 NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
-  llvm::Timer moduleToObjectTimer(
-      "moduleToObjectTimer",
-      "Timer for perf llvm-ir -> isa and isa -> binary.");
-  moduleToObjectTimer.startTimer();
   // Return LLVM IR if the compilation target is `offload`.
 #define DEBUG_TYPE "serialize-to-llvm"
   LLVM_DEBUG({
@@ -691,6 +687,18 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
   return std::nullopt;
 #endif // LLVM_HAS_NVPTX_TARGET
 
+  auto timerDeleter = [](llvm::Timer *timer) {
+    if (timer != nullptr) {
+      timer->clear();
+      delete timer;
+    }
+  };
+  std::unique_ptr<llvm::Timer, decltype(timerDeleter)> moduleToObjectTimer(
+      new llvm::Timer("moduleToObjectTimer",
+                      "Timer for perf llvm-ir -> isa and isa -> binary."),
+      timerDeleter);
+  moduleToObjectTimer->startTimer();
+
   // Emit PTX code.
   std::optional<llvm::TargetMachine *> targetMachine =
       getOrCreateTargetMachine();
@@ -706,9 +714,9 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
     return std::nullopt;
   }
 
-  moduleToObjectTimer.stopTimer();
-  llvmToISATimeInMs = moduleToObjectTimer.getTotalTime().getWallTime() * 1000;
-  moduleToObjectTimer.clear();
+  moduleToObjectTimer->stopTimer();
+  llvmToISATimeInMs = moduleToObjectTimer->getTotalTime().getWallTime() * 1000;
+  moduleToObjectTimer->clear();
   if (isaCallback)
     isaCallback(serializedISA.value());
 
@@ -729,7 +737,7 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
   }
 
   std::optional<SmallVector<char, 0>> result;
-  moduleToObjectTimer.startTimer();
+  moduleToObjectTimer->startTimer();
   // Compile to binary.
 #if MLIR_ENABLE_NVPTXCOMPILER
   result = compileToBinaryNVPTX(*serializedISA);
@@ -737,9 +745,9 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
   result = compileToBinary(*serializedISA);
 #endif // MLIR_ENABLE_NVPTXCOMPILER
 
-  moduleToObjectTimer.stopTimer();
-  isaToBinaryTimeInMs = moduleToObjectTimer.getTotalTime().getWallTime() * 1000;
-  moduleToObjectTimer.clear();
+  moduleToObjectTimer->stopTimer();
+  isaToBinaryTimeInMs =
+      moduleToObjectTimer->getTotalTime().getWallTime() * 1000;
   return result;
 }
 



More information about the Mlir-commits mailing list