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