[Mlir-commits] [mlir] e86169f - [mlir][tensor] Add a custom builder for pack op.
Hanhan Wang
llvmlistbot at llvm.org
Mon Nov 28 15:18:53 PST 2022
Author: Hanhan Wang
Date: 2022-11-28T15:18:42-08:00
New Revision: e86169f09070b153972094f22f7c6783e08f4e92
URL: https://github.com/llvm/llvm-project/commit/e86169f09070b153972094f22f7c6783e08f4e92
DIFF: https://github.com/llvm/llvm-project/commit/e86169f09070b153972094f22f7c6783e08f4e92.diff
LOG: [mlir][tensor] Add a custom builder for pack op.
The `paddingValue` and `outerDimsPerm` are optional to the op;
`innerTiles` can be variadic in terms of static sizes and dynamic sizes.
Add a custom builder for building pack op easier.
Reviewed By: mravishankar
Differential Revision: https://reviews.llvm.org/D138860
Added:
Modified:
mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
mlir/lib/Dialect/Tensor/IR/TensorOps.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td b/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
index 0af5811638a85..53c8448855a9f 100644
--- a/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
+++ b/mlir/include/mlir/Dialect/Tensor/IR/TensorOps.td
@@ -1761,6 +1761,14 @@ def Tensor_PackOp : Tensor_RelayoutOp<"pack", [
`into` $dest attr-dict `:` type($source) `->` type($dest)
}];
+ let builders = [
+ OpBuilder<(ins "Value":$source, "Value":$dest,
+ "ArrayRef<int64_t>":$innerDimsPos,
+ "ArrayRef<OpFoldResult>":$innerTiles,
+ CArg<"Optional<Value>", "llvm::None">:$paddingValue,
+ CArg<"ArrayRef<int64_t>", "{}">:$outerDimsPerm)>
+ ];
+
let extraClassDeclaration = commonExtraClassDeclaration # [{
// Method to get the `ShapedType` of the result based on the inner tiles,
// position of the inner tiles (innerDimsPos) and interchange vector of
diff --git a/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp b/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp
index f279876d19541..2910191cc1c8a 100644
--- a/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp
+++ b/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp
@@ -3238,6 +3238,26 @@ void PackOp::getAsmResultNames(function_ref<void(Value, StringRef)> setNameFn) {
setNameFn(getResult(), "pack");
}
+void PackOp::build(OpBuilder &builder, OperationState &state, Value source,
+ Value dest, ArrayRef<int64_t> innerDimsPos,
+ ArrayRef<OpFoldResult> innerTiles,
+ Optional<Value> paddingValue,
+ ArrayRef<int64_t> outerDimsPerm) {
+ assert(innerDimsPos.size() == innerTiles.size() &&
+ "number of tile sizes specified must match the specified number of "
+ "original dimensions to be tiled");
+ SmallVector<int64_t> staticTileSizes;
+ SmallVector<Value> dynamicTileSizes;
+ dispatchIndexOpFoldResults(innerTiles, dynamicTileSizes, staticTileSizes,
+ ShapedType::kDynamic);
+ build(builder, state, dest.getType(), source, dest,
+ paddingValue ? paddingValue.value() : nullptr,
+ outerDimsPerm.empty() ? nullptr
+ : builder.getDenseI64ArrayAttr(outerDimsPerm),
+ builder.getDenseI64ArrayAttr(innerDimsPos), dynamicTileSizes,
+ builder.getDenseI64ArrayAttr(staticTileSizes));
+}
+
LogicalResult
PackOp::reifyResultShapes(OpBuilder &builder,
ReifiedRankedShapedTypeDims &reifiedReturnShapes) {
More information about the Mlir-commits
mailing list