<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56876>56876</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
__builtin_memset_inline emits call
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dvyukov
</td>
</tr>
</table>
<pre>
The [docs say](https://clang.llvm.org/docs/LanguageExtensions.html#guaranteed-inlined-memset):
```
Guaranteed inlined memset
void __builtin_memset_inline(void *dst, int value, size_t size);
...
but also guarantees not to call any external functions.
```
In the following program it emits a call to memset:
```
void my_memset(char* dst, int c, unsigned long n) {
for (; n >= BLOCK; n -= BLOCK, dst += BLOCK) {
__builtin_memset_inline(dst, c, BLOCK);
#ifdef ASM
asm volatile("" ::: "memory");
#endif
}
}
int main() {}
```
```
$ clang -v
clang version 16.0.0 (https://github.com/llvm/llvm-project.git cb5d0b41baf2f137f377a8d03481d6a5574a31ec)
$ clang memset.c -O2 -DBLOCK=64 && objdump --disassemble=my_memset a.out
0000000000401130 <my_memset>:
401130: 48 83 fa 40 cmp $0x40,%rdx
401134: 72 09 jb 40113f <my_memset+0xf>
401136: 48 83 e2 c0 and $0xffffffffffffffc0,%rdx
40113a: e9 f1 fe ff ff jmp 401030 <memset@plt>
40113f: c3 ret
```
Changing BLOCK size does not affect it.
Only `asm volatile("" ::: "memory")` prevents the call.
@gchatelet @melver
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVU2P4ygQ_TXOpRQLg79y8CHpzKxWO6s-7N4jbHBCD4aWwZnO_votsDsfvdMrjYViKPCr94qqSmvFpfn7JCEpdsJ2Dhy_JMU-ofXJ-1eXsG1Cv-LoNDfHVOvzkNrxiIZwGF_f0Dzxo_zy5qVxyhqXnvygE8rQPHLjpRRrZbQy-B7k4KRP6CbAkn1CtklJlhGXv12_geUbWL6J22erBBwO7aS0V-Ywbx3mk8g4bid0Kxz6eEIED2euJxkWTv0jDz6-ov_djJim6TxpJw9cOwtX2g6M9eAtdFxr4OYCEjWOhmvoJ9P5qPWnKubf3w14jGtvtbY_lDnC62iPIx9AeZCD8g74DI0uFpGfRCXqGi6H9_DV3YmPqBPuhHZhMuENHEPQtEV_BoVCUi1KAZmMGJ0atYOBhH1J2B52356f_pgt69saoRAaD-_ubA9Y8D_XsLCKjN6_vQYcE0P1Qvaw_evPGxh3A5yt5l7pgJBQigNCPOJAJhS92PESdx7QpBGqf0dKqv2y8T4JsRm4MhF1lnA987Nb-2ikOcTUh_V5tsyrsxxDskNWpiQl8J9yOSp_mtq0swMuQtUsrzUmwYvsfIoHoGsLQdo8a3lP-4xVPasqXgvC8joTJS-KKucsk11QfE_xymmOfNrB-pnCer9c5r7MkVCJA2z7IqbhFdZroRx3Tg4tBpjtr8kEPLWTv0cn1ycnWcZQG3u65V7Imu17tOcD0bDJa6gZ9ByNcH3Q3qH3MKM5ecsJpkRCi1G8PUDkM0RFgWzgw4P2lzbO4tH-kQ7dkbc-kLqHK-8ZSQrdIyNuxJVR__B0n_DjM6DcQJ9BjyXdh3HjN0vEo2QJ10wuJ6_afyTXz1gd-yh0xhrxSuLs0wR9OuHNh3YSbzs2NBB26Va87zG5sMMsjenZ6AsgwK_WV0mwW8mzNNilQhMLfSp9yMGcHLELeamRMC4GqbEkYCWbrCw2OStrWq5Ew8SGbfjKK69l80nHWJphcLGaRt38WiHhUjk3yfBfVJR1Va5OTVdlXZbnfVfnJc0qLK08L-qK8Q2reZvlK81bqV2Df3mo18gfECGC9mK_Ug0llJKa0AxLgBYpIxJntCiEYJuuqlCuxJair_-Gq7GJlNrp6HBTK-fdbRPLLjRlGd0hPp_8yY6NOF-m7_a8iq6bSP1f-O0kwg">