diff --git a/mlir/include/mlir/Dialect/Transform/Transforms/Passes.td b/mlir/include/mlir/Dialect/Transform/Transforms/Passes.td index c900fee76b814..286f69bc52486 100644 --- a/mlir/include/mlir/Dialect/Transform/Transforms/Passes.td +++ b/mlir/include/mlir/Dialect/Transform/Transforms/Passes.td @@ -51,8 +51,9 @@ def PreloadLibraryPass : Pass<"transform-preload-library"> { Warning: Only a single such pass should exist for a given MLIR context. This is a temporary solution until a resource-based solution is available. - TODO: investigate using a resource blob if some ownership mode allows it. }]; + // TODO: investigate using a resource blob if some ownership mode allows it. + let dependentDialects = ["::mlir::transform::TransformDialect"]; let options = [ ListOption<"transformLibraryPaths", "transform-library-paths", "std::string", "Optional paths to files with modules that should be merged into the " @@ -67,6 +68,7 @@ def InterpreterPass : Pass<"transform-interpreter"> { sequence transformation specified by the provided name (defaults to `__transform_main`). }]; + let dependentDialects = ["::mlir::transform::TransformDialect"]; let options = [ Option<"entryPoint", "entry-point", "std::string", /*default=*/[{"__transform_main"}], diff --git a/mlir/lib/Dialect/Transform/Transforms/InterpreterPass.cpp b/mlir/lib/Dialect/Transform/Transforms/InterpreterPass.cpp index f473d5aa728c5..3ec51d88729a0 100644 --- a/mlir/lib/Dialect/Transform/Transforms/InterpreterPass.cpp +++ b/mlir/lib/Dialect/Transform/Transforms/InterpreterPass.cpp @@ -25,13 +25,10 @@ class InterpreterPass public: using Base::Base; - LogicalResult initialize(MLIRContext *context) override { - // TODO: investigate using a resource blob if some ownership mode allows it. - transformModule = transform::detail::getPreloadedTransformModule(context); - return success(); - } - void runOnOperation() override { + MLIRContext *context = &getContext(); + ModuleOp transformModule = + transform::detail::getPreloadedTransformModule(context); if (failed(transform::applyTransformNamedSequence( getOperation(), transformModule, options.enableExpensiveChecks(true), entryPoint))) @@ -41,11 +38,5 @@ class InterpreterPass private: /// Transform interpreter options. transform::TransformOptions options; - - /// The separate transform module to be used for transformations, shared - /// across multiple instances of the pass if it is applied in parallel to - /// avoid potentially expensive cloning. MUST NOT be modified after the pass - /// has been initialized. - ModuleOp transformModule; }; } // namespace diff --git a/mlir/test/Dialect/Transform/interpreter-entry-point.mlir b/mlir/test/Dialect/Transform/interpreter-entry-point.mlir new file mode 100644 index 0000000000000..ccd9bef3d506d --- /dev/null +++ b/mlir/test/Dialect/Transform/interpreter-entry-point.mlir @@ -0,0 +1,17 @@ +// RUN: mlir-opt %s -transform-interpreter=entry-point=entry_point \ +// RUN: -split-input-file -verify-diagnostics + +module attributes { transform.with_named_sequence } { + transform.named_sequence @entry_point(!transform.any_op {transform.readonly}) { + ^bb0(%arg0: !transform.any_op): + // expected-remark @below {{applying transformation}} + transform.test_transform_op + transform.yield + } + + transform.named_sequence @__transform_main(!transform.any_op {transform.readonly}) { + ^bb0(%arg0: !transform.any_op): + transform.test_transform_op // Note: does not yield remark. + transform.yield + } +} diff --git a/mlir/test/Dialect/Transform/interpreter.mlir b/mlir/test/Dialect/Transform/interpreter.mlir new file mode 100644 index 0000000000000..bb41420bef4d6 --- /dev/null +++ b/mlir/test/Dialect/Transform/interpreter.mlir @@ -0,0 +1,17 @@ +// RUN: mlir-opt %s -transform-interpreter \ +// RUN: -split-input-file -verify-diagnostics + +module attributes { transform.with_named_sequence } { + transform.named_sequence @__transform_main(!transform.any_op {transform.readonly}) { + ^bb0(%arg0: !transform.any_op): + // expected-remark @below {{applying transformation}} + transform.test_transform_op + transform.yield + } + + transform.named_sequence @entry_point(!transform.any_op {transform.readonly}) { + ^bb0(%arg0: !transform.any_op): + transform.test_transform_op // Note: does not yield remark. + transform.yield + } +} diff --git a/mlir/test/Dialect/Transform/preload-library.mlir b/mlir/test/Dialect/Transform/preload-library.mlir new file mode 100644 index 0000000000000..61d22252dc61d --- /dev/null +++ b/mlir/test/Dialect/Transform/preload-library.mlir @@ -0,0 +1,19 @@ +// RUN: mlir-opt %s \ +// RUN: -transform-preload-library=transform-library-paths=%p%{fs-sep}test-interpreter-library \ +// RUN: -transform-interpreter=entry-point=private_helper \ +// RUN: -split-input-file -verify-diagnostics + +// expected-remark @below {{message}} +module {} + +// ----- + +// Note: no remark here since local entry point takes precedence. +module attributes { transform.with_named_sequence } { + transform.named_sequence @private_helper(!transform.any_op {transform.readonly}) { + ^bb0(%arg0: !transform.any_op): + // expected-remark @below {{applying transformation}} + transform.test_transform_op + transform.yield + } +}