| Issue |
175111
|
| Summary |
[MLIR] Inconsistent Results when combining `-linalg-fold-unit-extent-dims` and `-affine-loop-fusion`
|
| Labels |
mlir
|
| Assignees |
|
| Reporter |
BealZephyr
|
**test commit**: [5cfd02](https://github.com/llvm/llvm-project/commit/5cfd02f44a43a2e2a085a633b022a62f64ba2b93)
## Description:
When both passes are disabled, the result is correct.
When only one of the two passes is enabled, the result is also correct.
However, when both `-linalg-fold-unit-extent-dims` and `-affine-loop-fusion` are enabled together, the result becomes incorrect and unstable, occasionally producing NaN.
## test case
```
module {
func.func private @printMemrefI8(tensor<*xi8>) attributes {llvm.emit_c_interface}
func.func private @printMemrefF32(tensor<*xf32>)
func.func @main() {
%0 = "tosa.const"() <{values = dense<-2.000000e+01> : tensor<2x5x4xf32>}> : () -> tensor<2x5x4xf32>
%1 = "tosa.const"() <{values = dense<-3.000000e+01> : tensor<2x4x2xf32>}> : () -> tensor<2x4x2xf32>
%3 = "tosa.const"() <{values = dense<0.000000e+00> : tensor<1xf32>}> : () -> tensor<1xf32>
%4 = "tosa.const"() <{values = dense<0.000000e+00> : tensor<1xf32>}> : () -> tensor<1xf32>
%5 = tosa.matmul %0, %1, %3, %4 : (tensor<2x5x4xf32>, tensor<2x4x2xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<2x5x2xf32>
%6 = tosa.log %5 : (tensor<2x5x2xf32>) -> tensor<2x5x2xf32>
%8 = tosa.reduce_sum %6 {axis = 1 : i32} : (tensor<2x5x2xf32>) -> tensor<2x1x2xf32>
%cast_0 = tensor.cast %8 : tensor<2x1x2xf32> to tensor<*xf32>
call @printMemrefF32(%cast_0) : (tensor<*xf32>) -> ()
return
}
}
```
## Command:
### 1. Without `-linalg-fold-unit-extent-dims ` and `-affine-loop-fusion`
#### cmd:
```
mlir-opt test.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg-named,tosa-to-linalg))" | mlir-opt -linalg-fuse-elementwise-ops \
-one-shot-bufferize="bufferize-function-boundaries=1" -expand-strided-metadata -convert-linalg-to-affine-loops -lower-affine\
-convert-scf-to-cf -convert-to-llvm | mlir-runner -e main -entry-point-result=void -shared-libs=/home/workdir/llvm-project-latest/build/lib/libmlir_runner_utils.so
```
#### output:
```
[[[38.9161, 38.9161]],
[[38.9161, 38.9161]]]
```
### 2. With `-linalg-fold-unit-extent-dims ` and `-affine-loop-fusion`
#### cmd:
```
mlir-opt test.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg-named,tosa-to-linalg))" | mlir-opt -linalg-fuse-elementwise-ops \
-one-shot-bufferize="bufferize-function-boundaries=1" -linalg-fold-unit-extent-dims -expand-strided-metadata \
-convert-linalg-to-affine-loops -affine-loop-fusion -lower-affine -convert-scf-to-cf -convert-to-llvm | mlir-runner -e main -entry-point-result=void -shared-libs=/home/workdir/llvm-project-latest/build/lib/libmlir_runner_utils.so
```
#### output:
The results of repeated executions are inconsistent.
```
[[[106.263, 106.263]],
[[106.263, 106.263]]]
```
```
[[[43.7036, 49.233]],
[[51.711, 53.3525]]]
```
```
[[[-nan, -nan]],
[[-nan, -nan]]]
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs