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

    <tr>
        <th>Summary</th>
        <td>
            [libcxx] utilize __builtin_popcountg, __builtin_clzg, __builtin_ctzg
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            enhancement,
            libc++
      </td>
    </tr>

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

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

<pre>
    clang-19+ and gcc-14+ will support type generic builtins (only for unsigned types) for these builtins.

I see them being used in:
- libcxx/include/__bit/countl.h (__builtin_clz{l|ll})
- libcxx/include/__bit/countr.h (__builtin_ctz{l|ll})
- src/include/ryu/ryu.h (ctz)
- include/__bit/popcount.h (__builtin_popcount{l|ll})
- test/libcxx/containers/unord/next_pow2.pass.cpp (popcount)

There's currently a slight issue in clang-19 with the clz + ctz builtins that I expect to get resolved quickly and before the clang-19 release. https://github.com/llvm/llvm-project/issues/86549

(Consider whether this request may improve things, and if so, does it make sense to tag it as a good first issue?)

https://github.com/llvm/llvm-project/commit/b1e40ede9fd2cd33c7f533147827b23541c516c9 is an example of me utilizing `__builtin_popcountg` in llvm-libc as an example.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVE1v5CgQ_TX0pRTLxt8HHzYdtTT3vbcwlG12MHgoSLr7169wOomS7Ei7WsnColS8V_V4lCDSs0UcWP3I6qeDiGFxfrBa_lRIIhqr0dNhdOo6SCPs_FD0jD-CsApmKR-KKu1etDFAcducDxCuG8KMFr2WMEZtgrYEjHfOmitMzkO0O6naU4nxfo-GBQnfD2Qsf2L5H6_rDyDElLDCiNrOEAkVaMvKe8IDGD3Ky4Xxk7bSRIWMn87nUQfGT9JFG0y2pBrO5zvBWZobax8Na4_GsPaJ8f7fQvlvUOF3UOTlJxx_ja_rK0Q6-JH8nW5z2874lfAt_hvWgJROv_chnQ1CW_TE-Cla5xXjJ4uXcN7cC882QZTJbUsc78hvaK_rnwt6ZLwlkNF7tMFcQQAZPS8BNFFE0BbeDAIvOizpukCaGySDyHD7sEJYRIAfgJcNZYDgYMYAHsmZZ1TwK2r5M8FbBSNOzuMd6Y7t0aAgzGAJYaPkAH5i_DTrsMQxk25NnZvnt9_D5t1fKJMee51Jgq6pq0_tMd4dnSWt0MPLgmHBZEdN4PFXRAqwiivodfPuOVWj7UyMH_cS9QTk0kY5JNAp9ScCoSVMrQUxp6AgEDA7p2DSnu6SsfL0Reb_3JJ067o7ZSywylFhPykuVVnKdqrLsqjajrcjL-uqkHXRyB40gbCAF7FuBsFNsCLEoI2-pXfFmvy7y2bW5Ol6d-5kqr2dd5DsoIZS9WUvDjgUbVGUfZH33WEZ-rHgFa9bVRd1LbtxKng5VoiTnIpelP1BDzznVV7yuuh4VXfZlDeoRtlWteCyagpW5bgKbbLEnTk_H3blhq6p6-ZgxIiG9tHFOdpFWIkrJvNyxo-M81Qs44_7x9N488PexBhnYlVuNAX6gA46mH0Q3h9O_XRXBuGfROFH-DRNvkbCbT5Eb4b_5dO6-TsAAP__LDjYeA">