[PATCH] D143729: [mlir][MemRef][TransformOps] Fix error reporting for multibuffer
Quentin Colombet via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 10 05:50:14 PST 2023
qcolombet updated this revision to Diff 496444.
qcolombet added a comment.
Update the added test check-lines.
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.496444.patch
Type: text/x-patch
Size: 2700 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230210/18b86b56/attachment.bin>
More information about the llvm-commits
mailing list