<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/112421>112421</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang 11 or above generates larger code at -Oz
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rilysh
</td>
</tr>
</table>
<pre>
Example:
```c
int loop_body(int n)
{
int i, j = 0;
for (i = 0; i < n; ++i) {
for (; j < n; ++j) {
j = n + 1;
}
}
return j;
}
```
For the initial part, Clang 11 or above generates some additional instructions, while with Clang 10, it's relatively better.
With Clang 11 or above
```asm
loop_body:
lea ecx, [rdi + 2]
xor edx, edx
test edi, edi
mov esi, 0
cmovg esi, edi
xor eax, eax
```
(Why not `xor esi, esi`, which is just 2 bytes for encoding?)
And with Clang 10 or below
```asm
loop_body:
lea ecx, [rdi + 2]
xor edx, edx
xor eax, eax
```
I'm not exactly sure what's the point of that additional testing, GCC seem to avoid this (`-Oz`).
Testcase:
https://godbolt.org/z/a33nv18K1 (with Clang)
https://godbolt.org/z/3sfWKGxvq (with GCC)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVEFvqzgQ_jXmMmpkDAQ4cGjSpVq9w7us1OPKwBQcGZy1B5r0168MNKTdandvL4qwx_N9M8M3g6Vzqh0QC5YcWPIUyJE6Ywur9NV1QWWaa_HbRfZnjSx6ZPyJ8Ue258u_Xmw1EGhjzn96NBOZtwcm8hWdHtYNz71HMXGEE7DoCTiLNt-rseDJNw_47REGv2XiwMRBMZHDfbyN5kGnr_jTN3jG8yX54EEQ3pfg_-nTZm779cQijXaA00a6QT40WczSWKAOQQ2KlNRwlpb8ex-1HFoIQzAWZGUmhBYHtJLQgTM9gmwaRcoMUoMaHNmx9pbz3LdOaYQ3Rd1HGO6PFTGROrCoJakJ9RUqJEK7u6_95Y61Jf9SunT9crI186PlsP40ynnF-uJzs-RgGzULKViySgEXYxdQM4P88ikIoaPFrxa_-uzvzbTw3exfJYW6N1O7Hf-Ddksrl7Ty8m1rmMheuisMhoDtuSd9BHTKgxal6w6Ug9PoCARUV98fP2k41KZRQ8uichvw-fk4NJ9741WuUJu3X6Ty_5Vjfv7ORNrPmuBF1qSv4EaL8NbJZbr8LJ-N_3zNK1An6X5QfT-9JuIIz8cjOMQeyICcjGqAOuXmD3TPH36-zwLnn0bzD3RUS7ddLx3R2XlLlEyUrWkqo2lnbMtE-c5EKaNomMLsR-jDbpLf-vFf_Mi9vvx4vkx_3fjPxyMTedAUUZNHuQywCFOR8zCPo33QFUlWYZLFURJnMs6yqBG8TtMMY5lGEa95oArBRRzyMAnzkEf7HU_5_jWUTZNz2eyTmMUce6n0Tuup96UEyrkRizAUsQgDLSvUbr6BhaiXl_GdDmzhCQ_V2DoWc60cuS0EKdJY_NuNoqVt0UJtGgRJ8PDzPRitLr4IpKgbq11teiZKH3xdHs7WnLAmJsq5WMdEudY7FeLvAAAA__9ee7-3">