From f18e14d863363d93a587bf6f25096d29d08f25b3 Mon Sep 17 00:00:00 2001 From: Nicolas Vasilache Date: Mon, 23 Jan 2023 07:43:24 -0800 Subject: [PATCH] [mlir][Linalg] NFC - Add transform pack builder --- .../Dialect/Linalg/TransformOps/LinalgTransformOps.td | 6 ++++++ .../include/mlir/Dialect/Transform/IR/TransformOps.td | 2 +- .../Linalg/TransformOps/LinalgTransformOps.cpp | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td index 991aa04..804ce5b 100644 --- a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td +++ b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td @@ -366,6 +366,7 @@ def MultiTileSizesOp : Op, DeclareOpInterfaceMethods,]> { @@ -441,6 +442,11 @@ def PackOp : Op":$mixedPackedSizes)> + ]; + let extraClassDeclaration = [{ ::llvm::SmallVector<::mlir::OpFoldResult> getMixedPackedSizes(); }]; diff --git a/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td b/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td index 2dc93c1..4bb6700 100644 --- a/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td +++ b/mlir/include/mlir/Dialect/Transform/IR/TransformOps.td @@ -225,7 +225,7 @@ def GetProducerOfOperand : TransformDialectOp<"get_producer_of_operand", let arguments = (ins TransformHandleTypeInterface:$target, I64Attr:$operand_number); - let results = (outs TransformHandleTypeInterface:$parent); + let results = (outs TransformHandleTypeInterface:$producer); let assemblyFormat = "$target `[` $operand_number `]` attr-dict `:` " "functional-type(operands, results)"; } diff --git a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp index 7f3ac24..3df2373 100644 --- a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp +++ b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp @@ -874,6 +874,25 @@ LogicalResult transform::MultiTileSizesOp::verify() { // PackOp //===---------------------------------------------------------------------===// +void transform::PackOp::build(OpBuilder &builder, OperationState &result, + Value target, + ArrayRef mixedPackedSizes) { + SmallVector staticPackedSizes; + SmallVector dynamicPackedSizes; + dispatchIndexOpFoldResults(mixedPackedSizes, dynamicPackedSizes, + staticPackedSizes); + // Call the default builder which sets up the proper operands segment sizes + // attributes for multiple variadic operands. In the absence of this, horrible + // bugs ensue. + Type linalgOpHType = transform::OperationType::get( + builder.getContext(), linalg::GenericOp::getOperationName()); + build(builder, result, + /*resultType=*/linalgOpHType, + /*target=*/target, + /*dynamic_sizes=*/dynamicPackedSizes, + /*static_sizes=*/builder.getDenseI64ArrayAttr(staticPackedSizes)); +} + SmallVector transform::PackOp::getMixedPackedSizes() { Builder b(getContext()); return getMixedValues(getStaticPackedSizes(), getPackedSizes(), b); -- 2.7.4