Skip to content

Commit 474237b

Browse files
[mlir] Expose output strategies of TimingManager (#166548)
After the original API change to DefaultTimingManager::setOutput() (see 362aa43), users are forced to provide their own implementation of OutputStrategy. However, default MLIR implementations are usually sufficient. Expose Text and Json strategies via factory-like method to avoid the problem in downstream projects.
1 parent 47cf5a1 commit 474237b

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

mlir/include/mlir/Support/Timing.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,11 @@ void registerDefaultTimingManagerCLOptions();
473473
/// 'registerDefaultTimingManagerOptions' to a `DefaultTimingManager`.
474474
void applyDefaultTimingManagerCLOptions(DefaultTimingManager &tm);
475475

476+
/// Create an output strategy for the specified format, to be passed to
477+
/// DefaultTimingManager::setOutput().
478+
std::unique_ptr<OutputStrategy>
479+
createOutputStrategy(DefaultTimingManager::OutputFormat fmt, raw_ostream &os);
480+
476481
} // namespace mlir
477482

478483
#endif // MLIR_SUPPORT_TIMING_H

mlir/lib/Support/Timing.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -619,11 +619,17 @@ void mlir::applyDefaultTimingManagerCLOptions(DefaultTimingManager &tm) {
619619
return;
620620
tm.setEnabled(options->timing);
621621
tm.setDisplayMode(options->displayMode);
622+
tm.setOutput(createOutputStrategy(options->outputFormat, llvm::errs()));
623+
}
622624

623-
std::unique_ptr<OutputStrategy> printer;
624-
if (options->outputFormat == OutputFormat::Text)
625-
printer = std::make_unique<OutputTextStrategy>(llvm::errs());
626-
else if (options->outputFormat == OutputFormat::Json)
627-
printer = std::make_unique<OutputJsonStrategy>(llvm::errs());
628-
tm.setOutput(std::move(printer));
625+
std::unique_ptr<OutputStrategy>
626+
mlir::createOutputStrategy(DefaultTimingManager::OutputFormat fmt,
627+
raw_ostream &os) {
628+
switch (fmt) {
629+
case OutputFormat::Text:
630+
return std::make_unique<OutputTextStrategy>(os);
631+
case OutputFormat::Json:
632+
return std::make_unique<OutputJsonStrategy>(os);
633+
}
634+
llvm_unreachable("Invalid output format");
629635
}

0 commit comments

Comments
 (0)