From e20ea0b67dbd5428bc3d355862692f1efecd378c Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Fri, 5 Dec 2014 11:29:15 -0800 Subject: [PATCH] collections: dramatically speed up Vec::reserve with magic 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. --- src/libcollections/vec.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 2396cf8cec6..34d9397742d 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -688,11 +688,12 @@ impl Vec { 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) } } }