<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62560>62560</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
GCC is able to optimize away a loop
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
firewave
</td>
</tr>
</table>
<pre>
I ran into this will trying to reduce code for #60761. This is non-sensical code but maybe there's a possible underlying missing optimization which would actually make sense.
```
int multiCompare(const char *haystack)
{
for (;;) {
if (*haystack == ' ' || *haystack == '\0') {
break;
}
else {
do {
++haystack;
if (*haystack == ' ' || *haystack == '\0') {
return -1;
}
if (*haystack == '|') {
break;
}
} while (true);
++haystack;
}
}
return -1;
}
```
https://godbolt.org/z/YMEz46hdE
GCC will optimize the loop away and only generate `return -1` for the function.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VEtz4ygQ_jWtS5dduPWyDjrEdry1h73tZY9IaltsELgAxeX8-ilkJ4rzmJnLdCEQ0K_vq26k9-pomGvIN5DvEjmG3rr6oByf5TMnje0u9d_opEFlgsXQK49npTUGd1HmiMGi425sGVvbMR6sQ6C0EGWxWuK_UVt5NNYsPBuvWqmves0YcJCXhjH07Bio9CjxZL1XjWYcTcdOTwEG5X1c7SmoQb3IoKzBc6_aHs921B3KNoxS6wsO8okxhuEliB2Ih9tciNuYtsoEHEYd1NYOJxlDr1trfMC2lzH3h15efJDtE1B1c1Burj-IeAO4hnQTB1V4dxtFHSaF2RFCuoN0h0Dl9Su3UG7xaw3ItyIuX3mO0jiWTzH09QbK3b0Oa89fW3b23TnQBmjzBvXV32erP4_oVRyH0RlcrGZ0H2QG-7OMYjK_Ee5XRN4CxlLTHKMFN3Ksie-5-obUe99vm_noM_JZ6b54r3MfwslD-gC0B9ofbddYHZbWHYH2L0D7__55fMmKvnt8b_TXdntt3FsjTZ2H2toTyrO8oDQdWqMveGTDTgZGKMScWSGm0o82h9G0sQuXSVenXZVWMuF6VaxTSgsqq6Svy0OWVoemW1WyyEVbtStadSVR1eRtlbFIVE2CUpGLjFZpmVfLplhXh6yhUqZplhNDJniQSi-1fh4itER5P3JdUF6IRMuGtZ_eLCLDZ5wugSg-Ya6ONotmPHrIhFY--NlLUEFzHblQHmV8aoKdGbkSMZGSjE7XH4hWoR-bZWsHoH30eFsWJ2f_5zYA7ac8PNB-yvNHAAAA__-6V3wk">