rust/library/alloc/src
bors c24c9067ee Auto merge of #88060 - TennyZhuang:optimize-vec-retain, r=dtolnay
Optimize unnecessary check in Vec::retain

The function `vec::Vec::retain` only have two stages:

1. Nothing was deleted.
2. Some elements were deleted.

Here is an unnecessary check `if g.deleted_cnt > 0` in the loop, and it's difficult for compiler to optimize it. I split the loop into two stages manully and keep the code clean using const generics.

I write a special but common bench case for this optimization. I call retain on vec but keep all elements.

Before and after this optimization:

```
test vec::bench_retain_whole_100000                      ... bench:      84,803 ns/iter (+/- 17,314)
```

```
test vec::bench_retain_whole_100000                      ... bench:      42,638 ns/iter (+/- 16,910)
```

The result is expected, there are two `if`s before the optimization and one `if` after.
2021-10-03 06:24:06 +00:00
..
alloc Rename AllocRef to Allocator and (de)alloc to (de)allocate 2020-12-04 14:47:15 +01:00
collections Make diangostic item names consistent 2021-10-02 19:38:19 -05:00
prelude mv std libs to library/ 2020-07-27 19:51:13 -05:00
raw_vec Rename AllocRef to Allocator and (de)alloc to (de)allocate 2020-12-04 14:47:15 +01:00
rc Re-stabilize Weak::as_ptr &friends for unsized T 2021-01-06 19:30:22 -05:00
sync Rollup merge of #80764 - CAD97:weak-unsized-as-ptr-again, r=RalfJung 2021-01-16 17:29:56 +00:00
vec Auto merge of #88060 - TennyZhuang:optimize-vec-retain, r=dtolnay 2021-10-03 06:24:06 +00:00
alloc.rs Use Rvalue::ShallowInitBox for box expression 2021-09-25 01:08:41 +01:00
borrow.rs Const Deref 2021-09-15 03:06:53 +00:00
boxed.rs Fix missing no_global_oom_handling cfg-gating 2021-09-17 03:53:18 +01:00
fmt.rs Apply 16 commits (squashed) 2021-09-25 20:04:35 +02:00
lib.rs Bump stage0 compiler to 1.56 2021-09-08 20:51:05 -04:00
macros.rs Remove alloc/malloc/calloc/realloc doc aliases 2021-06-30 19:59:39 +01:00
raw_vec.rs Fix a typo in raw_vec 2021-08-28 20:20:22 +02:00
rc.rs Auto merge of #89144 - sexxi-goose:insig_stdlib, r=nikomatsakis 2021-09-26 19:36:00 +00:00
slice.rs Use HTTPS links where possible 2021-06-23 16:26:46 -04:00
str.rs Use HTTPS links where possible 2021-06-23 16:26:46 -04:00
string.rs Make diangostic item names consistent 2021-10-02 19:38:19 -05:00
sync.rs Apply 16 commits (squashed) 2021-09-25 20:04:35 +02:00
task.rs Document From implementations for Waker and RawWaker 2021-04-22 14:16:33 -07:00
tests.rs Fix alloc::test::test_show 2021-04-21 15:45:41 +02:00