mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Avoid unwrap_or_else
in RawVec::allocate_in
.
This reduces the amount of LLVM IR generated by up to 1 or 2%.
This commit is contained in:
parent
c977b8775d
commit
3f79d2f33e
@ -172,10 +172,21 @@ impl<T, A: AllocRef> RawVec<T, A> {
|
|||||||
if mem::size_of::<T>() == 0 {
|
if mem::size_of::<T>() == 0 {
|
||||||
Self::new_in(alloc)
|
Self::new_in(alloc)
|
||||||
} else {
|
} else {
|
||||||
let layout = Layout::array::<T>(capacity).unwrap_or_else(|_| capacity_overflow());
|
// We avoid `unwrap_or_else` here because it bloats the amount of
|
||||||
alloc_guard(layout.size()).unwrap_or_else(|_| capacity_overflow());
|
// LLVM IR generated.
|
||||||
|
let layout = match Layout::array::<T>(capacity) {
|
||||||
|
Ok(layout) => layout,
|
||||||
|
Err(_) => capacity_overflow(),
|
||||||
|
};
|
||||||
|
match alloc_guard(layout.size()) {
|
||||||
|
Ok(_) => {}
|
||||||
|
Err(_) => capacity_overflow(),
|
||||||
|
}
|
||||||
|
let memory = match alloc.alloc(layout, init) {
|
||||||
|
Ok(memory) => memory,
|
||||||
|
Err(_) => handle_alloc_error(layout),
|
||||||
|
};
|
||||||
|
|
||||||
let memory = alloc.alloc(layout, init).unwrap_or_else(|_| handle_alloc_error(layout));
|
|
||||||
Self {
|
Self {
|
||||||
ptr: unsafe { Unique::new_unchecked(memory.ptr.cast().as_ptr()) },
|
ptr: unsafe { Unique::new_unchecked(memory.ptr.cast().as_ptr()) },
|
||||||
cap: Self::capacity_from_bytes(memory.size),
|
cap: Self::capacity_from_bytes(memory.size),
|
||||||
|
Loading…
Reference in New Issue
Block a user