Skip to content

Commit 71dae28

Browse files
committed
[mlir][target] RAII wrap moduleToObject timer to ensure call clear function
1 parent ade2276 commit 71dae28

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

mlir/lib/Target/LLVM/NVVM/Target.cpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -669,10 +669,6 @@ NVPTXSerializer::compileToBinaryNVPTX(const std::string &ptxCode) {
669669

670670
std::optional<SmallVector<char, 0>>
671671
NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
672-
llvm::Timer moduleToObjectTimer(
673-
"moduleToObjectTimer",
674-
"Timer for perf llvm-ir -> isa and isa -> binary.");
675-
moduleToObjectTimer.startTimer();
676672
// Return LLVM IR if the compilation target is `offload`.
677673
#define DEBUG_TYPE "serialize-to-llvm"
678674
LLVM_DEBUG({
@@ -691,6 +687,18 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
691687
return std::nullopt;
692688
#endif // LLVM_HAS_NVPTX_TARGET
693689

690+
auto timerDeleter = [](llvm::Timer *timer) {
691+
if (timer != nullptr) {
692+
timer->clear();
693+
delete timer;
694+
}
695+
};
696+
std::unique_ptr<llvm::Timer, decltype(timerDeleter)> moduleToObjectTimer(
697+
new llvm::Timer("moduleToObjectTimer",
698+
"Timer for perf llvm-ir -> isa and isa -> binary."),
699+
timerDeleter);
700+
moduleToObjectTimer->startTimer();
701+
694702
// Emit PTX code.
695703
std::optional<llvm::TargetMachine *> targetMachine =
696704
getOrCreateTargetMachine();
@@ -706,9 +714,9 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
706714
return std::nullopt;
707715
}
708716

709-
moduleToObjectTimer.stopTimer();
710-
llvmToISATimeInMs = moduleToObjectTimer.getTotalTime().getWallTime() * 1000;
711-
moduleToObjectTimer.clear();
717+
moduleToObjectTimer->stopTimer();
718+
llvmToISATimeInMs = moduleToObjectTimer->getTotalTime().getWallTime() * 1000;
719+
moduleToObjectTimer->clear();
712720
if (isaCallback)
713721
isaCallback(serializedISA.value());
714722

@@ -729,17 +737,17 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
729737
}
730738

731739
std::optional<SmallVector<char, 0>> result;
732-
moduleToObjectTimer.startTimer();
740+
moduleToObjectTimer->startTimer();
733741
// Compile to binary.
734742
#if MLIR_ENABLE_NVPTXCOMPILER
735743
result = compileToBinaryNVPTX(*serializedISA);
736744
#else
737745
result = compileToBinary(*serializedISA);
738746
#endif // MLIR_ENABLE_NVPTXCOMPILER
739747

740-
moduleToObjectTimer.stopTimer();
741-
isaToBinaryTimeInMs = moduleToObjectTimer.getTotalTime().getWallTime() * 1000;
742-
moduleToObjectTimer.clear();
748+
moduleToObjectTimer->stopTimer();
749+
isaToBinaryTimeInMs =
750+
moduleToObjectTimer->getTotalTime().getWallTime() * 1000;
743751
return result;
744752
}
745753

0 commit comments

Comments
 (0)