[Mlir-commits] [mlir] [MLIR] Fix incorrect memref::DimOp canonicalization, move it to tensor::DimOp (PR #84225)

Matthias Springer llvmlistbot at llvm.org
Thu Mar 7 18:52:40 PST 2024


================
@@ -1069,39 +1069,6 @@ OpFoldResult DimOp::fold(FoldAdaptor adaptor) {
   return {};
 }
 
-namespace {
-/// Fold dim of a memref reshape operation to a load into the reshape's shape
-/// operand.
-struct DimOfMemRefReshape : public OpRewritePattern<DimOp> {
-  using OpRewritePattern<DimOp>::OpRewritePattern;
-
-  LogicalResult matchAndRewrite(DimOp dim,
-                                PatternRewriter &rewriter) const override {
-    auto reshape = dim.getSource().getDefiningOp<ReshapeOp>();
-
-    if (!reshape)
-      return failure();
-
-    // Place the load directly after the reshape to ensure that the shape memref
-    // was not mutated.
-    rewriter.setInsertionPointAfter(reshape);
-    Location loc = dim.getLoc();
-    Value load =
-        rewriter.create<LoadOp>(loc, reshape.getShape(), dim.getIndex());
----------------
matthias-springer wrote:

`tensor.dim` and `memref.dim` used to be the same operation and we split it into two separate ops at some point. One the one hand, op canonicalizations should be defined in the dialect of the op (i.e., splitting it up would make sense). On the other hand, in this case it means duplicating some code. Personally, I'd rather have two patterns, one in the tensor dialect and one in the memref dialect, so that the two dialects are decoupled as much as possible.


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


More information about the Mlir-commits mailing list