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

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Apr 17 07:04:47 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-llvm

Author: Zichen Lu (MikaOvO)

<details>
<summary>Changes</summary>

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
```

---
Full diff: https://github.com/llvm/llvm-project/pull/136142.diff


1 Files Affected:

- (modified) mlir/lib/Target/LLVM/NVVM/Target.cpp (+19-11) 


``````````diff
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;
 }
 

``````````

</details>


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


More information about the Mlir-commits mailing list