diff --git a/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td b/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td --- a/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td +++ b/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td @@ -166,6 +166,11 @@ let assemblyFormat = "`to` $target $region attr-dict `:` type($target)"; let hasVerifier = 1; + let builders = [ + OpBuilder<(ins "Value":$target, + "function_ref":$bodyBuilder)>, + ]; + let extraClassDeclaration = [{ ::mlir::DiagnosedSilenceableFailure applyToOne( ::mlir::Operation *target, diff --git a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp --- a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp +++ b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp @@ -477,6 +477,18 @@ transform::modifiesPayload(effects); } +void transform::ApplyPatternsOp::build( + OpBuilder &builder, OperationState &result, Value target, + function_ref bodyBuilder) { + assert(bodyBuilder && "the builder callback must be present"); + result.addOperands(target); + + OpBuilder::InsertionGuard g(builder); + Region *region = result.addRegion(); + builder.createBlock(region); + bodyBuilder(builder, result.location); +} + //===----------------------------------------------------------------------===// // ApplyCanonicalizationPatternsOp //===----------------------------------------------------------------------===//