<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/121853>121853</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: while (len > 1) len -= 2;
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Alcaro
</td>
</tr>
</table>
<pre>
```c
unsigned foo(char* buf, unsigned len)
{
while (len > 1)
len -= 2;
if (len)
*buf = 42;
return len;
}
unsigned bar(char* buf, unsigned len)
{
len %= 2;
if (len)
*buf = 42;
return len;
}
```
-O2
Result:
```asm
foo(char*, unsigned int):
mov eax, esi
cmp esi, 1
mov ecx, esi
adc ecx, -1
inc ecx
and ecx, -2
sub eax, ecx
je .LBB0_2
mov byte ptr [rdi], 42
.LBB0_2:
ret
bar(char*, unsigned int):
mov eax, esi
and eax, 1
je .LBB1_2
mov byte ptr [rdi], 42
.LBB1_2:
ret
```
Expected: Same for both
Reduced from an implementation of [this idea](https://github.com/llvm/llvm-project/blob/main/libcxx/include/__charconv/tables.h#L143).
All three major compilers get confused by that code. https://godbolt.org/z/1W1hroc67
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyslE-PozgQxT9NcbESmYKQcOBApofTrFbaPeyxZewiuGXsyDY93fPpVyZ_hox6pe3VoiiW_F65fjxjixD0yRI1sDvC7ikTcxydb1ojhXdZ79R7AxW__CTwdraLX7HBOcCDHIUHbFk_D4Bf2F01ZAFr4C3sj-mf199HbYgBHgxZBsVXll8NvAZep8kNFE8MobgW6OHqXvsA234eWHKWP62e4uzt0vQytX9ao_aJ8ROoCyHu_mece4zA283vuFjbPyjMJkLRrg0iTMDbh4AfiLWNCWIpYtdncq-MxFvyUdArQU7nZUyz-IXlv9QskvygTih5EzbrIm3lvWjltmq91AZXWpj7i3bFeyh8ocu4_XY88mf8gK5_j8TO0TPYHb3SsHtKq5TJeiu6JOEpXkJ92O9_ldwa7zEFq25C_g_U-X-hzu_U1-cKv_pGvr6dSUZSULTsTzERG5xnvYvj7ctRs0zn0LuJCcv0dDY0kY0iameZG1LnOOrAtCKx9D-MMZ5D6osdYHfScZz7rXQTYGfM623YnL17IRkBu964HrCbhLZJ1L18ewPstJVmVgTYPT-nmKWzr4BdFL2hsB0Bi295WQDW2wtrawyLoydik3hxnkk3nbUhH9iJIpPODnNI5_SdxVGkCUVb9gusU70zcev8CbD7Adjlf-Wjd7LaZ6opVF3UIqMm3xcV8pJXdTY2VMma8-GQF3m9V3RQIq9K3peEtarzush0gxx3POcV4q7EeluIYS_qfVUTHkjJCkpOk9Bmm3JJvTMdwkxNjvlhV2RG9GTCcnUiWvrOFhUQ003qmyXMfj4FKLnRIYafy0QdDTW_6ZDe252jnvSPZePSbn94VbKHKzKbvWk-vZ0LXkjZXfhfG_w7AAD__wXGsBs">