<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/118631>118631</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] Inconsistent behavior when executing MLIR program with and without --scf-for-to-while and --test-scf-while-op-builder optimizations
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Emilyaxe
</td>
</tr>
</table>
<pre>
git version: 0a44b24
system: `Ubuntu 18.04.6 LTS`
## Description:
I am experiencing an inconsistent result when executing the same MLIR program with and without the `--scf-for-to-while` and `--test-scf-while-op-builder` optimizations. When these optimizations are applied, the program enters a dead loop.
## Steps to Reproduce:
### 1. **MLIR Program (a.mlir)**:
```
module {
func.func private @printMemrefI32(tensor<*xi32>)
func.func private @printMemrefF32(tensor<*xf32>)
func.func @main() {
%2 = "tosa.const"() <{value = dense<42> : tensor<1x3x7xi32>}> : () -> tensor<1x3x7xi32>
%4 = "tosa.const"() <{value = dense<35> : tensor<1x3x7xi32>}> : () -> tensor<1x3x7xi32>
%12 = tosa.minimum %2, %4 : (tensor<1x3x7xi32>, tensor<1x3x7xi32>) -> tensor<1x3x7xi32>
%cast = tensor.cast %12 : tensor<1x3x7xi32> to tensor<*xi32>
call @printMemrefI32(%cast) : (tensor<*xi32>) -> ()
return
}
}
```
### 2. **Command to Run Without Optimizations:**:
```
/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt a.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg))" | /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt -tosa-to-arith -convert-linalg-to-parallel-loops -one-shot-bufferize="bufferize-function-boundaries" -convert-linalg-to-loops -finalize-memref-to-llvm -convert-arith-to-llvm -convert-scf-to-cf -convert-func-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
```
### 3. **Output WithOut Optimizations:**:
```
Unranked Memref base@ = 0x561bcc0853c0 rank = 3 offset = 0 sizes = [1, 3, 7] strides = [21, 7, 1] data =
[[[35, 35, 35, 35, 35, 35, 35],
[35, 35, 35, 35, 35, 35, 35],
[35, 35, 35, 35, 35, 35, 35]]]
```
### 4. **Command to Run With --scf-for-to-while and --test-scf-while-op-builder Optimizations:**:
```
/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt /data/szy/workspace/mlir-inconsistent/report_bug/tosa2.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg))" | /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt -tosa-to-arith -convert-linalg-to-parallel-loops -one-shot-bufferize="bufferize-function-boundaries" -convert-linalg-to-loops --scf-for-to-while --test-scf-while-op-builder -finalize-memref-to-llvm -convert-arith-to-llvm -convert-scf-to-cf -convert-func-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
```
### 5. **Behavior with Optimizations:**:
When I apply the --scf-for-to-while and --test-scf-while-op-builder optimizations, the program enters a dead loop and doesn't produce any output.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWF1v2zoP_jXKDSFDlmwnuchF2ixAgQ17sb3DLgvZZhKdyZIhyenHrz-QnKTtlrXdF3AuBhhuJdIPKYp8JEZ6r7YGcUHKC1KuJnIIO-sWbzql7-QtTmrb3i0IW25VgD06r6whYglMFkXNC8KWhC39nQ_YxWlSsU_1YMIA-SxjRVbB2_9_JBUb9QgXhAtYoW-c6sMIRdjyCmQHeNujU2gaZbYgDSjTWOOVD2gCOPSDDnCzQwN4i80QolbYIXjZIbx7e_UBeme3TnZwo8IOpGnTP3YISY1UjFLfbOjGOhosvdkpjaRiSTEJA_qQNJKI2p7Wg9Ituqhl-6A6dS-jzz6Dz9GPsEOPTyUgHYLse62wJfwyWT66hSag8yChRdmCtrbPnkTlY8DeQ7DwAXtn26HBMTgPT9KLqnkGhC8JX6Z1_-9ggPCZzDqtHOHzUfwAULHxAcKWnW0HjUCmF4QtATaDabL4gt6pvQwIpGC9Uya8w87h5kpwwmcBjbeOiEvCl7dKcCLeRDOvAVh_C7D5DgApWCeVIXxG-PzkIQDhJQciVkA4D9bLLKZGIJwfNcUlmV7spR4wqbVoPBJxWUQzEBPzZD6_FbfT4wqmq6P8AETj-LzuyZPiZzwR5R_wJB-DkvzolFHd0KVQxdQ7OJrwzsPE_DwveJ31Rvow2k962Tg-ePWddcb8PpdKI2gjtT6bfQdrY4CfLulJPo5-jxE8YDoMgzNpEIPMlof3V0URFR4KjB8L7NJ2XWSIWJaDgc8HRnn_uOhjlT1TboSvWxkk4Wt_f0f4OtYs4Wut9x11qFF6PA57Z__BJhC-TtQT_8ZiWMeiprYPMNY30F56T3vVo1YGiVgRzuMXQZlsrG7CZ6eqitGyXkbW08pIvU38MCecA5nGRPl9_gE9WpIusjBtrNmjCwfDUdBLJ7VGTSMDeqDWIPU7G2g9bDbo1P1pPYchjWuIgaa1HUwrnUIffT-DPUIC3cSZ-GmXciiJ9L6Dh2-Se6f503Sk_2Bps3mkGs0_QnDYWNPEE2IwDpOZlsbk9CmaQXUYMyRnvy2wTT9QNxiDDihC5EegaIK7o71VJtDxbCRitbeqBUr9TjpsqVa1T6H8BS-0qsd3dOS6uR7duB6C0j7z9k8a-9rU-Zp9KFlxLNn3Q-iHkEr1_Q-W6ifjpPmCLYzcA3X0t2CJ5NhtWeV107BZKRoGUTHNC7CbjceRCRl4dY9-PCDKizxyrIivKSlX4INT7YOU56OEX0IexTFyo4wt02UsPqKMcgD40X_KVToFIq39FpRXwXwPY3xe2MHiGdKFby9v6eb2zLXtxZ3_gzz9NdaNdV98Lxs8Kj2-3BK-dthbF67rYUv4OlIo_0v0ryB6OJcW8GxS_PDZAOdOh7-Hw3_qcHiWVsojrVzgTu6VdWOD-AI7pA7vKvVyd6mN-wkCetIavtwOJrzWojeETwMcmkCQ5g5sOtOySbsQ7VzM5QQX-VQIkc-m-WyyW8zmRVXNp7WcIdtgVVXltMGKN2VeTysx4xO14IwXOWdFLniZz7Jmytp6Pkcm6lrmoiQFw04qncX4Z9ZtJ8r7ARd5PqtEPtGyRu3TbwScjz0mJ-Vq4hZpv-ph60nBtPLBPyAEFXT6XSF9UK7g6nFLX5-242lT_3wv_6vbMBmcXuxC6Mc9XxO-3qqwG-qssd0h_b7NwhQLT_j6EI79gv8bAAD___1EWtg">