-mlir-print-ir-module-scope option cannot be used without disabling multithread for pass manager. For the usability, we can throw a validation error in mlir-opt instead of assertion failure.
Issue: https://github.com/llvm/llvm-project/issues/61578
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D146785
/// Apply any values provided to the pass manager options that were registered
/// with 'registerPassManagerOptions'.
-void applyPassManagerCLOptions(PassManager &pm);
+LogicalResult applyPassManagerCLOptions(PassManager &pm);
/// Apply any values provided to the timing manager options that were registered
/// with `registerDefaultTimingManagerOptions`. This is a handy helper function
*options;
}
-void mlir::applyPassManagerCLOptions(PassManager &pm) {
+LogicalResult mlir::applyPassManagerCLOptions(PassManager &pm) {
if (!options.isConstructed())
- return;
+ return failure();
// Generate a reproducer on crash/failure.
if (options->reproducerFile.getNumOccurrences())
if (options->passStatistics)
pm.enableStatistics(options->passStatisticsDisplayMode);
+ if (options->printModuleScope && pm.getContext()->isMultithreadingEnabled()) {
+ emitError(UnknownLoc::get(pm.getContext()))
+ << "IR print for module scope can't be setup on a pass-manager "
+ "without disabling multi-threading first.\n";
+ return failure();
+ }
+
// Add the IR printing instrumentation.
options->addPrinterInstrumentation(pm);
+ return success();
}
void mlir::applyDefaultTimingPassManagerCLOptions(PassManager &pm) {
// Prepare the pass manager, applying command-line and reproducer options.
PassManager pm(op.get()->getName(), PassManager::Nesting::Implicit);
pm.enableVerifier(config.shouldVerifyPasses());
- applyPassManagerCLOptions(pm);
+ if (failed(applyPassManagerCLOptions(pm)))
+ return failure();
pm.enableTiming(timing);
if (failed(reproOptions.apply(pm)) || failed(config.setupPassPipeline(pm)))
return failure();
// RUN: not mlir-opt %s -pass-pipeline='builtin.module(builtin.module(test-module-pass{test-option=a}))' 2>&1 | FileCheck %s
+// RUN: not mlir-opt %s -mlir-print-ir-module-scope -mlir-print-ir-before=cse 2>&1 | FileCheck -check-prefix=PRINT_MODULE_IR_WITH_MULTITHREAD %s
// CHECK: <Pass-Options-Parser>: no such option test-option
// CHECK: failed to add `test-module-pass` with options `test-option=a`
// CHECK: failed to add `builtin.module` with options `` to inner pipeline
module {}
+
+// PRINT_MODULE_IR_WITH_MULTITHREAD: IR print for module scope can't be setup on a pass-manager without disabling multi-threading first.