[Mlir-commits] [mlir] b40f420 - [mlir][MemRef] Add early exit for computing dropped unit-dims.

Mahesh Ravishankar llvmlistbot at llvm.org
Mon Mar 21 14:50:49 PDT 2022


Author: Mahesh Ravishankar
Date: 2022-03-21T21:50:29Z
New Revision: b40f420c2b64ff902ddf16fba1d9920acad11fbc

URL: https://github.com/llvm/llvm-project/commit/b40f420c2b64ff902ddf16fba1d9920acad11fbc
DIFF: https://github.com/llvm/llvm-project/commit/b40f420c2b64ff902ddf16fba1d9920acad11fbc.diff

LOG: [mlir][MemRef] Add early exit for computing dropped unit-dims.

Computing dropped unit-dims when all the unit dims are dropped, does
not need to check for strides being dropped.
This also enables canonicalization of reduced-rank subviews.

Reviewed By: gysit

Differential Revision: https://reviews.llvm.org/D121766

Added: 
    

Modified: 
    mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
    mlir/test/Dialect/MemRef/canonicalize.mlir
    mlir/test/Dialect/MemRef/invalid.mlir

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
index 7622994cf151c..d0ab38c1be849 100644
--- a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
+++ b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
@@ -759,6 +759,11 @@ computeMemRefRankReductionMask(MemRefType originalType, MemRefType reducedType,
       if (attr.cast<IntegerAttr>().getInt() == 1)
         unusedDims.set(dim.index());
 
+  // Early exit for the case where the number of unused dims matches the number
+  // of ranks reduced.
+  if (unusedDims.count() + reducedType.getRank() == originalType.getRank())
+    return unusedDims;
+
   SmallVector<int64_t> originalStrides, candidateStrides;
   int64_t originalOffset, candidateOffset;
   if (failed(

diff  --git a/mlir/test/Dialect/MemRef/canonicalize.mlir b/mlir/test/Dialect/MemRef/canonicalize.mlir
index 0679cbdfaf01c..8a4f80e77b61f 100644
--- a/mlir/test/Dialect/MemRef/canonicalize.mlir
+++ b/mlir/test/Dialect/MemRef/canonicalize.mlir
@@ -719,3 +719,19 @@ func @reinterpret_of_subview(%arg : memref<?xi8>, %size1: index, %size2: index)
   %1 = memref.reinterpret_cast %0 to offset: [0], sizes: [%size2], strides: [1] : memref<?xi8> to memref<?xi8>
   return %1 : memref<?xi8>
 }
+
+// -----
+
+func @canonicalize_rank_reduced_subview(%arg0 : memref<8x?xf32>,
+    %arg1 : index) -> memref<?xf32, offset : ?, strides : [?]> {
+  %c0 = arith.constant 0 : index
+  %c1 = arith.constant 1 : index
+  %0 = memref.subview %arg0[%c0, %c0] [1, %arg1] [%c1, %c1] : memref<8x?xf32> to memref<?xf32, offset : ?, strides : [?]>
+  return %0 :  memref<?xf32, offset : ?, strides : [?]>
+}
+//  CHECK-DAG: #[[MAP:.+]] = affine_map<(d0)[s0] -> (d0 + s0)>
+//      CHECK: func @canonicalize_rank_reduced_subview
+// CHECK-SAME:     %[[ARG0:.+]]: memref<8x?xf32>
+// CHECK-SAME:     %[[ARG1:.+]]: index
+//      CHECK:   %[[SUBVIEW:.+]] = memref.subview %[[ARG0]][0, 0] [1, %[[ARG1]]] [1, 1]
+// CHECK-SAME:       memref<8x?xf32> to memref<?xf32, #[[MAP]]>

diff  --git a/mlir/test/Dialect/MemRef/invalid.mlir b/mlir/test/Dialect/MemRef/invalid.mlir
index d65986f90441e..a714fcb074284 100644
--- a/mlir/test/Dialect/MemRef/invalid.mlir
+++ b/mlir/test/Dialect/MemRef/invalid.mlir
@@ -677,15 +677,6 @@ func @invalid_rank_reducing_subview(%arg0 : memref<?x?xf32>, %arg1 : index, %arg
 
 // -----
 
-func @static_stride_to_dynamic_stride(%arg0 : memref<?x?x?xf32>, %arg1 : index,
-    %arg2 : index) -> memref<?x?xf32, offset:?, strides: [?, ?]> {
-  // expected-error @+1 {{expected result type to be 'memref<1x?x?xf32, affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0 * s1 + s0 + d1 * s2 + d2)>>' or a rank-reduced version. (mismatch of result layout)}}
-  %0 = memref.subview %arg0[0, 0, 0] [1, %arg1, %arg2] [1, 1, 1] : memref<?x?x?xf32> to memref<?x?xf32, offset: ?, strides: [?, ?]>
-  return %0 : memref<?x?xf32, offset: ?, strides: [?, ?]>
-}
-
-// -----
-
 #map0 = affine_map<(d0, d1)[s0] -> (d0 * 16 + d1)>
 
 func @subview_bad_offset_1(%arg0: memref<16x16xf32>) {


        


More information about the Mlir-commits mailing list