Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#88834 - the8472:char-count, r=joshtriplett
optimize str::from_utf8() validation when slice contains multibyte chars and str.chars().count() in all cases The change shows small but consistent improvements across several x86 target feature levels. I also tried to optimize counting with `slice.as_chunks` but that yielded more inconsistent results, bigger improvements for some optimization levels, lesser ones in others. ``` old, -O2, x86-64 test str::str_char_count_emoji ... bench: 1,924 ns/iter (+/- 26) test str::str_char_count_lorem ... bench: 879 ns/iter (+/- 12) test str::str_char_count_lorem_short ... bench: 5 ns/iter (+/- 0) new, -O2, x86-64 test str::str_char_count_emoji ... bench: 1,878 ns/iter (+/- 21) test str::str_char_count_lorem ... bench: 851 ns/iter (+/- 11) test str::str_char_count_lorem_short ... bench: 4 ns/iter (+/- 0) old, -O2, x86-64-v2 test str::str_char_count_emoji ... bench: 1,477 ns/iter (+/- 46) test str::str_char_count_lorem ... bench: 675 ns/iter (+/- 15) test str::str_char_count_lorem_short ... bench: 5 ns/iter (+/- 0) new, -O2, x86-64-v2 test str::str_char_count_emoji ... bench: 1,323 ns/iter (+/- 39) test str::str_char_count_lorem ... bench: 593 ns/iter (+/- 18) test str::str_char_count_lorem_short ... bench: 4 ns/iter (+/- 0) old, -O2, x86-64-v3 test str::str_char_count_emoji ... bench: 748 ns/iter (+/- 7) test str::str_char_count_lorem ... bench: 348 ns/iter (+/- 2) test str::str_char_count_lorem_short ... bench: 5 ns/iter (+/- 0) new, -O2, x86-64-v3 test str::str_char_count_emoji ... bench: 650 ns/iter (+/- 4) test str::str_char_count_lorem ... bench: 301 ns/iter (+/- 1) test str::str_char_count_lorem_short ... bench: 5 ns/iter (+/- 0) ``` and for the multibyte-char string validation: ``` old, -O2, x86-64 test str::str_validate_emoji ... bench: 4,606 ns/iter (+/- 64) new, -O2, x86-64 test str::str_validate_emoji ... bench: 3,837 ns/iter (+/- 60) ```
- alloc-error-handler
- (rust-lang/rust#88834)
- anon-const-scope
- (rust-lang/rust#88834)
- ast-docs
- (rust-lang/rust#88834)
- dip-safety
- (rust-lang/rust#108684, rust-lang/rust#88834)
- icuup
- (rust-lang/rust#88834)
- listup
- (rust-lang/rust#88834)
- rollup-0635q2g
- (rust-lang/rust#88834)
- rollup-3dw7zsm
- (rust-lang/rust#88834)
- rollup-41uoxb8
- (rust-lang/rust#88834)
- rollup-4ct0y2r
- (rust-lang/rust#88834)
- rollup-4o3hxxq
- (rust-lang/rust#88834)
- rollup-55sfaad
- (rust-lang/rust#88834)
- rollup-5692n1o
- (rust-lang/rust#88834)
- rollup-5f4dpee
- (rust-lang/rust#88834)
- rollup-5r957ad
- (rust-lang/rust#88834)
- rollup-5zo5ki0
- (rust-lang/rust#88834)
- rollup-6binjbz
- (rust-lang/rust#88834)
- rollup-709fui6
- (rust-lang/rust#88834)
- rollup-7xa8hii
- (rust-lang/rust#88834)
- rollup-8c1t9q6
- (rust-lang/rust#88834)
- rollup-8vpj22m
- (rust-lang/rust#88834)
- rollup-9e551p5
- (rust-lang/rust#88834)
- rollup-9lf6ddm
- (rust-lang/rust#88834)
- rollup-9wecv2i
- (rust-lang/rust#88834)
- rollup-b7ylsec
- (rust-lang/rust#88834)
- rollup-bclqgyd
- (rust-lang/rust#88834)
- rollup-bzqapzs
- (rust-lang/rust#88834)
- rollup-cui4g1a
- (rust-lang/rust#88834)
- rollup-gffpdht
- (rust-lang/rust#88834)
- rollup-hhic9lv
- (rust-lang/rust#88834)
- rollup-ib3q6jf
- (rust-lang/rust#88834)
- rollup-j02jxyt
- (rust-lang/rust#88834)
- rollup-kgvxyqg
- (rust-lang/rust#88834)
- rollup-kul0c2d
- (rust-lang/rust#88834)
- rollup-l2dwxm5
- (rust-lang/rust#88834)
- rollup-ligc835
- (rust-lang/rust#88834)
- rollup-lkn2t7f
- (rust-lang/rust#88834)
- rollup-m77mvk8
- (rust-lang/rust#88834)
- rollup-mhkyc16
- (rust-lang/rust#88834)
- rollup-mobivjc
- (rust-lang/rust#88834)
- rollup-obz5ycp
- (rust-lang/rust#88834)
- rollup-oe3phsw
- (rust-lang/rust#88834)
- rollup-owr4dnn
- (rust-lang/rust#88834)
- rollup-qo6s1ww
- (rust-lang/rust#88834)
- rollup-qzm0u15
- (rust-lang/rust#88834)
- rollup-rh1tfum
- (rust-lang/rust#88834)
- rollup-sf8aapl
- (rust-lang/rust#88834)
- rollup-uj7409j
- (rust-lang/rust#88834)
- rollup-waotqdn
- (rust-lang/rust#88834)
- rollup-xjtyw1f
- (rust-lang/rust#88834)
- rollup-yvsx5hh
- (rust-lang/rust#88834)
- rollup-z6z6l2v
- (rust-lang/rust#88834)
- rollup-zanstud
- (rust-lang/rust#88834)
- rustdoc-👻👻👻
- (rust-lang/rust#88834)
- vec-as-mut-ptr-stacked-borrow
- (rust-lang/rust#88834)