<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/109391>109391</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AMDGPU] Identical LLVM IR file with different basic block ordering cause miscompilation
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AMDGPU,
miscompilation,
julialang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vchuravy
</td>
</tr>
</table>
<pre>
Reduced from https://github.com/JuliaGPU/AMDGPU.jl/issues/672#issuecomment-2347151487
The code is a double-nested loops and the bug manifests as if we were skipping a loop.
In one version of the code after optimization (specifically DCE) the basic blocks end up in a different order.
I have two small LLVM modules that are identical, except that in one I manually reorder the BBs to follow the order of the "working" version.
https://godbolt.org/z/sscdTK7d7
https://gist.github.com/vchuravy/0c60cf4b9c497f6c8050f2a1137cd399
```
llc -filetype=asm broken.reorder.ll -o broken.reorder.S
llc -filetype=asm broken.ll -o broken.S
```
`broken.ll` is the original file that is exhibiting the miscompiation and `broken.reorder.ll` is the file that emits the same code as the working MWE.
Lastly, I encountered this on LLVM 15, and it also reproduces on LLVM 16. LLVM 17 either hides or has this bug fixed.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVF1v4joQ_TXmZUSUOIGQhzy0ZVlxbyut9uPeZ8eekGkdO7IdaPfXXzmhBVZXuxICPJ6P45kzR3hPB4NYs9U9W20XYgyddfVRdqMTx7dFY9Vb_RXVKFFB62wPXQiDZ_kd4zvGdwcK3dgk0vaM7_4aNYnPX34wvrt72n7-8iN51ozvyPsRPeO7dckZz6ejtH2PJix5XpTZKis2JUu3LL2bv793CNIqBPIgQNmx0bg06AMq0NYOHoRREDqEZjxALwy16IMH4YFaOCGc0CH4FxoGMgcQU1Ay594bsAbhiM6TNWDbKc9UTbQBHdghUE8_RYjXjG_8gJJakkLrN9g-fGK8mksLTxIabeWLBzQKxgHIRLzUtujQBLBOoUuuX7aHThwRwsmC74XW8Pj4zxP0Vo0aPYROBBAOgRSaEEsy_gD4KnEI8yXN6Pfx0eOEyOFUZYJ0f-8hWGit1vY0Wea78yMZ5yfrXsgcGOfvHbiB98twrWqsDol1B8Z3PxnfeS_V979LVf4miHxIbmjxTibGd6lcp7ItmkoWVdmu5SZdpS0XWZaXUuVVdZ2WrdPzZzpqLWHZksbwNiDLt8L30Dj7giY5tyDRGpb2V-O3P4bfhH373-Ifxo8Qtk4jO-ce04GM0BDTn8fkAV87aihE_kWnnry0_UAzrSJ9L9ku-K-yXpJhT2G2edG_U3U2nMcJT_9-upnjo_BBv0Xy7AGNtKMJ6DCuDHmwZmZdtooOEQoFENpbcDg4G3f9ymmdnP-UgBQ6dNCRig4OugkF-WkLW3pFdQNioepcVXklFlhnJV9vOM95tujqvCmrplKYoyzSom1EVuRqs9moKq0wWzULqnnKi7TiabpZ8TRLOFc8VzwtNmuJpSpYkWIvSCdaH_vIz8WkKnWWVnmVLbRoUPtJ0zhvhHxBo1h-N4sS45zxB8b5-0j0NJMP83NUMS2mJYmS6OpYZNmMB8-KVJMP_lI2UNCTeJ5zr7awf9_duW_7r_MoTxS6K2m4Uo95SeMYpRj9hSozrsXodP0b0Y1Qzj_LwdlnlOFac88dOdb8vwAAAP__InLqOA">