@@ -282,15 +282,30 @@ func.func @dealloc_canonicalize_clone_removal(%arg0: memref<?xindex>) -> memref<
282
282
283
283
// -----
284
284
285
- func.func @dealloc_canonicalize_duplicates (%arg0: memref <2 xi32 >, %arg1: i1 , %arg2: i1 , %arg3: memref <2 xi32 >, %arg4: memref <2 xi32 >) -> (i1 , i1 , i1 , i1 , i1 ) {
286
- %0:3 = bufferization.dealloc (%arg4 , %arg0 , %arg0 : memref <2 xi32 >, memref <2 xi32 >, memref <2 xi32 >) if (%arg1 , %arg1 , %arg1 ) retain (%arg3 , %arg4 , %arg3 : memref <2 xi32 >, memref <2 xi32 >, memref <2 xi32 >)
285
+ func.func @dealloc_canonicalize_duplicates (%arg0: memref <2 xi32 >, %arg1: i1 , %arg2: i1 , %arg3: memref <2 xi32 >, %arg4: memref <2 xi32 >, %arg5: memref < 2 x i32 > ) -> (i1 , i1 , i1 , i1 , i1 ) {
286
+ %0:3 = bufferization.dealloc (%arg4 , %arg0 , %arg0 : memref <2 xi32 >, memref <2 xi32 >, memref <2 xi32 >) if (%arg1 , %arg1 , %arg1 ) retain (%arg3 , %arg5 , %arg3 : memref <2 xi32 >, memref <2 xi32 >, memref <2 xi32 >)
287
287
%1:2 = bufferization.dealloc (%arg0 , %arg0 : memref <2 xi32 >, memref <2 xi32 >) if (%arg1 , %arg2 )
288
288
return %0#0 , %0#1 , %0#2 , %1#0 , %1#1 : i1 , i1 , i1 , i1 , i1
289
289
}
290
290
291
291
// CHECK-LABEL: func @dealloc_canonicalize_duplicates
292
- // CHECK-SAME: ([[ARG0:%.+]]: memref<2xi32>, [[ARG1:%.+]]: i1, [[ARG2:%.+]]: i1, [[ARG3:%.+]]: memref<2xi32>, [[ARG4:%.+]]: memref<2xi32>)
293
- // CHECK-NEXT: [[V0:%.+]]:2 = bufferization.dealloc ([[ARG4]], [[ARG0]] : memref<2xi32>, memref<2xi32>) if ([[ARG1]], [[ARG1]]) retain ([[ARG3]], [[ARG4 ]] : memref<2xi32>, memref<2xi32>)
292
+ // CHECK-SAME: ([[ARG0:%.+]]: memref<2xi32>, [[ARG1:%.+]]: i1, [[ARG2:%.+]]: i1, [[ARG3:%.+]]: memref<2xi32>, [[ARG4:%.+]]: memref<2xi32>, [[ARG5:%.+]]: memref<2xi32> )
293
+ // CHECK-NEXT: [[V0:%.+]]:2 = bufferization.dealloc ([[ARG4]], [[ARG0]] : memref<2xi32>, memref<2xi32>) if ([[ARG1]], [[ARG1]]) retain ([[ARG3]], [[ARG5 ]] : memref<2xi32>, memref<2xi32>)
294
294
// CHECK-NEXT: [[NEW_COND:%.+]] = arith.ori [[ARG1]], [[ARG2]] : i1
295
295
// CHECK-NEXT: [[V1:%.+]] = bufferization.dealloc ([[ARG0]] : memref<2xi32>) if ([[NEW_COND]])
296
296
// CHECK-NEXT: return [[V0]]#0, [[V0]]#1, [[V0]]#1, [[V1]], [[V1]] :
297
+
298
+ // -----
299
+
300
+ func.func @dealloc_canonicalize_retained_and_deallocated (%arg0: memref <2 xi32 >, %arg1: i1 , %arg2: memref <2 xi32 >) -> (i1 , i1 , i1 ) {
301
+ %0 = bufferization.dealloc (%arg0 : memref <2 xi32 >) if (%arg1 ) retain (%arg0 : memref <2 xi32 >)
302
+ %1:2 = bufferization.dealloc (%arg0 , %arg2 : memref <2 xi32 >, memref <2 xi32 >) if (%arg1 , %arg1 ) retain (%arg0 : memref <2 xi32 >)
303
+ bufferization.dealloc
304
+ bufferization.dealloc retain (%arg0 : memref <2 xi32 >)
305
+ return %0 , %1#0 , %1#1 : i1 , i1 , i1
306
+ }
307
+
308
+ // CHECK-LABEL: func @dealloc_canonicalize_retained_and_deallocated
309
+ // CHECK-SAME: ([[ARG0:%.+]]: memref<2xi32>, [[ARG1:%.+]]: i1, [[ARG2:%.+]]: memref<2xi32>)
310
+ // CHECK-NEXT: [[V0:%.+]] = bufferization.dealloc ([[ARG2]] : memref<2xi32>) if ([[ARG1]]) retain ([[ARG0]] : memref<2xi32>)
311
+ // CHECK-NEXT: return [[ARG1]], [[ARG1]], [[V0]] :
0 commit comments