<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/137509>137509</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] Inconsistent output when executing MLIR program with `--sccp`
</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: e43d64ebe92ed0f61d6ba70
system: `Ubuntu 18.04.6 LTS`
## Description:
I am experiencing an inconsistent result when executing the same MLIR program with and without `--sccp`.
## Steps to Reproduce:
### 1. **MLIR Program (a.mlir)**:
a.mlir:
```
module {
func.func @main() {
%true = arith.constant true
%c10283417 = arith.constant 10283417 : index
%low, %high = arith.mului_extended %c10283417, %c10283417 : index
%2 = arith.subi %true, %true : i1
%3:3 = scf.if %2 -> (index, index, index) {
%c-5111992125488369343 = arith.constant -5111992125488369343 : index
scf.yield %c-5111992125488369343, %c-5111992125488369343, %c-5111992125488369343 : index, index, index
} else {
%c20 = arith.constant 20 : index
%c5 = arith.constant 5 : index
%17 = arith.shrsi %high, %c5 : index
scf.yield %c20, %17, %c5 : index, index, index
}
%low_5, %high_6 = arith.mului_extended %c10283417, %3#2 : index
vector.print str "%83="
vector.print %3#1 : index
vector.print str "%103="
vector.print %low_5 : index
return
}
}
```
### 2. **Command to Run without `--sccp` :**
```
/data/szy/workspace/llvm-release/llvm-project/build/bin/mlir-opt a.mlir -convert-arith-to-llvm \
-convert-scf-to-cf -convert-vector-to-llvm -convert-arith-to-llvm -convert-cf-to-llvm -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 \
--shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_async_runtime.so
```
### 3. **Output without `--sccp` :**:
```
%83=0
%103=51417085
```
### 4. **Command to Run with `--sccp` :**
```
/data/szy/workspace/llvm-release/llvm-project/build/bin/mlir-opta.mlir -convert-arith-to-llvm \
-convert-scf-to-cf -convert-vector-to-llvm -convert-arith-to-llvm -convert-cf-to-llvm --sccp -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 \
--shared-libs=/data/szy/MLIR/llvm-release/llvm-project/build/lib/libmlir_async_runtime.so
```
### 5. **Output with `--sccp` :**
```
%83=0
%103=9770893153790023897
```
### 6. **Analysis for this case :**
After running with `--sccp`, a.mlir is transformed as follows:
It returns the result of multiplying` %2 (13334751948221182273)` and `%4 (10283417)`,
whereas it should return the result of multiplying `5 `and `10283417`.
```
module {
llvm.mlir.global private constant @vector_print_str_0(dense<[37, 49, 48, 51, 61, 0]> : tensor<6xi8>) {addr_space = 0 : i32} : !llvm.array<6 x i8>
llvm.func @printNewline()
llvm.func @printU64(i64)
llvm.func @printString(!llvm.ptr)
llvm.mlir.global private constant @vector_print_str(dense<[37, 56, 51, 61, 0]> : tensor<5xi8>) {addr_space = 0 : i32} : !llvm.array<5 x i8>
func.func @main() {
%0 = llvm.mlir.addressof @vector_print_str_0 : !llvm.ptr
%1 = llvm.mlir.addressof @vector_print_str : !llvm.ptr
%2 = llvm.mlir.constant(13334751948221182273 : i128) : i128
%3 = llvm.mlir.constant(false) : i1
%4 = llvm.mlir.constant(10283417 : i128) : i128
%5 = llvm.mlir.constant(5 : index) : i64
%6 = llvm.mlir.constant(-5111992125488369343 : index) : i64
%7 = llvm.mlir.constant(0 : index) : i64
llvm.cond_br %3, ^bb1, ^bb2
^bb1: // pred: ^bb0
llvm.br ^bb3(%6, %6 : i64, i64)
^bb2: // pred: ^bb0
%8 = llvm.ashr %7, %5 : i64
llvm.br ^bb3(%8, %5 : i64, i64)
^bb3(%9: i64, %10: i64): // 2 preds: ^bb1, ^bb2
%11 = builtin.unrealized_conversion_cast %10 : i64 to index
%12 = builtin.unrealized_conversion_cast %9 : i64 to index
%13 = builtin.unrealized_conversion_cast %12 : index to i64
llvm.br ^bb4
^bb4: // pred: ^bb3
%14 = builtin.unrealized_conversion_cast %11 : index to i64
%15 = llvm.mul %2, %4 : i128
%16 = llvm.trunc %15 : i128 to i64
llvm.call @printString(%1) : (!llvm.ptr) -> ()
llvm.call @printU64(%13) : (i64) -> ()
llvm.call @printNewline() : () -> ()
llvm.call @printString(%0) : (!llvm.ptr) -> ()
llvm.call @printU64(%16) : (i64) -> ()
llvm.call @printNewline() : () -> ()
return
}
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWVuP6ygS_jXkBTnCYHx5yENOpyMdafaiOTvPEbZJwi4BC3B3Z379CnASJ3H6sqOz-7AjRbRtqr66QBVVNLNW7BTnC0C_Abqasd7ttVk8H4Q8sjc-q3V7XOyEgy_cWKEVIEvIM9LmGa95hXmLtnna5jUrEEBLgJb2aB0_eDKQo9_qXrkepuUcZfMc_vKPHyAf6AAmABO44rYxonMRGqDld8gOkL913AiuGqF2kCkoVKOVFdZx5aDhtpcOvu65gvyNN73zVG7PoWUHDv_yy_dfYWf0zrADfBVuD5lqw4PunVcqSWzTdCBHc3ilyg_HOwudhr_yzui2b3jU6EzhidI5BHgJ8DKI-fsgBuCSzQ9SGICrOB1Zh4_eGWjpTQ8__3LQbS85BMU3gJZw26tm7gcIMnRgQgFcAlydpiGEAFNneg4BWUFmhNvPvUccUw767xeqJkW4JFlaTJGO5pZQqJa_XRilfgX4yT_txW4_4j70shcb_ua4anl7JWNgaN7DxSMo29fiZMrAO1i1hCL1PABTAsiSBCbbbOdiG0ESQJ69nyM6foK3D2NvRU8kNE3TqsIppllZkrwiGZnyygO6a0tg0OYouGwfgp_c8dW5kbB7wwZHFivIpeV3RmI0ZVL4OjLAU9IpQjphKMD0avvYvbHitDFOdkwxXnsIo4H2sk_o5ywdNJb6dUNHe3KTf2lX-njF11q-8MZpM--MUA5aZyDAGGBaEkBW_jFqcEU1AKV35j7AStH7YMGoOzDDXW9UeIn2D2P8jRNH9M0pHeFTOnrSh4PPcz599eqc7q7ynZc6ZKcJXLxumWMAr-3vR4DXr9r8y3as4QCvpXw5JIZLzuz5tTP6n7xxAK_rXsjW__Vpa-0TXqI7B2Pug0mj1Qs3LgnLljideHYI6FOw9jxtm62fbLajb9F3Z54HUJfvEeLmo0-rt2ITwxutGiF50ivDmRS_8zZpmHUWguIJOnHg3n0pgrd-8Xn_P3FJ0_WJ6ZXiBiYc-hx_8QFXzhyTTgvlkni6AbJ60aKFSWL3zPA2kaK2YV_9AW2kqOPoFdo0m6jOpndC2rnVZ-f8PJn_fYnMHlWw1C_p3OrpiLoEFDkF1N961_kA-iiSyHQwxZyC4nPMCTTN0gKV9CMVsndi-oOA_skx_b8N6Wj2B5H9Z2j_X4f2w6CiN3EdgukLh-NEPFdFgcqKpJQUFUKYlFXxrgr5SYWlYvJohYVbbaDbCwsbZvmtAsut4wZ6t_r25k5fX-QM8SgsdIYpu9XmwFvIPLCU-tUOHZUbygsbmqShfdJbeOilE508CrUL-oZaHZcpISQraFplJcZpWmJcEN_X5Ch0UkE2zQLlueCqokYALV_33HBmoXDQ7nUv20H4Y9kekfphQD-j5mg-sRbXnRP0WyW4Yb6TumYSdka8MMfhucQFGYpZZxOKsI11ZoMALluuLAfkCdBvJNSMWRXG0o809WMeRgToKnQfZAkdV1YbQJ7yN1EC8jz0HaxtzSak1lCiDtU3wb5sD-0fToOizBh29NzwDUb-sw2n9i8o-Vf-KoXisQ30NPckv-WZb4f8WD1A-eGMX1sPEsV3zozxvuq2KafR_FPuon_IXfTKXZ_qlmNbdDHTi-TW6u30frgS690UW5D0KyhTGOMe-AJzcvKDaBv64cGq0_MZjTxG2zLpE2g16qgjT_aOBlfN-0Op9DHCVVs38ObZhTV_zPpROzyBVjxGQ--xBo5Gq3ZTm6Gte4KAPtd1en6KXdvwMazmGuA17Axvw6ufQGM8D-U_krAHYzAMFkfZvru9xOgghPjHR9D-sLmYyOw-aHvqaumUVTdalHe0V1qMSasRRTjZzu_VWEsc9LRnRW89Fi8NYrT409oJNb-UX5tYsVmh1cZXYlHSSTlf397cGaX4C0jVe0DkKyqNbgsC1rSTs7MPs4cLSUYqZF9RIX2kgp8ch2AvQ2IZ1i2bCNh0FHbOhHQ5YETKCRMbJuXU6eHTezWkt5vD5HwxNz5YrnDiQRUWY4QS99gt96QiV4fhRYvPMY-tQJ-2YhLqYkj-cw15dBt0W1qefrN2QdqKVGzGF2mR0SIjKcaz_QITghpMCs6KLc9QXpcpa0nVtG2d1YjSmVhghCnKcIFKUmZ4XtGsyXiVpmWTloRmIEP8wIScB2u02c2EtT1fpKSgqJpJVnNpwz8PMI4X4BjQ1cwsQglf9zsLMiSFdfaC4IST4R8OgYGu4Pfx9b4eCvTr6_37W_1xMTzrjVzsnetCyRvicSfcvq_njT4M_cR9WxEssQCvB2NeFvjfAQAA__9VkECR">