<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">