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

    <tr>
        <th>Summary</th>
        <td>
            LLVM no longer optimizes isEven loop to a test
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          y21
      </td>
    </tr>
</table>

<pre>
    Up to clang 14.0.0, this (silly) C++ code:
```c++
bool is_even(int n) {
    bool even = true;
    int num = 0;
    while (num != n) {
        even = !even;
 num++;
    }
    return even;
}
```
compiled to just:
```asm
is_even(int):                            # @is_even(int)
        test    dil, 1
        sete    al
 ret
```

Since clang 15.0.0, it doesn't seem to understand this anymore and compiles to a loop.

Godbolt: [before](https://godbolt.org/z/WPYoa4M7K) | [now](https://godbolt.org/z/dc9eoKMze)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMU8FunDAQ_ZrhYgWZMQQ4cMhmSw9JpEpVW_VUGTPsOjL2CptEm6-vDJtNtsmhaLWW5715nnkeS-_1zhI1UGyg2CZyDns3NUfMks71x-bHgQXHlJF2x7I85SkHvGVhrz0DrLw25ghYs1vADeCGKdcTiBvgW-A3cM3Xn1rRNdo5Z5j2f-iJLGClbWA2SkB5IjDG2EKKDAZiy8I0E4h38JI0jwvIL5DnvTYUS1tgzCLjo3z8zuqA2VLLWcbO46ng98pQbt82E4V5suwi70w4971ulRsP2lAfjXycffjoj_TjGrmwBbAGcS73sw9QMMj5h6yLPgP5ENdem3h12SXqKVBcpTnFJwqfdrH-f9dW0es4FK_joAPrHXkLWAbmicbY6mx7mnyQtl_HRdrj6CZiMXCyxEeeZMa5Q_r-lK-u75yJRjEoNh0NbiIotoDVPoSDjwZiC9juVl7qph1g-wLY_vr228n8obxbr_w25lv3_H_JvarJ3T28EGCd9I3oa1HLhJrsusQci6LCZN9kQlA5VFLgoKTKK1XxYih5r2pJSg0i0Q1yxAwFzypR55j25SClyGss664Y-AA5p1FqkxrzNMbjE-39TE1Rl4VIjOzI-OU5Ilp6ZgsIiPF1Tk3MuermnYecG-2Df1MJOhhq7u9_PjDrmHF2RxNzh6BH_UKeaf8lTnw0e7U9DkYyT6b5xxcd9nOXKjcCtlH8tFwdJvdIKgC2S0kesF1K_hsAAP__59Q1fw">