[PATCH] D143729: [mlir][MemRef][TransformOps] Fix error reporting for multibuffer

Quentin Colombet via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 13 03:35:11 PST 2023


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
qcolombet marked an inline comment as done.
Closed by commit rG8b28500f60b7: [mlir][MemRef][TransformOps] Fix error reporting for multibuffer (authored by qcolombet).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143729/new/

https://reviews.llvm.org/D143729

Files:
  mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp
  mlir/test/Dialect/MemRef/transform-ops.mlir


Index: mlir/test/Dialect/MemRef/transform-ops.mlir
===================================================================
--- mlir/test/Dialect/MemRef/transform-ops.mlir
+++ mlir/test/Dialect/MemRef/transform-ops.mlir
@@ -1,4 +1,4 @@
-// RUN: mlir-opt %s -test-transform-dialect-interpreter -verify-diagnostics -allow-unregistered-dialect | FileCheck %s
+// RUN: mlir-opt %s -test-transform-dialect-interpreter -verify-diagnostics -allow-unregistered-dialect -split-input-file | FileCheck %s
 
 // CHECK-DAG: #[[$MAP0:.*]] = affine_map<(d0) -> ((d0 floordiv 4) mod 2)>
 // CHECK-DAG: #[[$MAP1:.*]] = affine_map<(d0)[s0] -> (d0 + s0)>
@@ -35,3 +35,33 @@
   // Verify that the returned handle is usable.
   transform.test_print_remark_at_operand %1, "transformed" : !pdl.operation
 }
+
+// -----
+
+// Trying to use multibuffer on alloc that are used outside of loops is
+// going to fail.
+// Check that we emit a proper error for that.
+func.func @multi_buffer_uses_outside_of_loop(%in: memref<16xf32>) {
+  // expected-error @below {{op failed to multibuffer}}
+  %tmp = memref.alloc() : memref<4xf32>
+
+  "some_outside_loop_use"(%tmp) : (memref<4xf32>) -> ()
+
+  %c0 = arith.constant 0 : index
+  %c4 = arith.constant 4 : index
+  %c16 = arith.constant 16 : index
+
+  scf.for %i0 = %c0 to %c16 step %c4 {
+    %1 = memref.subview %in[%i0] [4] [1] : memref<16xf32> to memref<4xf32, affine_map<(d0)[s0] -> (d0 + s0)>>
+    memref.copy %1, %tmp :  memref<4xf32, affine_map<(d0)[s0] -> (d0 + s0)>> to memref<4xf32>
+
+    "some_use"(%tmp) : (memref<4xf32>) ->()
+  }
+  return
+}
+
+transform.sequence failures(propagate) {
+^bb1(%arg1: !pdl.operation):
+  %0 = transform.structured.match ops{["memref.alloc"]} in %arg1 : (!pdl.operation) -> !pdl.operation
+  %1 = transform.memref.multibuffer %0 {factor = 2 : i64}
+}
Index: mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp
===================================================================
--- mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp
+++ mlir/lib/Dialect/MemRef/TransformOps/MemRefTransformOps.cpp
@@ -25,11 +25,9 @@
     memref::AllocOp target, transform::ApplyToEachResultList &results,
     transform::TransformState &state) {
   auto newBuffer = memref::multiBuffer(target, getFactor());
-  if (failed(newBuffer)) {
-    Diagnostic diag(target->getLoc(), DiagnosticSeverity::Note);
-    diag << "op failed to multibuffer";
-    return DiagnosedSilenceableFailure::silenceableFailure(std::move(diag));
-  }
+  if (failed(newBuffer))
+    return emitSilenceableFailure(target->getLoc())
+           << "op failed to multibuffer";
 
   results.push_back(*newBuffer);
   return DiagnosedSilenceableFailure::success();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D143729.496919.patch
Type: text/x-patch
Size: 2700 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230213/f3fbf33e/attachment.bin>


More information about the llvm-commits mailing list