Skip to content

Commit 8c5ea51

Browse files
support test-compose-subview dynamic size.
1 parent 4403123 commit 8c5ea51

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

mlir/lib/Dialect/MemRef/Transforms/ComposeSubView.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,6 @@ struct ComposeSubViewOpPattern : public OpRewritePattern<memref::SubViewOp> {
8181
for (auto &&[opOffset, sourceOffset, sourceStride, opSize] :
8282
llvm::zip(op.getMixedOffsets(), sourceOp.getMixedOffsets(),
8383
sourceOp.getMixedStrides(), op.getMixedSizes())) {
84-
// We only support static sizes.
85-
if (isa<Value>(opSize)) {
86-
return failure();
87-
}
8884
sizes.push_back(opSize);
8985
Attribute opOffsetAttr = llvm::dyn_cast_if_present<Attribute>(opOffset),
9086
sourceOffsetAttr =

mlir/test/Transforms/compose-subview.mlir

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,28 @@ func.func @subview_strided(%input: memref<4x1024xf32>) -> memref<1x64xf32, strid
101101
%1 = memref.subview %0[%cst_1, 64] [1, 64] [2, 2] : memref<2x256xf32, strided<[2048, 2], offset: ?>> to memref<1x64xf32, strided<[4096, 4], offset: ?>>
102102
return %1 : memref<1x64xf32, strided<[4096, 4], offset: ?>>
103103
}
104+
105+
// -----
106+
107+
// CHECK-LABEL: func.func @single_dynamic_size_subview(
108+
// CHECK-SAME: %[[SRC:.*]]: memref<256x?xf32, strided<[?, ?], offset: ?>>,
109+
// CHECK-SAME: %{{.*}}: index,
110+
// CHECK-SAME: %[[SIZE:.*]]: index) -> memref<8x?xf32, strided<[?, ?], offset: ?>> {
111+
func.func @single_dynamic_size_subview(%arg0: memref<256x?xf32, strided<[?, ?], offset: ?>>, %arg1 : index, %arg2 : index) -> memref<8x?xf32, strided<[?, ?], offset: ?>>{
112+
%subview = memref.subview %arg0[0, 0][8, %arg1][1, 1] : memref<256x?xf32, strided<[?, ?], offset: ?>> to memref<8x?xf32, strided<[?, ?], offset: ?>>
113+
%subview_1 = memref.subview %subview[0, 0][8, %arg2][1, 1] : memref<8x?xf32, strided<[?, ?], offset: ?>> to memref<8x?xf32, strided<[?, ?], offset: ?>>
114+
// CHECK: %{{.*}} = memref.subview %[[SRC]][0, 0] [8, %[[SIZE]]] [1, 1] : memref<256x?xf32, strided<[?, ?], offset: ?>> to memref<8x?xf32, strided<[?, ?], offset: ?>>
115+
return %subview_1 : memref<8x?xf32, strided<[?, ?], offset: ?>>
116+
}
117+
118+
// -----
119+
120+
// CHECK-LABEL: func.func @all_dynamic_size_subview(
121+
// CHECK-SAME: %[[SRC:.*]]: memref<256x?xf32, strided<[?, ?], offset: ?>>,
122+
// CHECK-SAME: %{{.*}}: index,
123+
// CHECK-SAME: %[[SIZE:.*]]: index) -> memref<?x?xf32, strided<[?, ?], offset: ?>> {
124+
func.func @all_dynamic_size_subview(%arg0: memref<256x?xf32, strided<[?, ?], offset: ?>>, %arg1: index, %arg2: index) -> memref<?x?xf32, strided<[?, ?], offset: ?>> {
125+
%subview = memref.subview %arg0[0, 0] [%arg2, %arg2] [1, 1] : memref<256x?xf32, strided<[?, ?], offset: ?>> to memref<?x?xf32, strided<[?, ?], offset: ?>>
126+
// CHECK: %{{.*}} = memref.subview %[[SRC]][0, 0] {{\[}}%[[SIZE]], %[[SIZE]]] [1, 1] : memref<256x?xf32, strided<[?, ?], offset: ?>> to memref<?x?xf32, strided<[?, ?], offset: ?>>
127+
return %subview : memref<?x?xf32, strided<[?, ?], offset: ?>>
128+
}

0 commit comments

Comments
 (0)