[Mlir-commits] [mlir] [mlir][tensor][linalg] Move Pack/Unpack Ops to Linalg (PR #123902)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Jan 22 00:15:08 PST 2025


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff d839c06719128700bdd033361b20aa6899f6620a c05d6be2d2fd1f39c34dd5b0d6af0d0cbd2db79c --extensions h,cpp -- mlir/include/mlir/Dialect/Linalg/IR/Linalg.h mlir/include/mlir/Dialect/Linalg/Transforms/TilingInterfaceImpl.h mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h mlir/include/mlir/Dialect/Linalg/Utils/Utils.h mlir/include/mlir/Dialect/Tensor/Transforms/Transforms.h mlir/include/mlir/Dialect/Tensor/Utils/Utils.h mlir/lib/Dialect/Linalg/IR/LinalgDialect.cpp mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp mlir/lib/Dialect/Linalg/Transforms/BlockPackMatmul.cpp mlir/lib/Dialect/Linalg/Transforms/DataLayoutPropagation.cpp mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp mlir/lib/Dialect/Linalg/Utils/Utils.cpp mlir/lib/Dialect/Tensor/IR/TensorDialect.cpp mlir/lib/Dialect/Tensor/IR/TensorOps.cpp mlir/lib/Dialect/Tensor/IR/TensorTilingInterfaceImpl.cpp mlir/lib/Dialect/Tensor/TransformOps/TensorTransformOps.cpp mlir/lib/Dialect/Tensor/Transforms/EmptyOpPatterns.cpp mlir/lib/Dialect/Tensor/Utils/Utils.cpp mlir/test/lib/Dialect/Linalg/TestLinalgTransforms.cpp mlir/test/lib/Dialect/Tensor/TestTensorTransforms.cpp mlir/lib/Dialect/Linalg/Transforms/PackAndUnpackPatterns.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h b/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
index a32f913d46..3dd18b44a4 100644
--- a/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
+++ b/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
@@ -1892,7 +1892,7 @@ void populateFoldIntoPackAndUnpackPatterns(RewritePatternSet &patterns);
 
 /// Populates `patterns` with patterns that fold operations like `linalg.pack`
 /// and `linalg.unpack` into `tensor.empty`.
-void  populateFoldPackUnpackIntoTensorEmptyPatterns(RewritePatternSet &patterns);
+void populateFoldPackUnpackIntoTensorEmptyPatterns(RewritePatternSet &patterns);
 
 /// Populates `patterns` with patterns that simplify `tensor.pack` and
 /// `tensor.unpack` operations.
diff --git a/mlir/include/mlir/Dialect/Linalg/Utils/Utils.h b/mlir/include/mlir/Dialect/Linalg/Utils/Utils.h
index cab8f23084..80aa034d21 100644
--- a/mlir/include/mlir/Dialect/Linalg/Utils/Utils.h
+++ b/mlir/include/mlir/Dialect/Linalg/Utils/Utils.h
@@ -52,7 +52,6 @@ SmallVector<int64_t> getUnPackInverseSrcPerm(linalg::UnPackOp unpackOp);
 SmallVector<int64_t> getUnPackInverseSrcPerm(linalg::UnPackOp,
                                              PackingMetadata &metadata);
 
-
 //===----------------------------------------------------------------------===//
 // General utilities
 //===----------------------------------------------------------------------===//
diff --git a/mlir/include/mlir/Dialect/Tensor/Utils/Utils.h b/mlir/include/mlir/Dialect/Tensor/Utils/Utils.h
index c28aaeb2c7..311554753e 100644
--- a/mlir/include/mlir/Dialect/Tensor/Utils/Utils.h
+++ b/mlir/include/mlir/Dialect/Tensor/Utils/Utils.h
@@ -55,9 +55,8 @@ bool isCastLikeExtractSliceOp(ExtractSliceOp op);
 /// Removes the op and replaces the constant with a new constant of the result
 /// shape. When an optional cst attribute is passed, it is reshaped only if the
 /// splat value matches the value in the attribute.
-OpFoldResult
-reshapeConstantSource(DenseElementsAttr source, TensorType result,
-                      std::optional<Attribute> cst = std::nullopt);
+OpFoldResult reshapeConstantSource(DenseElementsAttr source, TensorType result,
+                                   std::optional<Attribute> cst = std::nullopt);
 
 } // namespace tensor
 } // namespace mlir
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
index 84f8894549..045b844de3 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
@@ -4122,7 +4122,8 @@ Value PackOp::createDestinationTensor(OpBuilder &b, Location loc, Value source,
   for (auto [index, value] : llvm::enumerate(
            llvm::cast<RankedTensorType>(source.getType()).getShape())) {
     if (ShapedType::isDynamic(value))
-      mixedSizes.push_back(b.create<tensor::DimOp>(loc, source, index).getResult());
+      mixedSizes.push_back(
+          b.create<tensor::DimOp>(loc, source, index).getResult());
     else
       mixedSizes.push_back(b.getIndexAttr(value));
   }
diff --git a/mlir/lib/Dialect/Linalg/Transforms/PackAndUnpackPatterns.cpp b/mlir/lib/Dialect/Linalg/Transforms/PackAndUnpackPatterns.cpp
index 56f5bf87f8..0984b6988b 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/PackAndUnpackPatterns.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/PackAndUnpackPatterns.cpp
@@ -224,7 +224,8 @@ struct FoldPadWithPackOp : public OpRewritePattern<PackOp> {
 
 /// Fold a `unpack` -> `extract_slice` into the `unpack` since it already
 /// has extract_slice semantics.
-struct FoldUnpackWithExtractSliceOp : public OpRewritePattern<tensor::ExtractSliceOp> {
+struct FoldUnpackWithExtractSliceOp
+    : public OpRewritePattern<tensor::ExtractSliceOp> {
   using OpRewritePattern<tensor::ExtractSliceOp>::OpRewritePattern;
 
   LogicalResult matchAndRewrite(tensor::ExtractSliceOp sliceOp,
@@ -499,7 +500,6 @@ struct FoldEmptyTensorWithPackOp : public OpRewritePattern<PackOp> {
   }
 };
 
-
 /// tensor.empty does not define any tensor contents, so an unpack
 /// can be folded away.
 struct FoldEmptyTensorWithUnPackOp : public OpRewritePattern<UnPackOp> {
diff --git a/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp
index 6906bb4f1a..faa7bbf9d1 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/TilingInterfaceImpl.cpp
@@ -831,8 +831,8 @@ struct PackOpTiling
     SmallVector<OpFoldResult> strides(inputRank, oneAttr);
 
     SmallVector<Value> tiledOperands;
-    auto sourceSlice = b.create<tensor::ExtractSliceOp>(loc, packOp.getSource(),
-                                                offsets, sizes, strides);
+    auto sourceSlice = b.create<tensor::ExtractSliceOp>(
+        loc, packOp.getSource(), offsets, sizes, strides);
     tiledOperands.push_back(sourceSlice);
 
     SmallVector<OpFoldResult> outerDimOffsets, outerDimSizes;
@@ -1035,21 +1035,21 @@ struct UnPackOpTiling
     sliceSrcSizes.append(unpackOp.getMixedTiles());
     sliceSrcStrides.append(numInnerTiles, oneAttr);
     SmallVector<Operation *> generatedSlices;
-    tensor::ExtractSliceOp sliceSource =
-        b.create<tensor::ExtractSliceOp>(loc, unpackOp.getSource(), sliceSrcIndices,
-                                 sliceSrcSizes, sliceSrcStrides);
+    tensor::ExtractSliceOp sliceSource = b.create<tensor::ExtractSliceOp>(
+        loc, unpackOp.getSource(), sliceSrcIndices, sliceSrcSizes,
+        sliceSrcStrides);
     generatedSlices.push_back(sliceSource);
 
     SmallVector<OpFoldResult> destStrides(destRank, oneAttr);
     Value sliceDest;
     if (isPerfectTilingCase) {
-      auto destSliceOp = b.create<tensor::ExtractSliceOp>(loc, unpackOp.getDest(),
-                                                  offsets, sizes, destStrides);
+      auto destSliceOp = b.create<tensor::ExtractSliceOp>(
+          loc, unpackOp.getDest(), offsets, sizes, destStrides);
       sliceDest = destSliceOp;
       generatedSlices.push_back(destSliceOp);
     } else {
-      sliceDest = b.create<tensor::EmptyOp>(loc, destExpandedSizes,
-                                    unpackOp.getDestType().getElementType());
+      sliceDest = b.create<tensor::EmptyOp>(
+          loc, destExpandedSizes, unpackOp.getDestType().getElementType());
     }
 
     SmallVector<Value> tiledOperands = {sliceSource.getResult(), sliceDest};
@@ -1064,9 +1064,9 @@ struct UnPackOpTiling
                           SmallVector<Value>(tiledUnpackOp->getResults()),
                           generatedSlices};
 
-    auto extractSlice =
-        b.create<tensor::ExtractSliceOp>(loc, tiledUnpackOp->getResult(0),
-                                 resultOffsetsFromDest, sizes, destStrides);
+    auto extractSlice = b.create<tensor::ExtractSliceOp>(
+        loc, tiledUnpackOp->getResult(0), resultOffsetsFromDest, sizes,
+        destStrides);
     return TilingResult{
         {tiledUnpackOp}, {extractSlice.getResult()}, generatedSlices};
   }
@@ -1208,7 +1208,6 @@ struct UnPackOpTiling
   }
 };
 
-
 } // namespace
 
 template <typename OpType>
diff --git a/mlir/lib/Dialect/Linalg/Utils/Utils.cpp b/mlir/lib/Dialect/Linalg/Utils/Utils.cpp
index 03da2d5454..d3d301ca09 100644
--- a/mlir/lib/Dialect/Linalg/Utils/Utils.cpp
+++ b/mlir/lib/Dialect/Linalg/Utils/Utils.cpp
@@ -190,9 +190,8 @@ SmallVector<int64_t> getUnPackInverseSrcPerm(UnPackOp unpackOp) {
   return getUnPackInverseSrcPerm(unpackOp, metadata);
 }
 
-SmallVector<int64_t>
-getUnPackInverseSrcPerm(UnPackOp unpackOp,
-                                      PackingMetadata &metadata) {
+SmallVector<int64_t> getUnPackInverseSrcPerm(UnPackOp unpackOp,
+                                             PackingMetadata &metadata) {
   int64_t unpackRank = unpackOp.getSourceType().getRank();
   ArrayRef<int64_t> innerDimPos = unpackOp.getInnerDimsPos();
   ArrayRef<int64_t> outerPerm = unpackOp.getOuterDimsPerm();

``````````

</details>


https://github.com/llvm/llvm-project/pull/123902


More information about the Mlir-commits mailing list