[Mlir-commits] [mlir] [mlir][bufferization] Buffer deallocation: Make op preconditions stricter (PR #75127)
Aart Bik
llvmlistbot at llvm.org
Fri Jan 19 09:42:53 PST 2024
================
@@ -511,58 +511,49 @@ func.func @assumingOp(
// -----
-// Test Case: The op "test.bar" does not implement the RegionBranchOpInterface.
-// This is only allowed in buffer deallocation because the operation's region
-// does not deal with any MemRef values.
+// Test Case: The op "test.one_region_with_recursive_memory_effects" does not
+// implement the RegionBranchOpInterface. This is allowed during buffer
+// deallocation because the operation's region does not deal with any MemRef
+// values.
func.func @noRegionBranchOpInterface() {
- %0 = "test.bar"() ({
- %1 = "test.bar"() ({
- "test.yield"() : () -> ()
+ %0 = "test.one_region_with_recursive_memory_effects"() ({
+ %1 = "test.one_region_with_recursive_memory_effects"() ({
+ %2 = memref.alloc() : memref<2xi32>
+ "test.read_buffer"(%2) : (memref<2xi32>) -> ()
+ "test.return"() : () -> ()
}) : () -> (i32)
- "test.yield"() : () -> ()
+ "test.return"() : () -> ()
}) : () -> (i32)
- "test.terminator"() : () -> ()
+ "test.return"() : () -> ()
}
// -----
-// Test Case: The op "test.bar" does not implement the RegionBranchOpInterface.
-// This is not allowed in buffer deallocation.
+// Test Case: The second op "test.one_region_with_recursive_memory_effects" does
+// not implement the RegionBranchOpInterface but has buffer semantics. This is
+// not allowed during buffer deallocation.
func.func @noRegionBranchOpInterface() {
- %0 = "test.bar"() ({
+ %0 = "test.one_region_with_recursive_memory_effects"() ({
// expected-error at +1 {{All operations with attached regions need to implement the RegionBranchOpInterface.}}
- %1 = "test.bar"() ({
- %2 = "test.get_memref"() : () -> memref<2xi32>
- "test.yield"(%2) : (memref<2xi32>) -> ()
+ %1 = "test.one_region_with_recursive_memory_effects"() ({
+ %2 = memref.alloc() : memref<2xi32>
+ "test.read_buffer"(%2) : (memref<2xi32>) -> ()
+ "test.return"(%2) : (memref<2xi32>) -> ()
}) : () -> (memref<2xi32>)
- "test.yield"() : () -> ()
+ "test.return"() : () -> ()
}) : () -> (i32)
- "test.terminator"() : () -> ()
-}
-
-// -----
-
-// Test Case: The op "test.bar" does not implement the RegionBranchOpInterface.
-// This is not allowed in buffer deallocation.
-
-func.func @noRegionBranchOpInterface() {
- // expected-error at +1 {{All operations with attached regions need to implement the RegionBranchOpInterface.}}
- %0 = "test.bar"() ({
- %2 = "test.get_memref"() : () -> memref<2xi32>
- %3 = "test.foo"(%2) : (memref<2xi32>) -> (i32)
- "test.yield"(%3) : (i32) -> ()
- }) : () -> (i32)
- "test.terminator"() : () -> ()
+ "test.return"() : () -> ()
}
// -----
func.func @while_two_arg(%arg0: index) {
%a = memref.alloc(%arg0) : memref<?xf32>
scf.while (%arg1 = %a, %arg2 = %a) : (memref<?xf32>, memref<?xf32>) -> (memref<?xf32>, memref<?xf32>) {
- %0 = "test.make_condition"() : () -> i1
+ // This op has a side effect, but it's not an allocate/free side effect.
----------------
aartbik wrote:
this reads well!
https://github.com/llvm/llvm-project/pull/75127
More information about the Mlir-commits
mailing list