about summary refs log tree commit diff
path: root/library/core/src
diff options
context:
space:
mode:
authorChai T. Rex <ChaiTRex@users.noreply.github.com>2025-08-23 17:53:27 -0400
committerChai T. Rex <ChaiTRex@users.noreply.github.com>2025-08-29 21:51:10 -0400
commit2c21b884a59814836cbd9386492d9ba71039fc75 (patch)
tree3153d65368c3d459dbea467e5f7b308ebe711c5f /library/core/src
parent6ba0ce40941eee1ca02e9ba49c791ada5158747a (diff)
Optimize `.ilog({2,10})` to `.ilog{2,10}()`
Inform compiler of optimizations when the base is known at compile time
and there's a cheaper method available:

* `{integer}.checked_ilog(2)` -> `{integer}.checked_ilog2()`
* `{integer}.checked_ilog(10)` -> `{integer}.checked_ilog10()`
* `{integer}.ilog(2)` -> `{integer}.ilog2()`
* `{integer}.ilog(10)` -> `{integer}.ilog10()`
Diffstat (limited to 'library/core/src')
-rw-r--r--library/core/src/num/uint_macros.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/library/core/src/num/uint_macros.rs b/library/core/src/num/uint_macros.rs
index 10d9498d15e..acf4ca9a287 100644
--- a/library/core/src/num/uint_macros.rs
+++ b/library/core/src/num/uint_macros.rs
@@ -1491,6 +1491,20 @@ macro_rules! uint_impl {
                       without modifying the original"]
         #[inline]
         pub const fn checked_ilog(self, base: Self) -> Option<u32> {
+            // Inform compiler of optimizations when the base is known at
+            // compile time and there's a cheaper method available.
+            //
+            // Note: Like all optimizations, this is not guaranteed to be
+            // applied by the compiler. If you want those specific bases,
+            // use `.checked_ilog2()` or `.checked_ilog10()` directly.
+            if core::intrinsics::is_val_statically_known(base) {
+                if base == 2 {
+                    return self.checked_ilog2();
+                } else if base == 10 {
+                    return self.checked_ilog10();
+                }
+            }
+
             if self <= 0 || base <= 1 {
                 None
             } else if self < base {