<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/119656>119656</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] Inconsistent output when executing MLIR program with and without `--linalg-fold-unit-extent-dims` `--test-linalg-transform-patterns`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Emilyaxe
</td>
</tr>
</table>
<pre>
git version: 953838dceaf
system: `Ubuntu 18.04.6 LTS`
## Description:
I am experiencing an inconsistent result when executing the same MLIR program with and without `--linalg-fold-unit-extent-dims` `--test-linalg-transform-patterns` .
The output becomes correct when either of these two options is removed.
The outputs are also inconsistent when running multiple times with the `--linalg-fold-unit-extent-dims` `--test-linalg-transform-patterns`.
## Steps to Reproduce:
### 1. **MLIR Program (tosa.mlir)**:
tosa.mlir:
```
module {
func.func private @printMemrefI32(tensor<*xi32>)
func.func private @printMemrefF32(tensor<*xf32>)
func.func @main() {
%0 = "tosa.const"() <{value = dense<-9558> : tensor<1x2x6xi32>}> : () -> tensor<1x2x6xi32>
%1 = "tosa.const"() <{value = dense<-9606> : tensor<1x2x6xi32>}> : () -> tensor<1x2x6xi32>
%2 = "tosa.const"() <{value = dense<-9302.0> : tensor<1x2x6xf32>}> : () -> tensor<1x2x6xf32>
%3 = "tosa.const"() <{value = dense<1342> : tensor<1x2x6xi32>}> : () -> tensor<1x2x6xi32>
%4 = tosa.bitwise_or %1, %3 : (tensor<1x2x6xi32>, tensor<1x2x6xi32>) -> tensor<1x2x6xi32>
%5 = tosa.greater %0, %4 : (tensor<1x2x6xi32>, tensor<1x2x6xi32>) -> tensor<1x2x6xi1>
%7 = tosa.reduce_any %5 {axis = 1 : i32} : (tensor<1x2x6xi1>) -> tensor<1x1x6xi1>
%8 = tosa.reduce_sum %2 {axis = 1 : i32} : (tensor<1x2x6xf32>) -> tensor<1x1x6xf32>
%10 = tosa.reduce_min %2 {axis = 1 : i32} : (tensor<1x2x6xf32>) -> tensor<1x1x6xf32>
%11 = tosa.select %7, %10, %8 : (tensor<1x1x6xi1>, tensor<1x1x6xf32>, tensor<1x1x6xf32>) -> tensor<1x1x6xf32>
%cast = tensor.cast %11 : tensor<1x1x6xf32> to tensor<*xf32>
call @printMemrefF32(%cast) : (tensor<*xf32>) -> ()
return
}
}
```
### 2. **Command to Run without `--linalg-fold-unit-extent-dims` `--test-linalg-transform-patterns` :**
```
/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt tosa.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg))" | /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt -tosa-to-arith -convert-arith-to-llvm -one-shot-bufferize="bufferize-function-boundaries" -expand-strided-metadata -finalize-memref-to-llvm -convert-math-to-llvm -convert-linalg-to-parallel-loops -convert-vector-to-scf -convert-scf-to-cf -finalize-memref-to-llvm -convert-func-to-llvm -convert-vector-to-llvm -reconcile-unrealized-casts | timeout 10 /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-cpu-runner -e main -entry-point-result=void --shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_c_runner_utils.so --shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_runner_utils.so --shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_async_runtime.so
```
### 3. **Output without `--linalg-fold-unit-extent-dims` `--test-linalg-transform-patterns`:**:
```
[[[-18604, -18604, -18604, -18604, -18604, -18604]]]
```
### 4. **Command to Run With `--linalg-fold-unit-extent-dims` `--test-linalg-transform-patterns`:**
```
/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt tosa.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg))" | /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt -tosa-to-arith -convert-arith-to-llvm --linalg-fold-unit-extent-dims="use-rank-reducing-slices" -one-shot-bufferize="bufferize-function-boundaries" --test-linalg-transform-patterns="test-patterns" -expand-strided-metadata -finalize-memref-to-llvm -convert-math-to-llvm -convert-linalg-to-parallel-loops -convert-vector-to-scf -convert-scf-to-cf -finalize-memref-to-llvm -convert-func-to-llvm -convert-vector-to-llvm -reconcile-unrealized-casts | timeout 10 /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-cpu-runner -e main -entry-point-result=void --shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_c_runner_utils.so --shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_runner_utils.so --shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_async_runtime.so
```
### 5. **Output with `--linalg-fold-unit-extent-dims` `--test-linalg-transform-patterns`:**
```
[[[-18604, -9302, -18604, -9302, -18604, -9302]]]
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWE1v2zgQ_TX0haAgkZY_Dj44cQ0EaLGLtos9BjQ1srlLkQJJOXZ__YKU5I_aRtI06WFRwHBCajTvDYecNyZ3Tq41wAzldyhfDHjjN8bOPlRS7fkOBitT7Gdr6fEWrJNGIzbH05xN2KQQwEuUzlE6d3vnoQqP0Cj9a9Vo3-BskqTDZIQ_fv2CRmlrhyhDlOEFOGFl7Vt3KJ0_YF5h2NVgJWgh9RpzjaUWRjvpPGiPLbhGefy0AY1hB6LxwcpvADteAf708eEzrq1ZW17hJ-k3mOsi_mMaj3GgRYiSmqs1KY0qSKOlJ7ALvkkhK4dGaWvkwfne0luuXWlsRWruPVgdzRKUzr9uAJvG143HKxCmAoeFsRZET1H6DVhsykDRAfZPBpsYsMPSYQuV2UJx7slhbgFz5cx56NGhbbQOEVeN8rJWgL0MoDHUsApvGGBylqsvHmqHvcGfobamaAS0KTs1CnZZghGdIzqPqfizSwWiE28cTyolLaLT1qJ1cJwP2yadh00SP2FQmaJRgNH4DqVzjMtGiyR84drKLfeA0TCtrdT-E1QWygdGAxJoZyxi94jOd5JRxD4EzJc4WF46KG84QMO04lIjOkF0emCIMaJ5ihFbYERpjC2k0CNKe0t2j8Z3W64aiGYFaAeI3ZNpnk8Q-4DDOhwYZDu6G_VBjBf9884XCePrtgcy2evIjNLRO5ChryPDUpqkN-iUP0CnPNBBNGev4ZKxIX2HdRlGkEhkJf2TdPBobMweovc92ejxuiN6fwPhhfj5EX9tgXuI4GkHPnxj8OwMe3zEthAKyyPX-47U-I7vpIsGWSQRPI8Xt_hkN1CzS9TJBaprqm6L_hhqeTPY7GzLdccxvQCupP4VwNkR2IEKEhUWv0tx1ud6cgXsuHznqT6Buf3gZewEd77lF-2Sdtyxnl9_O6jRtVLdOhVcqavVvUNrT_l5qGf1vuXdHuLg04JvrI7ewyFP5933d5LVVpdeDmkvh_emqkIvEhS00YeW5C0bkqCnrbBeYUWXBfcc0aX7tkd0GdQZ0aVS24pYUMAd9MPamn9AeESXq0aqIvwNMrcMGk1M7fFBsTGpuXOkljUoqQGxBaI0vOSlTlrpRnRykMyuCSDe9HFoXkER987ZfOwQpoiGExE25dtRx6RH4ja0TEQYvQXr22FkoLYVxsRoIG5jPFk1ZQlWfjtE1w1JiCg0cmRlGl1wK8EFxgR2NdcFcd7KAgpSgeeBPiZliC28WcXNeALWk6j4CYfDbJ9zQ2puuVKgiDKmdvjkzS0Ib2ywcaI8TjsRYUQZbG_inzoKUV1SOLrvGFsQRgupgDTaQnRbkHCqXExZaErD7g7F7o2yJ-qGhOYXLCaAQ-eFCWhv96Q2UnvS_jBAbLE1ssCEuA23UBAlVy5m7idYKLlqvwORR_HY0nhsvFQuceY9wX4hFHd7HWMLyUucuV7ajpWN9ZXtj_b3zztUtGNBY1drWvilGj4km4zSYagjYSsfBjembwzyRfd5Ju7hjYr-d6gn7xJ8-rug_2xBfyYpMc7GAbFc_0tiWyb1mjglRVfVX68Hz2U6uok2hylK8W8d-a0j_x8duVlM8ysi8p5F9AXyMWUpvVSPfvZCPOKDU-04hRgUM1ZM2ZQPYJaNGZuOR-NsPNjMypxPc8GEoCshyulEpBkfick4G7EhZXw8kDOa0mFGM5oOsywfJ9MRn4qMrei45IwJjoYpVFyqJCQlMXY9kM41MMuy6SgfDRRfgXL9Za6dxdStmrVDw1RJ593xPS-9ite-8RIuX-CH01vH7nbzuwvXZ-5Z3zCDg8aq2cb72sVcLhFdrqXfNKtEmKrbk5dbM66FQ3TZLcd2Rv8LAAD__1udFxA">