[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