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

    <tr>
        <th>Summary</th>
        <td>
            A miscompile in instcombine, opt pass.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Hatsunespica
      </td>
    </tr>
</table>

<pre>
    Test case:
https://llvm.godbolt.org/z/6W61azGsn
```
define i1 @pr4917_4(i32 %x) {
entry:
  %r = zext i32 %x to i64
  %0 = trunc i64 %r to i34
  %new0 = mul i34 %0, %0
  ;3363831808 * 3363831808 % 2^34 == 0, thus new0 is 0
  %last = zext i34 %new0 to i64
  %overflow = icmp ule i64 %last, 4294967295 ;FFFFFFFF
  ret i1 %overflow
}
```
This test case is a mutated version of https://github.com/llvm/llvm-project/blob/main/llvm/test/Transforms/InstCombine/overflow-mul.ll#L77

Conisder input `x=3363831808`, the original function returns 1 baceuse `3363831808^2 % 2^34 ==0`. However, the optmized function returns 0.
https://alive2.llvm.org/ce/z/5nNo_z
The ouput is verified by `lli` with following test driver:
```
#include <iostream>

bool f(unsigned int x);

int main(){
  unsigned int a=3363831808;
 std::cout<<f(a)<<"\n";
}
```
So the miscompile does exist.
@regehr 


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVE1v4zYQ_TXjy2ANiZRk6aBDYkfdAkUvDdDjgpJG9hQUafAjX7--oGwlTrM9rGFYoPnezBs-Pinv-WiIWijvoTxsVAwn69rvKvhoyJ95UJvejq_tI_mAg_IE8g6yA2R3pxDOPq1EB6LT-mneHu3YWx221h1BdG8guurvKldvv3lz4UCVXb_LcqSJDSHnCEV2dkWT734UIGqWAkGULyAahN39BUwmuNf37pgADkEe8I1eAq4UDBa5Km5A2QIKLpoh7Vx4CSVvUYaeL8A56rS1MEHsL88VJ--lrGQt8zqrEcQdflqWKKB8SFx5SKUWfjhFj0t19pjddNTKh1v9xbuMLyPYJ3KTts8LnIf5jFHTOkyqkxoVoimaaieaMunsrp-1iqOwnPNHsasju8NPrXk8scewmp60K5xjUIFGfCLn2Rq0E36-BEcOp9hvBztfb8T18e3s7D80BBBdr20PopsVmw9M6gOie3TK-Mm62YPofjc-7O3csyEQ3Sr62xz1VmsQ8o_d7ip8-d1bw34kh2zOMSBU2QvIw4c9abDFDULr-MhGaZyiGUIaxFGIznjMsVcDRU-Jf8MtH8RXe9NZbfG7faYncu-1z2HmNxq_1s62P4uN0vxEYruk55Kaga7RKc2f9sfb6gahjWkw9un4eWIasX9NOrVmqDJ85nDCyWptn9kcL9aNjpO2NTP_sRiEZDPoOBKC3LP1wZGaQT7cnmtvrcYJRB3N8qYYkU3AlEyQ97fA9PfF1TptrqlF_ERUn01ZS6APY5Ip7wYbA8g9yH1qqpY-aQVCQLk36fHe93-u7l92sWJmP9j5zJpwtOSRXtiHqwlQZI6OdHJ4O8JmbOXYyEZtqM2rnaibQlb15tQWiqaiorKRikRBopmE6KXMyrwQ1VD2G25FJmSWZ2VWlKKotw31si-pyUcx5EUloMhoVqzfnd6w95HasqlltdGqJ-3Xd7Brl8z08eihyDT74D9ogYOm9u52OjbIxodhDcs-3UI8K--3m-h0-8sZXaSlDC7q_g0AAP__F_7GcQ">