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

    <tr>
        <th>Summary</th>
        <td>
            redundant `continue` in `if`-chain leads to different code
        </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>
    ```cpp
extern int multiComparePercent(const char *tok, const char*& haystack, int varid);

int multiCompare(const char *tok, const char *haystack, int varid)
{
    const char *needle = tok;
    const char *needlePointer = needle;
    for (;;) {
 if (needlePointer == needle && haystack[0] == '%' && haystack[1] != '|' && haystack[1] != '\0' && haystack[1] != ' ') {
            const int ret = multiComparePercent(tok, haystack, varid);
            if (ret < 2)
 return ret;
        } else if (*haystack == '|') {
 if (*needlePointer == 0) {
                // If needle is at the end, we have a match.
                return 1;
            }

 needlePointer = needle;
            ++haystack;
        } else if (*needlePointer == *haystack) {
            if (*needlePointer == '\0')
                return 1;
            ++needlePointer;
 ++haystack;
        } else if (*haystack == ' ' || *haystack == '\0') {
            if (needlePointer == needle)
 return 0;
            break;
        }
        // If haystack and needle don't share the same character,
        // find next '|' character.
        else {
            needlePointer = needle;

 do {
                ++haystack;

                if (*haystack == ' ' || *haystack == '\0') {
                    return -1;
                }
                if (*haystack == '|') {
 break;
                }
            } while (true);

            ++haystack;
        }
    }

    if (*needlePointer == '\0')
        return 1;

    return -1;
}
```
https://godbolt.org/z/qWK69n7fo

If you add a `continue` in the first `if`-block the code will change profoundly and it also appears to be worse (based on `llvm-mca`).
Adding `continue` to the other blocks also affect the code generation but only slightly.

https://godbolt.org/z/ovcn753z3

GCC is only slightly affected by adding those but it seems to regress a bit when they are used inconsistently.

Strangely if you remove the contents of the first `if`-block it has the reverse effect. With `continue` it seems to generate better code (also based on `llvm-mca`). GCC does not seem to be affected at all.

https://godbolt.org/z/feejKMGx8
https://godbolt.org/z/ahrbKfrde
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0V1GP2jgQ_jXmZbQoOJDAQx4WEFVVnVTpHvrsxGPi1tic7UDprz_ZCZCF7MLqdFV30drjb2a-7xsnMOfkViMWZLYks_WINb42thDS4pEdcFQafipIlrT_q_2eJGuSvOJvj1aD1B52jfJyZXZ7ZvE72gq1J3ReGe08VDWzQOirN78IXcF1kdBXQjOo2cl5VsXNgHVgVnJCFyRdtnna37dpHuOHxXfBW-S8SwEANwc1IlcIJF1DAE4fBH43Unu0Mb5deXNEmBA7D2vpktAFXDNLEXbuUK5AQGj2hqfZMiGz9TmI0JzQGaH5QNwkxtHJOS5fPRc3WyVPBbbJ-930_rU0BdIt-kjMsEs63fpK3Vmgj9sS1mKugF7EDGkaq8PH3TmSrwGVw-5wzxh9GiM9Q-oMyRwOJe82H5PSDaEb-CrOQkoHzIOvEVDz0OcRoWYHBAY75qt6PIzT9TUZZIPk6_6UwFN2vFa4JHR5Yf4xa4MsvBmzd_h4hHD23FXNT5EQ-3gDfY37dJMD1mh_8hXJV_COeS71f0TAB2N-5-NksNXSIhts4mbh4r1LrUzzsxG50YTmHlzNLEZDOrbDeKWxKpBHV4NwQkaM3753m1wO3bg3cjpIxUOLdke4-Wi2BkUdDv5_lb1x6MuwRQdVeqbAoVtp2AQfpgk2P9YyPk7m3jZ4_4R9gt_BFLdX0H8Z97sxv27f83tNfH43af-svd87kr62rt0aXhrlx8ZuCd38IXTzz49v2ULnwvRTfBVwMg0wzoFBeM0x2kvdIMkSkDoOiZDW-bAnBcmSl1KZ6lfcqAxHOEqlwjToLcLeGmEazdUpjp30wJQzwPZ7ZNaBN1AiHI11UY6SOeRgdIBW6rB72VUsNEMX3Uy9ci719rYqb2Jy42u0EItxXRohsPLXyrao0TIvjYay8WC0OoFTclt7dRr3OXhEnDlUOp-lf9L-oS-rVXiyvUHtSkAO5SlQGqr3tXEYC5AeHOIu8mBxa9E5YFBKD8caI9UnCBdTE2iROrxISOdR35b7t7eBbXUKfgviWdyZA3aN63DCgRHvayc91MzFfYsHDHJgLHwMP6Sv72zQq7vjFKFEH6wdiSZ0HgX4QFAIdHGDDrRp4To3XBhjwSzqU7oIxJ_f_vrye_5cOKtt-U1YjiNepHyRLtgIi0m2SLLZfJLRUV1MFtMUs4oKTMQ0zdIpVrmYikU5m-X5LMeRLGhC0ySni8likiV0TNM0RZ6kVJQpF3lFpgnumFTj0H_IPZLONVhkU0onI8VKVC5-36BU4xHiJqE0fP2wReSsbLaOTBMlnXdXFC-9wsIibzRn2g9M6kXjqmZSg0LGo2JcCoEWtY9ajRqrihuipK-bclyZHaGbkLD7eNlb8xMrT-gmlukI3cQ2_g0AAP__uUO1Tw">