<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/108906>108906</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization for a loop with dead code
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dcci
</td>
</tr>
</table>
<pre>
Godbolt link:
https://godbolt.org/z/Kaq3sbsr9
Inline code:
```
long patatino() {
long x = 0;
for (int i = 0; i < 5; ++i) {
while (x < 10) {
if (x % 2 == 0) {
x += 2;
} else {
x += 1;
}
// Dead while loop
while ((x > 20) && (i % 3 == 0) && (x % 5 == 0)) {
x -= 5;
}
// Dead while loop
while ((x < -5) && (i % 2 == 0) && (x % 3 == 0)) {
x += 3;
}
}
}
return x;
}
```
If you remove the two 'dead while loops' then LLVM is able to optimize this down to a constant.
For comparison, GCC trunk seems to do better, but also doesn't optimize this fully
cc: @fhahn/@nikic
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVMtu6zYQ_ZrRZmCDGuphLbS4tquLosm2e0qiLDY06YpU7OTrC8qKYzuPtsAlDEuac-ZxZsARzqmdkbKEdA3pNhKj7-1Qtk2jotq2L-VP29ZWe9TKPAH_AWwLbP7vvT-4YKMKqNqdiUs77ICqV6DqD_E3d7Ubimun341WRmJjW3kXDjI2_6ZPbc0OD8ILr4wFWgEVCPn6DCIiToQTAt8iA34FdHZAoJUyHtUFnl43mIZXoDXQWn2IGM6xV1oG99PEj9mnrHBUN9MoRQp5zqm-oodzmlLzLdJNwW8H8i1K7eR_CBB_FeAT4zQe3ErRzuq0tYePvIvyWfxvSGc1lAFlU0cnrfxW6wU9dyK9Rv-lGYvAS9-V_NLyN7hIPyufvi2f_4_y51HwbwTcGG4-BunHweDp4nxB7-7BfG06fLEjDnJvnyX6XqI_WgTK29u-OKA8wAYfHv58ROVQ1Fqit2gPXu3Va3BWDlt7NMEqsLHGeWH88pyosgM2dn8Qg3LWAG3w52aDfhjNEzop9y54tRZr6b0cAl6PHoV2wSqdAcr9Xa5u1PrlWkzTAP-BkLCuF70JA06YUU-qwagteVvwQkSyjHPKUp5QwqK-lEJy6rKMZ53IeNbwImv4qu6alcjTOI0jVRKjhBVxzljKErZknCVcFC0j2aYxjyFhci-UXmr9vA9bKlLOjbKM2apgWaRFLbWb1iCRkUecUCAKW3Eog9OiHncOEqaV8-49jFdey_JROSfbN-XCK2umRSSmseBR-R6nWYXNF42DLu_Wp_L9WC8buweqQuz5sTgM9i_ZeKBqqsgBVXPJzyX9EwAA___ZfH_W">