Issue |
92056
|
Summary |
Inconsistent results when using --buffer-deallocation
|
Labels |
new issue
|
Assignees |
|
Reporter |
wangyongj1a
|
I have the following MLIR program:
test.mlir:
```
module {
func.func @func0(%arg0: tensor<19xi32>) -> (){
%0 = arith.constant 2 : index
%1 = tensor.extract %arg0[%0] : tensor<19xi32>
vector.print %1 : i32
return
}
func.func private @func1() {
%0 = arith.constant 10 : i32
%1 = tensor.from_elements %0 : tensor<1xi32>
%2 = tensor.from_elements %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0 : tensor<19xi32>
call @func0(%2) : (tensor<19xi32>) -> ()
return
}
}
```
When I tried to lower the program with ```mlir-opt --tensor-bufferize --buffer-deallocation --convert-scf-to-cf --convert-cf-to-llvm --func-bufferize --convert-func-to-llvm --convert-index-to-llvm --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm --reconcile-unrealized-casts test.mlir```, and executed the executable file, I got inconsistent results over multiple runs.
I noticed that after using the passes ```--tensor-bufferize --buffer-deallocation```, the program was lowered to:
```
module {
func.func @func0(%arg0: tensor<19xi32>) {
%0 = bufferization.to_memref %arg0 : memref<19xi32>
%c2 = arith.constant 2 : index
%1 = memref.load %0[%c2] : memref<19xi32>
vector.print %1 : i32
return
}
func.func private @func1() {
%c10_i32 = arith.constant 10 : i32
%alloc = memref.alloc() {alignment = 64 : i64} : memref<1xi32>
%c0 = arith.constant 0 : index
memref.store %c10_i32, %alloc[%c0] : memref<1xi32>
memref.dealloc %alloc : memref<1xi32>
%alloc_0 = memref.alloc() {alignment = 64 : i64} : memref<19xi32>
%c0_1 = arith.constant 0 : index
%c1 = arith.constant 1 : index
%c2 = arith.constant 2 : index
%c3 = arith.constant 3 : index
%c4 = arith.constant 4 : index
%c5 = arith.constant 5 : index
%c6 = arith.constant 6 : index
%c7 = arith.constant 7 : index
%c8 = arith.constant 8 : index
%c9 = arith.constant 9 : index
%c10 = arith.constant 10 : index
%c11 = arith.constant 11 : index
%c12 = arith.constant 12 : index
%c13 = arith.constant 13 : index
%c14 = arith.constant 14 : index
%c15 = arith.constant 15 : index
%c16 = arith.constant 16 : index
%c17 = arith.constant 17 : index
%c18 = arith.constant 18 : index
memref.store %c10_i32, %alloc_0[%c0_1] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c1] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c2] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c3] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c4] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c5] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c6] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c7] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c8] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c9] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c10] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c11] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c12] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c13] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c14] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c15] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c16] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c17] : memref<19xi32>
memref.store %c10_i32, %alloc_0[%c18] : memref<19xi32>
%0 = bufferization.to_tensor %alloc_0 : memref<19xi32>
memref.dealloc %alloc_0 : memref<19xi32>
call @func0(%0) : (tensor<19xi32>) -> ()
return
}
}
```
The memory of ```%alloc_0``` seems to be deallocated before the related tensor ```%0``` was used as an attribute in the function call. I also tried to use the pass ```--buffer-deallocation-simplification``` after ```--buffer-deallocation```, but it seems couldn't help with this case.
I'm not sure if there is any bug in my program or the wrong usage of ```--buffer-deallocation``` and ```--buffer-deallocation-simplification``` that caused this error.
My git version is 4c79d38f82e1f6fe8575d88d8c74f2f1806b19ce.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs