<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/74976>74976</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
miss optimization for count trailing ones (miss `__builtin_ctz` detection)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zufuliu
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/66azfKsb4
```c
#include <stdint.h>
int trailing_one1(unsigned x) {
x = ~x;
return x ? __builtin_ctz(x) : 32;
}
int trailing_one2(unsigned x) {
int i = 0;
while (x & 1) {
++i;
x >>= 1;
}
return i;
}
int trailing_one3(unsigned x) {
#if __has_builtin(__builtin_stdc_first_trailing_one)
return __builtin_stdc_first_trailing_one(x);
#else
return trailing_one2(x);
#endif
}
int main(void) {
__builtin_printf("0=%d, %d, %d\n", trailing_one1(0), trailing_one2(0), trailing_one2(0));
__builtin_printf("INT32_MAX=%d, %d, %d\n", trailing_one1(INT32_MAX), trailing_one2(INT32_MAX), trailing_one2(INT32_MAX));
__builtin_printf("UINT32_MAX=%d, %d, %d\n", trailing_one1(UINT32_MAX), trailing_one2(UINT32_MAX), trailing_one2(UINT32_MAX));
return 0;
}
```
Also clang lacks `__builtin_stdc_*` GCC builtins: https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyklUuPozgQxz9NcbE6MuWEx4FDHs1qtdrdy7a0NwS2CZ5x7Aib7p4c5rOPTCcizWT6oZGsIKr8r_yq7PxTO6f2RsoCVhtY7aJ68J3ti9PQDloNUWPFt6Lz_uiArQFLwHJvRWO1X9h-D1ieAMskqU_tX65ZAt0BXUNCXxY_vyNThutBSAJs67xQxi86YPfn9PipjCe-r5VWZl9ZI2PAbDAjmyDPgDmBdHMR5M8E2I58fwY2xXrph96QkCpJVTWD0l6ZivsTYPZSga0Jw0mT7t4iwDcJwm41UtBriKdOaUnCFxLAhMRzWVi4Adyoa9W5o_tx7Uj8KjdRXlpUH22BvdECMtWSqupqdxkVYDaNzXnBq1b1zlfXFQHzOc0HNOP4J2hkUjs5rzOf_U8aI1T7y7YP9djAo1ViPvMJ8Ngr41vADBApsB3gSgBuyavnamsAMbzO7yMNRLM4vhvPr0_zNsuf__zHsPp7_f_nmSbpbYbP5T_A-vAbsA_v0Xx2Q37DAOiNX8fFka5vzVo7S7iuzZ7omn91BBI6u8uAQUr-2G7JOR5skMz8kPPF3gxnP7RGKyOF5e4lBVj-6zvZ323OBRadP-hIFEzkLK8jWcQpxTjLEbOoK3ibZXXKuMyTVrB6VScUKWPY5IwxnsSRKpAiizGmNEGK2UJykaYrkeKyXQoeC1hSeaiVXmj9eAhQkXJukEW6zNMk0nUjtRvNHtHIJzImw3GtdlFfBM1dM-wdLKlWzrupildey-KgnCP26NVBnWqvrCGt7Qm3w5XzEGukCx44bn411WDGCSVCesmDGjCPhl7P_2GU74Zmwe0BsAwA58fdsbdfJPeA5YgdRjy29SMAAP__4pj9DA">