Optimize `absl::Duration` division and modulo: Allow the compiler to inline `time_internal::IDivDuration`, by splitting the slow path to a separate function. With that change, the compiler can inline the fast path. This is specially important in the context of `Duration::operator%=`, because it allows proving that the return value is unused, therefore avoiding expensive multiplies and divides (e.g. `*q = num_hi / den_hi;`). ``` name old cpu/op new cpu/op delta BM_Duration_Modulo 23.1ns ± 0% 22.5ns ± 0% -2.42% (p=0.000 n=20+16) BM_Duration_Modulo_FastPath 7.05ns ± 0% 4.85ns ± 0% -31.17% (p=0.000 n=20+20) name old time/op new time/op delta BM_Duration_Modulo 23.1ns ± 0% 22.6ns ± 0% -2.43% (p=0.000 n=20+16) BM_Duration_Modulo_FastPath 7.06ns ± 0% 4.86ns ± 0% -31.18% (p=0.000 n=20+20) name old INSTRUCTIONS/op new INSTRUCTIONS/op delta BM_Duration_Modulo 188 ± 0% 178 ± 0% -5.32% (p=0.000 n=20+20) BM_Duration_Modulo_FastPath 84.0 ± 0% 62.0 ± 0% -26.19% (p=0.000 n=20+20) name old CYCLES/op new CYCLES/op delta BM_Duration_Modulo 73.8 ± 0% 72.1 ± 0% -2.27% (p=0.000 n=19+20) BM_Duration_Modulo_FastPath 22.5 ± 0% 15.5 ± 0% -31.13% (p=0.000 n=19+20) ``` Note: We don't need to expose `absl::time_internal::IDivDuration` at all given that we have a public `absl::IDivDuration`. PiperOrigin-RevId: 610710635 Change-Id: Ief7c3d5b1c000b397d931e9249edcaef96e7151e
| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| algorithm | Loading commit data... | |
| base | Loading commit data... | |
| cleanup | Loading commit data... | |
| container | Loading commit data... | |
| copts | Loading commit data... | |
| crc | Loading commit data... | |
| debugging | Loading commit data... | |
| flags | Loading commit data... | |
| functional | Loading commit data... | |
| hash | Loading commit data... | |
| log | Loading commit data... | |
| memory | Loading commit data... | |
| meta | Loading commit data... | |
| numeric | Loading commit data... | |
| profiling | Loading commit data... | |
| random | Loading commit data... | |
| status | Loading commit data... | |
| strings | Loading commit data... | |
| synchronization | Loading commit data... | |
| time | Loading commit data... | |
| types | Loading commit data... | |
| utility | Loading commit data... | |
| BUILD.bazel | Loading commit data... | |
| CMakeLists.txt | Loading commit data... | |
| abseil.podspec.gen.py | Loading commit data... |