diff options
| author | Chai T. Rex <ChaiTRex@users.noreply.github.com> | 2025-08-23 17:53:27 -0400 |
|---|---|---|
| committer | Chai T. Rex <ChaiTRex@users.noreply.github.com> | 2025-08-29 21:51:10 -0400 |
| commit | 2c21b884a59814836cbd9386492d9ba71039fc75 (patch) | |
| tree | 3153d65368c3d459dbea467e5f7b308ebe711c5f /library/core/src | |
| parent | 6ba0ce40941eee1ca02e9ba49c791ada5158747a (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.rs | 14 |
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 { |
