<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/137281>137281</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Inconsistent output when executing MLIR program with `--int-range-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: f0c61d2242bbc7576ca5e4137a5ea8f63e4859a9

system: `Ubuntu 18.04.6 LTS`

## Description:
I am experiencing an inconsistent result when executing the same MLIR program with and without `--int-range-optimizations`. 


## Steps to Reproduce:

### 1. **MLIR Program (a.mlir)**:
a.mlir: 
``` 
module {
  func.func @main() {
    %false = arith.constant false
 %c8_i32 = arith.constant 8 : i32
    %20 = arith.trunci %c8_i32 : i32 to i6
    %35 = arith.constant 35 : i63
    %36 = arith.constant 36 : i64
 %sum_2, %overflow_3 = arith.addui_extended %false, %false : i1, i1
 cf.cond_br %false, ^bb1, ^bb2
  ^bb1:  // pred: ^bb0
    cf.br ^bb3(%35, %36, %20 : i63, i64, i6)
  ^bb2:  // pred: ^bb0
    %c4_i64 = arith.constant 4 : i64
    cf.br ^bb3(%35, %c4_i64, %20 : i63, i64, i6)
 ^bb3(%73: i63, %74: i64, %75: i6):  // 2 preds: ^bb1, ^bb2
    cf.br ^bb4
 ^bb4:  // pred: ^bb3
    cf.cond_br %sum_2, ^bb5, ^bb6
  ^bb5:  // pred: ^bb4
    %c-7668919674129928000_i64 = arith.constant -7668919674129928000 : i64
    cf.br ^bb7(%c-7668919674129928000_i64 : i64)
  ^bb6:  // pred: ^bb4
    %c52_i64 = arith.constant 52 : i64
    cf.br ^bb7(%c52_i64 : i64)
  ^bb7(%76: i64):  // 2 preds: ^bb5, ^bb6
    cf.br ^bb8
  ^bb8:  // pred: ^bb7
    vector.print str "%266="
    vector.print %76 : i64
 return
  }
}


``` 

 ### 2. **Command to Run without `--int-range-optimizations` :**

``` 
/data/szy/workspace/llvm-release/llvm-project/build/bin/mlir-opt /data/szy/workspace/mlir-inconsistent/a.mlir   \
-convert-arith-to-llvm -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  `--int-range-optimizations` :**:

``` 
%266=52
``` 

### 4. **Command to Run with  `--int-range-optimizations` :**


``` 
/data/szy/workspace/llvm-release/llvm-project/build/bin/mlir-opt /data/szy/workspace/mlir-inconsistent/a.mlir  \
--int-range-optimizations -convert-arith-to-llvm   -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

``` 

### 5. **Output with `--int-range-optimizations` :**

``` 
%266=4
``` 

### 6. **Analysis for this case :**

After running with `--int-range-optimizations`, a.mlir becomes as follows:
It directly returns %c4_i64 (4)

```
module {
  func.func @main() {
    %c4_i64 = arith.constant 4 : i64
    %false = arith.constant false
    cf.cond_br %false, ^bb1, ^bb1
  ^bb1:  // 2 preds: ^bb0, ^bb0
    cf.br ^bb2
  ^bb2: // pred: ^bb1
    cf.br ^bb3
  ^bb3:  // pred: ^bb2
    cf.cond_br %false, ^bb4, ^bb4
  ^bb4:  // 2 preds: ^bb3, ^bb3
    cf.br ^bb5
  ^bb5:  // pred: ^bb4
    cf.br ^bb6
  ^bb6:  // pred: ^bb5
    vector.print str "%266="
    vector.print %c4_i64 : i64
    return
  }
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWE2P4ygT_jXkgmzZYPxxyCHTmUgjzat3NbN7jjCuJOzaYAHu7syvX2E7jrs7yaRntKs9jBQ5GFdRTxXUAwW3Vu4VwBKxD4itF7xzB22WHxtZH_kzLEpdHZd76fAjGCu1QnSFd5FI44qQhJSlyFiWCs4giWnGGfB8l1JIclbwAkUrFK3s0TpovB5Koz_KTrkOx3kYJWGKP__-FaXRIIcIRYTiNVhhZOsGWyhafcK8wfDcgpGghFR7zBWWSmhlpXWgHDZgu9rhpwMoDM8gOuel3AGw5Q3g_33-9AW3Ru8Nb_CTdAfMVdU3dOc8qCCQygWGqz0EunWykd-4t29RGoV4RDcB_Oqgtdhp_AVao6tOwIBzkvBCcYgRWSGy6o3_NhpHJOdhU0uDSDF8HlTHTh-iaOUD0v_8S6OrrgaMsg8oWmG865QI_QOjJGq4VIjkiBTTd4wRYTteW8CIrjE30h1CHynHlcP9By-HCBP5VlJySSrHHoik5DwiiWaCznRKyBdj9OI-JDI9K1F2afS-d4VlSmeS6UXJdJRMRsi2a7YEkQff1o9gdrV-2tKZKq-qTm7h2YGqoJpCMaqcwrLCMvZdMvbjip23WG1L81KefSzLeGoNsRg7qW-SDSIb3Bqo-mnzX6LRI7EL_Wi-i_bzwygbMdB0bPQRHcLgoaTJ8OfXxWSJfNeSn4NkK9PkUvySefhuwxoGuQvaXD-jM0H_npwsju9sePeqM1dI74ydvHkd5hdQk8locjUc9Kw2m8vzcvEybGql5wizq0MmswgHWZrmRVykWRKToiB5FEXXgn5J9vo8ZEMcb1kY4zlbFuldoBm5BpGR7wOatN-aH0WydPbxxuS-jvsLc_l52PyqV9mo9wjCaRO2RiqHrfNzTPxyTVNE1759QawHOnfXgOuMGsxma8-2w3P4zZl3IJ0Tn5MTnz_opvHbh-f_Tt27i3gII-FfsEQ2FXcckY39dkRk86TNX7blAhDZ1PVjExiogdvptTX6TxAOkU3Zybry_34j2Pg9xFvGtwbshea7JyKbYfvxC4c9oGgVCK0ewbigXziB04E3i6fuIcJTP74if-4Xu6nzlQW_lc0UDAithKwh6JQBXstvUAWCW2dHRZQ9YCcb8CGPozeO-s32R4Im2i4wnVJgcADY76snoKCcOQat7qe2P2Ygun7UssJBYA_cQBXUsrT9CvwJLLUsh6eHsxXbAcy2c7K2odUnNP-cyX_dILdH1fvppzO0-nIGnhOQnhLw_51rO4enzHtH6tHL2TdSCCM3ASQ3GOA9IC6TzX-FAk7zfsWVq7n-bnZ4RQQzisC_2OEXO7yTHdgrduiT8uf25JEVkpt205PdleL10UqLd9pgd5AWCz5UG3MTq50Dg300fYF6D0h_ehpzswShG7CYeyN1rZ_sWB87XEkDwtXH8Xhj54UBycfz29yRH6ws7y827ipD3xzZr5Vf8ZXy6_VhM5o0LtRi5FVldemsGV-qlSY1evWMSu5wJ5m1piGTW-7QSYO-xcXeU8bM9NJ7Kgn2c2fuaZ3Ml8S1o_dpTS6qJa0KWvAFLOMsYYzFUVQsDsuohCIvYp4kccbSShRVlrMypnm2E0ksqoVckoiwKCEsonGaFGGZ8YLwaEeEKOOqJCiJoOGyDj35hNrsF9LaDpYxzUgeL2peQm37GzBChusZgth6YZY9WZXd3qIkqqV19jyCk67ub816BbbGn-ZXUnrkoZdXUm9vor6T_ovO1MuDc22f6_1E7aU7dGUodDOS6VtO7Z2ziGxG_x6X5O8AAAD__6-d0Y8">