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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization—clang realigns VLA sizes when they're known to be already aligned
        </td>
    </tr>

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

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

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

<pre>
    Given

```
size_t fn1(size_t sz){
    if (sz%16) __builtin_unreachable();
    return (sz+15)&(size_t)-16;  //successfully optimized to just "return sz;"
}
```

clang successfully uses the `    if (sz%16) __builtin_unreachable();` assertion to optimize the round-up-to-16 code into just return sz;.

However, in:

```
void use(void*);
void fn2(size_t sz){
    if (sz%16) __builtin_unreachable();
    char vla[sz];
    use(vla);
}
```

on x86-64, SysV ABI, an implicit round-up to 16 still happens inside the `char vla[alignedSz];`.
at the assembly level (instructions    lea     rax, [rbx + 15];   and     rax, -16; ).

Perhaps the optimization applied in the first example could be applied in the second one as well?





</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VE-v4jYQ_zTOZQRyHGLCIQcopa3USpVW2uuTE0-I9xk78jjw4NNXDmELbfUOlVZCJtH8yfz-jBWROTrEmpU7Vu4zNcbeh3qgd9-a96zx-lr_Ys7oGN8zvp1Pyeff9Ermhm8ROpczUc0vdGNiw9a7ewYAgOkghW9MlLlkYgNvb81obDTubXQBVdurxiITVSosngoDxjG4R_EuL1OCkN-_xcRmkUtW7ACYODBxoLFtkagbrb2CH6I5mRtqiB6-jRSBCTG3pFv6kBAzqvX-P-Hdz9Yqd4SX1iMhQewRmOT_B6HkoIgwRONdmu4x6tQz-NHpxTgsol_kElqvEYx7YHgGsHwe81d_wTMGJn4C41ix_US2szc6YWCiSo9MbJ-Zn6KdEz9E0rZXAc5WsXJHN1buX4LzSFY9V30ujnfwUcmFXCXcX670Fba739KzcmBOgzWtid8ZTVTnEigaa6FXw4COwDgyGh9qPs2nbNoP_eUxpuQz3ypO2UnBU2OvYPGMNvFhHMUwtklVSngsKph8rD7SSKzcheYDmNhBXt6bAoBy-jlpNjQTmxd1_8TQq-FuutktanKPGgZrUINxU6wzgSLghzoNFqH1o9XQ4D-zCFvvNHiXUMAFrWXF4cUw_zozXRd6U2xUhnUuK855JcUq6-sCm7ZFLldFk3ddl-tWVPkakRdKFFKKzNSCi4IXosoLXqxWy6Ip86LjSnOFYl1JtuJ4UsYurT2flj4cM0M0Yi3zteSZVQ1amm4pIRxeYAqm3S33WahTzaIZj8RW3BqK9HeXaKLF-g9DhPqFNPazYBVnm9V9tQNOUhN8_X0LyfIElx4npq5MrAPCu_OXaVETlTag0leY7ZGNwdZ9jAOlnZtuoaOJ_dgsW39i4pCmmf8WQ_DfsI1MHCYMxMRhwvhXAAAA__8TyqmZ">