[libcxx-commits] [libcxx] [libc++] Optimize `to_chars` for bases 2, 8 and 16 (PR #223222)
via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Sep 13 02:36:59 PDT 2026
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions h -- libcxx/include/__charconv/to_chars_integral.h --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/libcxx/include/__charconv/to_chars_integral.h b/libcxx/include/__charconv/to_chars_integral.h
index 3fbbd6a8f..104319abe 100644
--- a/libcxx/include/__charconv/to_chars_integral.h
+++ b/libcxx/include/__charconv/to_chars_integral.h
@@ -140,7 +140,7 @@ struct _LIBCPP_HIDDEN __integral<2> {
constexpr auto __c0_offset_mask = uint64_t{0x3030'3030'3030'3030};
while (__value >= __divisor) {
const auto __digits = __builtin_elementwise_pdep(static_cast<uint64_t>(__value), __dep_mask);
- auto __cs = __digits | __c0_offset_mask;
+ auto __cs = __digits | __c0_offset_mask;
#ifdef _LIBCPP_LITTLE_ENDIAN
__cs = __builtin_bswap64(__cs);
#endif
@@ -150,11 +150,11 @@ struct _LIBCPP_HIDDEN __integral<2> {
__builtin_memcpy(__p, __chars.__data, __ncs_per_word);
}
const auto __digits = __builtin_elementwise_pdep(static_cast<uint64_t>(__value), __dep_mask);
- auto __cs = __digits | __c0_offset_mask;
+ auto __cs = __digits | __c0_offset_mask;
#ifdef _LIBCPP_LITTLE_ENDIAN
__cs = __builtin_bswap64(__cs);
#endif
- const auto __chars = __builtin_bit_cast(__chars_storage<__ncs_per_word>, __cs);
+ const auto __chars = __builtin_bit_cast(__chars_storage<__ncs_per_word>, __cs);
const auto __remaining = static_cast<size_t>(__p - __first);
__builtin_memcpy(__first, __chars.__data + __ncs_per_word - __remaining, __remaining);
return {__last, errc(0)};
@@ -177,8 +177,8 @@ struct _LIBCPP_HIDDEN __integral<8> {
int __n = __width(__value);
if (__n > __cap)
return {__last, errc::value_too_large};
- __last = __first + __n;
- char* __p = __last;
+ __last = __first + __n;
+ char* __p = __last;
constexpr auto __ncs_per_word = 8u;
constexpr auto __divisor = 1u << (3 * __ncs_per_word);
@@ -186,7 +186,7 @@ struct _LIBCPP_HIDDEN __integral<8> {
constexpr auto __c0_offset_mask = uint64_t{0x3030'3030'3030'3030};
while (__value >= __divisor) {
const auto __digits = __builtin_elementwise_pdep(static_cast<uint64_t>(__value), __dep_mask);
- auto __cs = __digits | __c0_offset_mask;
+ auto __cs = __digits | __c0_offset_mask;
#ifdef _LIBCPP_LITTLE_ENDIAN
__cs = __builtin_bswap64(__cs);
#endif
@@ -196,11 +196,11 @@ struct _LIBCPP_HIDDEN __integral<8> {
__builtin_memcpy(__p, __chars.__data, __ncs_per_word);
}
const auto __digits = __builtin_elementwise_pdep(static_cast<uint64_t>(__value), __dep_mask);
- auto __cs = __digits | __c0_offset_mask;
+ auto __cs = __digits | __c0_offset_mask;
#ifdef _LIBCPP_LITTLE_ENDIAN
__cs = __builtin_bswap64(__cs);
#endif
- const auto __chars = __builtin_bit_cast(__chars_storage<__ncs_per_word>, __cs);
+ const auto __chars = __builtin_bit_cast(__chars_storage<__ncs_per_word>, __cs);
const auto __remaining = static_cast<size_t>(__p - __first);
__builtin_memcpy(__first, __chars.__data + __ncs_per_word - __remaining, __remaining);
return {__last, errc(0)};
@@ -235,8 +235,8 @@ struct _LIBCPP_HIDDEN __integral<16> {
constexpr auto __c0_offset_mask = uint64_t{0x3030'3030'3030'3030};
while (__value >= __divisor) {
const auto __digits = __builtin_elementwise_pdep(static_cast<uint64_t>(__value), __dep_mask);
- const auto __alpha = ((__digits + __add_six_mask) & __high_bit_mask) >> 4;
- auto __cs = __digits + __c0_offset_mask + __alpha * 0x27;
+ const auto __alpha = ((__digits + __add_six_mask) & __high_bit_mask) >> 4;
+ auto __cs = __digits + __c0_offset_mask + __alpha * 0x27;
#ifdef _LIBCPP_LITTLE_ENDIAN
__cs = __builtin_bswap64(__cs);
#endif
@@ -246,8 +246,8 @@ struct _LIBCPP_HIDDEN __integral<16> {
__builtin_memcpy(__p, __chars.__data, __ncs_per_word);
}
const auto __digits = __builtin_elementwise_pdep(static_cast<uint64_t>(__value), __dep_mask);
- const auto __alpha = ((__digits + __add_six_mask) & __high_bit_mask) >> 4;
- auto __cs = __digits + __c0_offset_mask + __alpha * 0x27;
+ const auto __alpha = ((__digits + __add_six_mask) & __high_bit_mask) >> 4;
+ auto __cs = __digits + __c0_offset_mask + __alpha * 0x27;
#ifdef _LIBCPP_LITTLE_ENDIAN
__cs = __builtin_bswap64(__cs);
#endif
``````````
</details>
https://github.com/llvm/llvm-project/pull/223222
More information about the libcxx-commits
mailing list