<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">