[Mlir-commits] [mlir] 7f58196 - [mlir][linalg] Linalg.fill on tensor should not have side-effects

Nicolas Vasilache llvmlistbot at llvm.org
Fri Feb 5 00:25:18 PST 2021


Author: Nicolas Vasilache
Date: 2021-02-05T08:22:14Z
New Revision: 7f58196ec797cb75ff0cd75db21cade65dabbbaf

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

LOG: [mlir][linalg] Linalg.fill on tensor should not have side-effects

Reviewed By: nicolasvasilache

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

Added: 
    

Modified: 
    mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
    mlir/test/Dialect/Linalg/canonicalize.mlir

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
index 2d1e64a04230..a3960ae94b27 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
@@ -1387,8 +1387,9 @@ static LogicalResult verify(linalg::YieldOp op) {
 void FillOp::getEffects(
     SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>>
         &effects) {
-  effects.emplace_back(MemoryEffects::Write::get(), output(),
-                       SideEffects::DefaultResource::get());
+  if (output().getType().isa<MemRefType>())
+    effects.emplace_back(MemoryEffects::Write::get(), output(),
+                         SideEffects::DefaultResource::get());
 }
 
 static LogicalResult verify(FillOp op) {

diff  --git a/mlir/test/Dialect/Linalg/canonicalize.mlir b/mlir/test/Dialect/Linalg/canonicalize.mlir
index f35b41c47da3..1e68fd5ee862 100644
--- a/mlir/test/Dialect/Linalg/canonicalize.mlir
+++ b/mlir/test/Dialect/Linalg/canonicalize.mlir
@@ -680,3 +680,31 @@ func @fold_init_tensor_with_subtensor
 // CHECK-SAME:   %[[ARG1:[a-zA-Z0-9_]+]]: index
 //      CHECK:   %[[T0:.+]] = linalg.init_tensor [5, %[[ARG1]], 20]
 //      CHECK:   return %[[T0]]
+
+// -----
+
+#accesses = [
+  affine_map<(i, j) -> (i, j)>
+]
+
+#trait = {
+  indexing_maps = #accesses,
+  iterator_types = ["parallel", "parallel"]
+}
+
+// CHECK-LABEL: func @dead_linalg_tensor
+//   CHECK-NOT:   linalg.fill
+//   CHECK-NOT:   linalg.matmul
+//   CHECK-NOT:   linalg.generic
+//       CHECK:   return
+func @dead_linalg_tensor(%arg0 : tensor<7x7xi32>, %arg1 : tensor<7x7xf32>) {
+  %c0_i32 = constant 0 : i32
+  %0 = linalg.fill(%arg0, %c0_i32) : tensor<7x7xi32>, i32 -> tensor<7x7xi32>
+  %1 = linalg.matmul ins(%arg1, %arg1: tensor<7x7xf32>, tensor<7x7xf32>)
+                     outs(%arg1: tensor<7x7xf32>) -> tensor<7x7xf32>
+  %2 = linalg.generic #trait outs(%arg0 : tensor<7x7xi32>) {
+  ^bb(%3: i32) :
+    linalg.yield %3 : i32
+  } -> tensor<7x7xi32>
+  return
+}


        


More information about the Mlir-commits mailing list