Auto merge of #122976 - caibear:optimize_reserve_for_push, r=cuviper
Remove len argument from RawVec::reserve_for_push Removes `RawVec::reserve_for_push`'s `len` argument since it's always the same as capacity. Also makes `Vec::insert` use `RawVec::reserve_for_push`.
This commit is contained in:
commit
877d36b192
@ -2087,7 +2087,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
|
||||
// buffer without it being full emerge
|
||||
debug_assert!(self.is_full());
|
||||
let old_cap = self.capacity();
|
||||
self.buf.reserve_for_push(old_cap);
|
||||
self.buf.grow_one();
|
||||
unsafe {
|
||||
self.handle_capacity_increase(old_cap);
|
||||
}
|
||||
|
@ -345,12 +345,12 @@ impl<T, A: Allocator> RawVec<T, A> {
|
||||
}
|
||||
}
|
||||
|
||||
/// A specialized version of `reserve()` used only by the hot and
|
||||
/// oft-instantiated `Vec::push()`, which does its own capacity check.
|
||||
/// A specialized version of `self.reserve(len, 1)` which requires the
|
||||
/// caller to ensure `len == self.capacity()`.
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
#[inline(never)]
|
||||
pub fn reserve_for_push(&mut self, len: usize) {
|
||||
if let Err(err) = self.grow_amortized(len, 1) {
|
||||
pub fn grow_one(&mut self) {
|
||||
if let Err(err) = self.grow_amortized(self.cap.0, 1) {
|
||||
handle_error(err);
|
||||
}
|
||||
}
|
||||
|
@ -1547,7 +1547,7 @@ impl<T, A: Allocator> Vec<T, A> {
|
||||
|
||||
// space for the new element
|
||||
if len == self.buf.capacity() {
|
||||
self.reserve(1);
|
||||
self.buf.grow_one();
|
||||
}
|
||||
|
||||
unsafe {
|
||||
@ -1967,7 +1967,7 @@ impl<T, A: Allocator> Vec<T, A> {
|
||||
// This will panic or abort if we would allocate > isize::MAX bytes
|
||||
// or if the length increment would overflow for zero-sized types.
|
||||
if self.len == self.buf.capacity() {
|
||||
self.buf.reserve_for_push(self.len);
|
||||
self.buf.grow_one();
|
||||
}
|
||||
unsafe {
|
||||
let end = self.as_mut_ptr().add(self.len);
|
||||
|
@ -5,10 +5,10 @@
|
||||
#[no_mangle]
|
||||
// CHECK-LABEL: @noop(
|
||||
pub fn noop(v: &mut Vec<u8>) {
|
||||
// CHECK-NOT: reserve_for_push
|
||||
// CHECK-NOT: grow_one
|
||||
// CHECK-NOT: call
|
||||
// CHECK: tail call void @llvm.assume
|
||||
// CHECK-NOT: reserve_for_push
|
||||
// CHECK-NOT: grow_one
|
||||
// CHECK-NOT: call
|
||||
// CHECK: ret
|
||||
if let Some(x) = v.pop() {
|
||||
@ -19,6 +19,6 @@ pub fn noop(v: &mut Vec<u8>) {
|
||||
#[no_mangle]
|
||||
// CHECK-LABEL: @push_byte(
|
||||
pub fn push_byte(v: &mut Vec<u8>) {
|
||||
// CHECK: call {{.*}}reserve_for_push
|
||||
// CHECK: call {{.*}}grow_one
|
||||
v.push(3);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user