[Mlir-commits] [mlir] [MLIR][Timing] Fix timing report of nested pass pipeline and negative Rest field when using -mlir-timing (Try to close #169443) (PR #169615)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Nov 26 19:25:10 PST 2025
https://github.com/Xubaidu updated https://github.com/llvm/llvm-project/pull/169615
>From 85925cbf6bc575ff35971c339dfa5734bf4ec3a2 Mon Sep 17 00:00:00 2001
From: Chenyang Xu <chenyangx at nvidia.com>
Date: Wed, 26 Nov 2025 14:52:34 +0800
Subject: [PATCH] fix timing
---
mlir/lib/Pass/PassTiming.cpp | 5 ++---
mlir/test/Pass/pass-timing.mlir | 20 ++++++++++++++++++++
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/mlir/lib/Pass/PassTiming.cpp b/mlir/lib/Pass/PassTiming.cpp
index dab56f09a72eb..c67f99453b8bb 100644
--- a/mlir/lib/Pass/PassTiming.cpp
+++ b/mlir/lib/Pass/PassTiming.cpp
@@ -90,8 +90,8 @@ struct PassTiming : public PassInstrumentation {
auto &activeTimers = activeThreadTimers[tid];
auto &parentScope = activeTimers.empty() ? rootScope : activeTimers.back();
+ parentTimerIndices[{tid, pass}] = activeTimers.size();
if (auto *adaptor = dyn_cast<OpToOpPassAdaptor>(pass)) {
- parentTimerIndices[{tid, pass}] = activeTimers.size();
auto scope =
parentScope.nest(pass->getThreadingSiblingOrThis(),
[adaptor]() { return adaptor->getAdaptorName(); });
@@ -107,8 +107,7 @@ struct PassTiming : public PassInstrumentation {
void runAfterPass(Pass *pass, Operation *) override {
auto tid = llvm::get_threadid();
- if (isa<OpToOpPassAdaptor>(pass))
- parentTimerIndices.erase({tid, pass});
+ parentTimerIndices.erase({tid, pass});
auto &activeTimers = activeThreadTimers[tid];
assert(!activeTimers.empty() && "expected active timer");
activeTimers.pop_back();
diff --git a/mlir/test/Pass/pass-timing.mlir b/mlir/test/Pass/pass-timing.mlir
index cfb4b74cd19ca..2b8c306822b2d 100644
--- a/mlir/test/Pass/pass-timing.mlir
+++ b/mlir/test/Pass/pass-timing.mlir
@@ -5,6 +5,8 @@
// RUN: mlir-opt %s -mlir-disable-threading=false -verify-each=true -pass-pipeline='builtin.module(func.func(cse,canonicalize,cse))' -mlir-timing -mlir-timing-display=list 2>&1 | FileCheck -check-prefix=MT_LIST %s
// RUN: mlir-opt %s -mlir-disable-threading=false -verify-each=true -pass-pipeline='builtin.module(func.func(cse,canonicalize,cse))' -mlir-timing -mlir-timing-display=tree 2>&1 | FileCheck -check-prefix=MT_PIPELINE %s
// RUN: mlir-opt %s -mlir-disable-threading=true -verify-each=false -test-pm-nested-pipeline -mlir-timing -mlir-timing-display=tree 2>&1 | FileCheck -check-prefix=NESTED_PIPELINE %s
+// RUN: mlir-opt %s -mlir-disable-threading=true -verify-each=true -pass-pipeline='builtin.module(func.func(cse,canonicalize,cse),inline)' -mlir-timing -mlir-timing-display=tree 2>&1 | FileCheck -check-prefix=DYNAMIC-PIPELINE %s
+// RUN: mlir-opt %s -mlir-disable-threading=false -verify-each=true -pass-pipeline='builtin.module(func.func(cse,canonicalize,cse),inline)' -mlir-timing -mlir-timing-display=tree 2>&1 | FileCheck -check-prefix=DYNAMIC-PIPELINE %s
// LIST: Execution time report
// LIST: Total Execution Time:
@@ -95,6 +97,24 @@
// NESTED_PIPELINE-NEXT: Rest
// NESTED_PIPELINE-NEXT: Total
+// DYNAMIC-PIPELINE: Execution time report
+// DYNAMIC-PIPELINE: Total Execution Time:
+// DYNAMIC-PIPELINE: Name
+// DYNAMIC-PIPELINE-NEXT: Parser
+// DYNAMIC-PIPELINE-NEXT: 'func.func' Pipeline
+// DYNAMIC-PIPELINE-NEXT: CSE
+// DYNAMIC-PIPELINE-NEXT: (A) DominanceInfo
+// DYNAMIC-PIPELINE-NEXT: Canonicalizer
+// DYNAMIC-PIPELINE-NEXT: CSE
+// DYNAMIC-PIPELINE-NEXT: (A) DominanceInfo
+// DYNAMIC-PIPELINE-NEXT: Inliner
+// DYNAMIC-PIPELINE-NEXT: (A) CallGraph
+// DYNAMIC-PIPELINE-NEXT: 'func.func' Pipeline
+// DYNAMIC-PIPELINE-NEXT: Canonicalizer
+// DYNAMIC-PIPELINE-NEXT: Output
+// DYNAMIC-PIPELINE-NEXT: Rest
+// DYNAMIC-PIPELINE-NEXT: Total
+
func.func @foo() {
return
}
More information about the Mlir-commits
mailing list