[Mlir-commits] [mlir] 9ccdc2e - [mlir] Fold memref.dim of OffsetSizeAndStrideOpInterface outputs

Tres Popp llvmlistbot at llvm.org
Tue May 25 03:16:54 PDT 2021


Author: Tres Popp
Date: 2021-05-25T12:16:10+02:00
New Revision: 9ccdc2e23be18eca0b09f055fd17115c0366166c

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

LOG: [mlir] Fold memref.dim of OffsetSizeAndStrideOpInterface outputs

This previously handled memref::SubviewOp, but this can be extended to
all ops implementing the interface.

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

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
index 7e08837474a1b..a4ab6c1d0859f 100644
--- a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
+++ b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
@@ -18,6 +18,7 @@
 #include "mlir/IR/PatternMatch.h"
 #include "mlir/IR/TypeUtilities.h"
 #include "mlir/Interfaces/InferTypeOpInterface.h"
+#include "mlir/Interfaces/ViewLikeInterface.h"
 #include "llvm/ADT/STLExtras.h"
 
 using namespace mlir;
@@ -679,10 +680,11 @@ OpFoldResult DimOp::fold(ArrayRef<Attribute> operands) {
     return *(view.getDynamicSizes().begin() +
              memrefType.getDynamicDimIndex(unsignedIndex));
 
-  if (auto subview = dyn_cast_or_null<SubViewOp>(definingOp)) {
-    assert(subview.isDynamicSize(unsignedIndex) &&
+  if (auto sizeInterface =
+          dyn_cast_or_null<OffsetSizeAndStrideOpInterface>(definingOp)) {
+    assert(sizeInterface.isDynamicSize(unsignedIndex) &&
            "Expected dynamic subview size");
-    return subview.getDynamicSize(unsignedIndex);
+    return sizeInterface.getDynamicSize(unsignedIndex);
   }
 
   // dim(memrefcast) -> dim

diff  --git a/mlir/test/Dialect/MemRef/canonicalize.mlir b/mlir/test/Dialect/MemRef/canonicalize.mlir
index ce04f5048d3f8..354be2237ec30 100644
--- a/mlir/test/Dialect/MemRef/canonicalize.mlir
+++ b/mlir/test/Dialect/MemRef/canonicalize.mlir
@@ -192,3 +192,18 @@ func @alias_is_freed(%arg0 : memref<?xf32>) {
   memref.dealloc %1 : memref<32xf32>
   return
 }
+
+// -----
+
+// CHECK-LABEL: func @dim_of_sized_view
+//  CHECK-SAME:   %{{[a-z0-9A-Z_]+}}: memref<?xi8>
+//  CHECK-SAME:   %[[SIZE:.[a-z0-9A-Z_]+]]: index
+//       CHECK:   return %[[SIZE]] : index
+func @dim_of_sized_view(%arg : memref<?xi8>, %size: index) -> index {
+  %c0 = constant 0 : index
+  %0 = memref.reinterpret_cast %arg to offset: [0], sizes: [%size], strides: [0] : memref<?xi8> to memref<?xi8>
+  %1 = memref.dim %0, %c0 : memref<?xi8>
+  return %1 : index
+}
+
+


        


More information about the Mlir-commits mailing list