[Mlir-commits] [mlir] [tosa]: canonicalize dynamic size of tosa.slice to static output shape (PR #135429)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Fri Apr 11 12:58:42 PDT 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 HEAD~1 HEAD --extensions cpp -- mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
``````````

</details>

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

``````````diff
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
index 67d8baf32..baf5ccc27 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
@@ -733,59 +733,62 @@ struct ConcatSliceOptimization : public OpRewritePattern<tosa::SliceOp> {
 
 // Update size operand of tosa.slice if size has dynamic dims but corresponding
 // output dim is static
-struct SliceDynamicSizeCanonicalization : public OpRewritePattern<tosa::SliceOp> {
+struct SliceDynamicSizeCanonicalization
+    : public OpRewritePattern<tosa::SliceOp> {
   using OpRewritePattern<tosa::SliceOp>::OpRewritePattern;
 
   LogicalResult matchAndRewrite(tosa::SliceOp sliceOp,
                                 PatternRewriter &rewriter) const override {
-      ShapedType resultType = cast<ShapedType>(sliceOp.getType());
+    ShapedType resultType = cast<ShapedType>(sliceOp.getType());
 
-      ElementsAttr sizeElems;
-      if (!matchPattern(sliceOp.getSize(), m_Constant(&sizeElems))) {
-        return rewriter.notifyMatchFailure(
-            sliceOp, "size of slice must be a static ranked shape");
-      }
+    ElementsAttr sizeElems;
+    if (!matchPattern(sliceOp.getSize(), m_Constant(&sizeElems))) {
+      return rewriter.notifyMatchFailure(
+          sliceOp, "size of slice must be a static ranked shape");
+    }
 
-      llvm::SmallVector<int64_t> sliceSizes =
-          llvm::to_vector(sizeElems.getValues<int64_t>());
-
-      bool replaceSliceSize{false};
-      // if size op has -1 indicating dynamic shape but corresponding dim on the
-      // output is statically known, update size to match with known output dim shape
-      for (const auto i : llvm::enumerate(sliceSizes)) {
-        int64_t size = i.value();
-        size_t index = i.index();
-        if (size == -1 && !resultType.isDynamicDim(index)) {
-          sliceSizes[index] = resultType.getDimSize(index);
-          replaceSliceSize = true;
-        }
-      }
+    llvm::SmallVector<int64_t> sliceSizes =
+        llvm::to_vector(sizeElems.getValues<int64_t>());
 
-      if (!replaceSliceSize) {
-        return rewriter.notifyMatchFailure(
-            sliceOp, "no dimension of size of slice is dynamic that resolves "
-                     "to static output shape");
+    bool replaceSliceSize{false};
+    // if size op has -1 indicating dynamic shape but corresponding dim on the
+    // output is statically known, update size to match with known output dim
+    // shape
+    for (const auto i : llvm::enumerate(sliceSizes)) {
+      int64_t size = i.value();
+      size_t index = i.index();
+      if (size == -1 && !resultType.isDynamicDim(index)) {
+        sliceSizes[index] = resultType.getDimSize(index);
+        replaceSliceSize = true;
       }
-      
-      auto size_op = getTosaConstShape(rewriter, sliceOp.getLoc(), sliceSizes);
-      auto newSliceOp = rewriter.create<tosa::SliceOp>(
-          sliceOp.getLoc(), sliceOp.getType(), sliceOp.getInput1(),
-          sliceOp.getStart(), size_op);
+    }
 
-      rewriter.replaceOp(sliceOp, newSliceOp.getResult());
+    if (!replaceSliceSize) {
+      return rewriter.notifyMatchFailure(
+          sliceOp, "no dimension of size of slice is dynamic that resolves "
+                   "to static output shape");
+    }
 
-      // Remove const_shape size op when it no longer has use point.
-      Operation *sizeConstShape = sliceOp.getSize().getDefiningOp();
-      if (sizeConstShape->getResult(0).hasOneUse())
-        rewriter.eraseOp(sizeConstShape);
+    auto size_op = getTosaConstShape(rewriter, sliceOp.getLoc(), sliceSizes);
+    auto newSliceOp = rewriter.create<tosa::SliceOp>(
+        sliceOp.getLoc(), sliceOp.getType(), sliceOp.getInput1(),
+        sliceOp.getStart(), size_op);
 
-      return success();
+    rewriter.replaceOp(sliceOp, newSliceOp.getResult());
+
+    // Remove const_shape size op when it no longer has use point.
+    Operation *sizeConstShape = sliceOp.getSize().getDefiningOp();
+    if (sizeConstShape->getResult(0).hasOneUse())
+      rewriter.eraseOp(sizeConstShape);
+
+    return success();
   }
 };
 
 void SliceOp::getCanonicalizationPatterns(RewritePatternSet &results,
                                           MLIRContext *context) {
-  results.add<ConcatSliceOptimization, SliceDynamicSizeCanonicalization>(context);
+  results.add<ConcatSliceOptimization, SliceDynamicSizeCanonicalization>(
+      context);
 }
 
 //===----------------------------------------------------------------------===//

``````````

</details>


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


More information about the Mlir-commits mailing list