<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/123550>123550</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Indvars] Miscompile: SSA value incorrectly simplified
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Nirhar
</td>
</tr>
</table>
<pre>
One can find the incorrect transformation here: https://godbolt.org/z/T9qMhT7rb
And the proof of incorrect transformation here: https://alive2.llvm.org/ce/z/PXjb5J
For the record, I describe the problem here. Given the IR:
```
define i32 @widget() {
bb:
br label %bb1
bb1: ; preds = %bb4, %bb
%phi = phi i32 [ -173, %bb ], [ %sub, %bb4 ]
%phi2 = phi i32 [ 1, %bb ], [ %add, %bb4 ]
%srem = srem i32 729259140, %phi
%trunc = trunc i32 %phi2 to i8
%urem = urem i8 -83, %trunc
%zext = zext i8 %urem to i32
%sub = sub nsw i32 0, %zext
br label %bb4
bb4: ; preds = %bb1
%add = add nuw nsw i32 %phi2, 1
%icmp = icmp eq i32 %sub, 0
br i1 %icmp, label %bb5, label %bb1
bb5: ; preds = %bb4
%phi6 = phi i32 [ %srem, %bb4 ]
ret i32 %phi6
}
```
which returns `srem i32 729259140, -173` which is `130`. The above IR under the `indvars` pass transforms to:
```
define i32 @widget() {
br label %bb1
bb1: ; preds = %bb4, %bb
br label %bb4
bb4: ; preds = %bb1
br i1 true, label %bb5, label %bb1
bb5: ; preds = %bb4
ret i32 729259140
}
```
which returns `729259140` which is the wrong answer.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVd2O2zYTfRr6ZrAGRerHvtCF_Bn-sAXSFs1e9JZ_shhIpEJSdpOnL0hL8mLjpN22hgGNyDPnDH2GHua9PhulalQcUHHcsCl01tU_a9cxt-FWfql_MQoEM9BqIyF0CrQR1jklAgTHjG-tG1jQ1kCnnEK0gS6E0SPaIHJC5HS2kts-bK07I3L6isjpZf_5Q_dSOY5w08yko7O2Bdu-l531-qLItu8vw6wg1Czz6--fePETwg3Czcm6JOOUsE4i8j94Bqm8cJqrRZ_3akgqW_i_viiT1p9_i1K4QSWev7iRqtVGgaYEUI6vWp5VQGSHyB5QdUC44fyWBMAd9IyrHhApOM9uxcSANvCuD6IHGJ2SHhA93tjyeIwUJSlEirHTaTs-U3XFAZ6yiq5AQMUxvRSHuOAnvm7lae9ORL5hyr5Hw6R8TOOdGhJNCiJPRfak2Gc5nhPGTi_g4CYjEvoWJdm5lGBB7xbgtLCmQO_gabecMGUuuK_qj5BwKdC7NTeyUbIWOfFbjRMH469JdykvZj7wMV98zKOPD6zJFnImZVqNTzNdV4H5YFFmxWoxjAmcAvV5Ac4u4aUQnS3ouPyqrOLN-9puxX_TbriZ6y6_6Y3Z7Adt4FR4deIyllQd31yoa6dFF5GTMx5QiR_3S2rlEsMNrhMyo5FjCy-dAsbtJd5YmIxUt_uOSqyNvDDnY-LIvL__rXgI9h9c7h9f6r--pz9qpX_rUeqlW4sEN6l39cf3LF8dvHvxtzy8w19bFk25OmvOwIy_KreFjayp3NM926g6q2hFiwLv6aarBc9kIXaCZW2ZsVy0Ja-EYq0kO9ruKd3ommBS4IxgXNJdRrf7TJUiq_IdwS2vMoZyrAam-3U8bLT3k6ozEkU26afwafQRYtQV0i4iJE5CV8ekJz6dPcpxr33wd5qgQ59m5vPcXMURPmgv7DDqPk2pjx8buLB-ejUu-y_g9TD2utVKbibX128GpQ7dxLfCDoicotT8eBqd_aREQOSUCvSInOYTXGryZwAAAP__QzAmDg">