[Mlir-commits] [mlir] 2995e16 - [mlir]: Add canonicalization for dim of 1D alloc of size rank.
Adrian Kuegel
llvmlistbot at llvm.org
Tue Mar 16 02:39:42 PDT 2021
Author: Adrian Kuegel
Date: 2021-03-16T10:38:57+01:00
New Revision: 2995e161b05f0787dd40273062bc387ecbb3dfd8
URL: https://github.com/llvm/llvm-project/commit/2995e161b05f0787dd40273062bc387ecbb3dfd8
DIFF: https://github.com/llvm/llvm-project/commit/2995e161b05f0787dd40273062bc387ecbb3dfd8.diff
LOG: [mlir]: Add canonicalization for dim of 1D alloc of size rank.
Differential Revision: https://reviews.llvm.org/D97542
Added:
Modified:
mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
mlir/test/Dialect/Standard/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
index db8a96fa2bed..fddab63e3e98 100644
--- a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
+++ b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
@@ -617,6 +617,10 @@ OpFoldResult DimOp::fold(ArrayRef<Attribute> operands) {
return *(alloc.getDynamicSizes().begin() +
memrefType.getDynamicDimIndex(unsignedIndex));
+ if (auto alloca = dyn_cast_or_null<AllocaOp>(definingOp))
+ return *(alloca.getDynamicSizes().begin() +
+ memrefType.getDynamicDimIndex(unsignedIndex));
+
if (auto view = dyn_cast_or_null<ViewOp>(definingOp))
return *(view.getDynamicSizes().begin() +
memrefType.getDynamicDimIndex(unsignedIndex));
diff --git a/mlir/test/Dialect/Standard/canonicalize.mlir b/mlir/test/Dialect/Standard/canonicalize.mlir
index 41ae2248b299..a6bf0c78321a 100644
--- a/mlir/test/Dialect/Standard/canonicalize.mlir
+++ b/mlir/test/Dialect/Standard/canonicalize.mlir
@@ -134,6 +134,34 @@ func @cmpi_equal_operands(%arg0: i64)
// -----
+// Test case: Folding of memref.dim(memref.alloca(%size), %idx) -> %size
+// CHECK-LABEL: func @dim_of_alloca(
+// CHECK-SAME: %[[SIZE:[0-9a-z]+]]: index
+// CHECK-NEXT: return %[[SIZE]] : index
+func @dim_of_alloca(%size: index) -> index {
+ %0 = memref.alloca(%size) : memref<?xindex>
+ %c0 = constant 0 : index
+ %1 = memref.dim %0, %c0 : memref<?xindex>
+ return %1 : index
+}
+
+// -----
+
+// Test case: Folding of memref.dim(memref.alloca(rank(%v)), %idx) -> rank(%v)
+// CHECK-LABEL: func @dim_of_alloca_with_dynamic_size(
+// CHECK-SAME: %[[MEM:[0-9a-z]+]]: memref<*xf32>
+// CHECK-NEXT: %[[RANK:.*]] = rank %[[MEM]] : memref<*xf32>
+// CHECK-NEXT: return %[[RANK]] : index
+func @dim_of_alloca_with_dynamic_size(%arg0: memref<*xf32>) -> index {
+ %0 = rank %arg0 : memref<*xf32>
+ %1 = memref.alloca(%0) : memref<?xindex>
+ %c0 = constant 0 : index
+ %2 = memref.dim %1, %c0 : memref<?xindex>
+ return %2 : index
+}
+
+// -----
+
// Test case: Folding of memref.dim(memref.reshape %v %shp, %idx) -> memref.load %shp[%idx]
// CHECK-LABEL: func @dim_of_memref_reshape(
// CHECK-SAME: %[[MEM:[0-9a-z]+]]: memref<*xf32>,
More information about the Mlir-commits
mailing list