[Mlir-commits] [mlir] [mlir][scf][transform] Add scope op & transform (PR #87352)
Gil Rapaport
llvmlistbot at llvm.org
Mon Apr 8 06:22:39 PDT 2024
================
@@ -434,6 +434,72 @@ def ApplyRegisteredPassOp : TransformDialectOp<"apply_registered_pass",
}];
}
+def AsScopeOp : TransformDialectOp<"as_scope", [
+ DeclareOpInterfaceMethods<TransformOpInterface>,
+ DeclareOpInterfaceMethods<MemoryEffectsOpInterface>,
+ IsolatedFromAbove,
+ SingleBlockImplicitTerminator<"::mlir::transform::YieldOp">]> {
+ let summary = "Attempts sequences of transforms until one succeeds";
+ let description = [{
+ The purpose of this op is to provide an ad-hoc scope for transformations,
+ in order to narrow their impact to specific ops.
+
+ This op creates a temporary scf.scope containing clones of its first operand
+ and applies the transformations within its body to that scope. If
+ successful, the scope's results replace all uses of any original operation
+ outside the scope, the scope is inlined and the original operations are
+ erased. On failure, the scf.scope is erased, leaving payload IR unmodified.
+
+ The operation takes as arguments a handle whose payload ops are to be
+ scoped in the order they are listed, and and optional pair of attribute,
+ handle defining an insertion point for the scf.scope. If specified, the
+ insertion point handle must hold a single payload op. If omitted, the
+ payload ops must form an interval. It is the user's responsibility to make
+ sure that the payload ops can be moved to the designated location in the
+ designated order.
+
+ This operation is useful for narrowing the scope of ops affected by the some
+ transformation, either for functional reasons, e.g.
+
+ ```mlir
+ transform.as_scope %what before %where : (!transform.any_op, !transform.any_op) -> (), !transform.any_op {
----------------
aniragil wrote:
Right, fixed
https://github.com/llvm/llvm-project/pull/87352
More information about the Mlir-commits
mailing list