Somehow llvm is able to optimize this version of Vec::reserve
into dramatically faster than the old version. In micro-benchmarks
this was 2-10 times faster. It also shaved 14 minutes off of
rust's compile times.
Closes #19281.
Some(new_cap) => {
let amort_cap = new_cap.next_power_of_two();
// next_power_of_two will overflow to exactly 0 for really big capacities
- if amort_cap == 0 {
- self.grow_capacity(new_cap);
+ let cap = if amort_cap == 0 {
+ new_cap
} else {
- self.grow_capacity(amort_cap);
- }
+ amort_cap
+ };
+ self.grow_capacity(cap)
}
}
}