[PATCH] D72379: [mlir] Canonicalize static alloc followed by memref_cast and std.view
Ahmed S. Taei via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 8 11:55:23 PST 2020
This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1e25109f93ff: Canonicalize static alloc followed by memref_cast and std.view (authored by asaadaldien).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D72379/new/
https://reviews.llvm.org/D72379
Files:
mlir/lib/Dialect/StandardOps/Ops.cpp
mlir/test/Transforms/canonicalize.mlir
Index: mlir/test/Transforms/canonicalize.mlir
===================================================================
--- mlir/test/Transforms/canonicalize.mlir
+++ mlir/test/Transforms/canonicalize.mlir
@@ -695,6 +695,7 @@
// CHECK-LABEL: func @view
func @view(%arg0 : index) {
+ // CHECK: %[[ALLOC_MEM:.*]] = alloc() : memref<2048xi8>
%0 = alloc() : memref<2048xi8>
%c0 = constant 0 : index
%c7 = constant 7 : index
@@ -730,11 +731,15 @@
// Test: preserve an existing static dim size while folding a dynamic
// dimension and offset.
- // CHECK: std.view %0[][] : memref<2048xi8> to memref<7x4xf32, #[[VIEW_MAP4]]>
- %5 = view %0[%c15][%c7]
- : memref<2048xi8> to memref<?x4xf32, #TEST_VIEW_MAP2>
+ // CHECK: std.view %[[ALLOC_MEM]][][] : memref<2048xi8> to memref<7x4xf32, #[[VIEW_MAP4]]>
+ %5 = view %0[%c15][%c7] : memref<2048xi8> to memref<?x4xf32, #TEST_VIEW_MAP2>
load %5[%c0, %c0] : memref<?x4xf32, #TEST_VIEW_MAP2>
+ // Test: folding static alloc and memref_cast into a view.
+ // CHECK: std.view %0[][%c15, %c7] : memref<2048xi8> to memref<?x?xf32>
+ %6 = memref_cast %0 : memref<2048xi8> to memref<?xi8>
+ %7 = view %6[%c15][%c7] : memref<?xi8> to memref<?x?xf32>
+ load %7[%c0, %c0] : memref<?x?xf32>
return
}
Index: mlir/lib/Dialect/StandardOps/Ops.cpp
===================================================================
--- mlir/lib/Dialect/StandardOps/Ops.cpp
+++ mlir/lib/Dialect/StandardOps/Ops.cpp
@@ -2527,11 +2527,31 @@
}
};
+struct ViewOpMemrefCastFolder : public OpRewritePattern<ViewOp> {
+ using OpRewritePattern<ViewOp>::OpRewritePattern;
+
+ PatternMatchResult matchAndRewrite(ViewOp viewOp,
+ PatternRewriter &rewriter) const override {
+ Value memrefOperand = viewOp.getOperand(0);
+ MemRefCastOp memrefCastOp =
+ dyn_cast_or_null<MemRefCastOp>(memrefOperand.getDefiningOp());
+ if (!memrefCastOp)
+ return matchFailure();
+ Value allocOperand = memrefCastOp.getOperand();
+ AllocOp allocOp = dyn_cast_or_null<AllocOp>(allocOperand.getDefiningOp());
+ if (!allocOp)
+ return matchFailure();
+ rewriter.replaceOpWithNewOp<ViewOp>(memrefOperand, viewOp, viewOp.getType(),
+ allocOperand, viewOp.operands());
+ return matchSuccess();
+ }
+};
+
} // end anonymous namespace
void ViewOp::getCanonicalizationPatterns(OwningRewritePatternList &results,
MLIRContext *context) {
- results.insert<ViewOpShapeFolder>(context);
+ results.insert<ViewOpShapeFolder, ViewOpMemrefCastFolder>(context);
}
//===----------------------------------------------------------------------===//
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72379.236880.patch
Type: text/x-patch
Size: 2715 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200108/3a591984/attachment.bin>
More information about the llvm-commits
mailing list