diff --git a/library/core/src/slice/sort.rs b/library/core/src/slice/sort.rs index 990540f55f5..8f02a446670 100644 --- a/library/core/src/slice/sort.rs +++ b/library/core/src/slice/sort.rs @@ -198,7 +198,12 @@ where } // Choose the greater child. - child += (child + 1 < v.len() && is_less(&v[child], &v[child + 1])) as usize; + if child + 1 < v.len() { + // We need a branch to be sure not to out-of-bounds index, + // but it's highly predictable. The comparison, however, + // is better done branchless, especially for primitives. + child += is_less(&v[child], &v[child + 1]) as usize; + } // Stop if the invariant holds at `node`. if !is_less(&v[node], &v[child]) {