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

    <tr>
        <th>Summary</th>
        <td>
            Miscompile with opt -passes=loop-reroll
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    llvm commit: 41c6c75333c8
Reproduce with: opt -passes=loop-reroll bbi-77532.ll -S -o -

In the input the loop is executed 23 rounds
```
%i.021 = phi i16 [ 4, %entry ], [ %add45, %while.body ]
[...]
%add45 = add nsw i16 %i.021, 4
%sub = sub nsw i16 97, %add45
%cmp = icmp sge i16 %sub, 4
br i1 %cmp, label %while.body, label %while.end
```
and as seen above each round %add45 is incremented by 4:
```
%add45 = add nsw i16 %i.021, 4
```
After the loop %add45 is returned from the function:
```
%i.0.lcssa = phi i16 [ %add45, %while.body ]
ret i16 %i.0.lcssa
```

After loop-reroll, the loop executes 92 rounds
```
%indvar = phi i16 [ %indvar.next, %while.body ], [ 0, %entry ]
[...]
%indvar.next = add i16 %indvar, 1
%exitcond = icmp eq i16 %indvar, 91
br i1 %exitcond, label %while.end, label %while.body
```
but %add45 is still incremented by 4 each round
```
%add45 = add nsw i16 %i.021, 4
```
and it's still returned after the loop
```
%i.0.lcssa = phi i16 [ %add45, %while.body ]
ret i16 %i.0.lcssa
```
So the return value from the function is changed by the loop-reroll pass.
[bbi-77532.ll.gz](https://github.com/llvm/llvm-project/files/10389587/bbi-77532.ll.gz)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzElcuu8yYQx58Gb1AsLnYcL7w4p1GkLrrp9wQYJjEtBhfwufTpK3zJcb4k7VepUqUotmGY-TPzgxEh6IsFaFD5ispjJsbYOd_0-ncBpnOmB5u1Tn02xrz1WLq-1xHxF1xQuZdVyTmXB0SOiLz8CoN3apSA33Xsko0bIt4NIgQIiB-Nc8POg3fG4LbVu6oqOcuNwbtveOfwbvYy__9scewAazuMcXpLi7EOGD5AjhEUZhx7N1oVlmV7svzmT1bqnDCKET_iodNY0z1G5SsuEPsJI1aCjf4To_I4fZevaUwoVZTL_HunDeRp45PR7LR8zfP863NZMcUQSmEb3uc4S_DkqrjahrGdLNNztayrJdwcejWV_TCZ6vQSLrB6DWO78dl6rCmezdOwES2YW-0PhsGqhxkTVmERcACwWLTuDTAI2c05vipMFdBWeujBpiK0n7hA_OVZCX48PbdLX84R_FfZt9E9xNFbUPjsXT-ZnEcro3b2b3TonORGhiDucPiBqnuIG9mzn8eBNto3rCfX160s-AZcs3_C16o34R8JnmdyCx_xseyFaHKH-hOKNw6vxVp3PE0lR_RqDh86SpeoWBGFP-7ta_odpeuyJ0w-AfhRdtox3jARojbmjssNv_81n-ms6IhYtca-UiluyP1_efzmJiGzNvwmzAj3pyblT3bCXuasrcrXezpd3vmVm-2tnV_-nFg7dDEOIR0-dkLsdNGxG9tcuh6xU2oZy2M3ePcbyIjY6awNBMROlPBDXR4qxE7fO2b1HDNTDVc1r0UGDd1XvGBkT2jWNYUgba0YZ6Ig-zOQFkpJSFUoWgEXJc10wwjjhFJKKsIZzeu6PVS1qtq6EoWiFBUEeqFNntTlzl8yHcIITVnXjGYTimHqiYxZeMfTJGIstUg_9cJdO14CKojRIYYvL1FHA80vOkjXD9rMzfB5J8xGb5p_ncJJTcrhpPavAAAA__9xTjwO">