diff options
| author | Peng Liu <winner245@hotmail.com> | 2025-04-18 20:57:05 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-18 20:57:05 -0400 |
| commit | 9e3982d9ae8173171cd7247ee505e9c02079c6bf (patch) | |
| tree | a875cc7656efbcf42145e8e8e48968167d726572 /libcxx/include/__algorithm | |
| parent | 5c4e6c61136f5edbaf779bdcf1bda0ed88c7c3ff (diff) | |
[libc++] Replace __libcpp_{ctz, clz} with __builtin_{ctzg, clzg} (#133920)
`__libcpp_{ctz, clz}` were previously used as fallbacks for `__builtin_{ctzg, clzg}` to ensure compatibility with older compilers (Clang 18 and earlier), as `__builtin_{ctzg, clzg}` became available in Clang 19. Now that support for Clang 18 has been officially dropped in #130142, we can now safely replace all instances of `__libcpp_{ctz, clz}` with `__count{l,r}_zero` (which internally call `__builtin_{ctzg, clzg}` and eliminate the fallback logic.
Closes #131179.
Diffstat (limited to 'libcxx/include/__algorithm')
| -rw-r--r-- | libcxx/include/__algorithm/sort.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/libcxx/include/__algorithm/sort.h b/libcxx/include/__algorithm/sort.h index d7bc1381ba5e..06cb5b8ce705 100644 --- a/libcxx/include/__algorithm/sort.h +++ b/libcxx/include/__algorithm/sort.h @@ -359,10 +359,10 @@ inline _LIBCPP_HIDE_FROM_ABI void __swap_bitmap_pos( // Swap one pair on each iteration as long as both bitsets have at least one // element for swapping. while (__left_bitset != 0 && __right_bitset != 0) { - difference_type __tz_left = __libcpp_ctz(__left_bitset); - __left_bitset = __libcpp_blsr(__left_bitset); - difference_type __tz_right = __libcpp_ctz(__right_bitset); - __right_bitset = __libcpp_blsr(__right_bitset); + difference_type __tz_left = std::__countr_zero(__left_bitset); + __left_bitset = std::__libcpp_blsr(__left_bitset); + difference_type __tz_right = std::__countr_zero(__right_bitset); + __right_bitset = std::__libcpp_blsr(__right_bitset); _Ops::iter_swap(__first + __tz_left, __last - __tz_right); } } @@ -458,7 +458,7 @@ inline _LIBCPP_HIDE_FROM_ABI void __swap_bitmap_pos_within( // Swap within the left side. Need to find set positions in the reverse // order. while (__left_bitset != 0) { - difference_type __tz_left = __detail::__block_size - 1 - __libcpp_clz(__left_bitset); + difference_type __tz_left = __detail::__block_size - 1 - std::__countl_zero(__left_bitset); __left_bitset &= (static_cast<uint64_t>(1) << __tz_left) - 1; _RandomAccessIterator __it = __first + __tz_left; if (__it != __lm1) { @@ -471,7 +471,7 @@ inline _LIBCPP_HIDE_FROM_ABI void __swap_bitmap_pos_within( // Swap within the right side. Need to find set positions in the reverse // order. while (__right_bitset != 0) { - difference_type __tz_right = __detail::__block_size - 1 - __libcpp_clz(__right_bitset); + difference_type __tz_right = __detail::__block_size - 1 - std::__countl_zero(__right_bitset); __right_bitset &= (static_cast<uint64_t>(1) << __tz_right) - 1; _RandomAccessIterator __it = __lm1 - __tz_right; if (__it != __first) { |
