1
Fork 0

Auto merge of #86383 - shamatar:slice_len_lowering, r=bjorn3

Add MIR pass to lower call to `core::slice::len` into `Len` operand

During some larger experiment with range analysis I've found that code like `let l = slice.len()` produces different MIR then one found in bound checks. This optimization pass replaces terminators that are calls to `core::slice::len` with just a MIR operand and Goto terminator.

It uses some heuristics to remove the outer borrow that is made to call `core::slice::len`, but I assume it can be eliminated, just didn't find how.

Would like to express my gratitude to `@oli-obk` who helped me a lot on Zullip
This commit is contained in:
bors 2021-06-21 22:24:13 +00:00
commit 4573a4a879
8 changed files with 185 additions and 1 deletions

View file

@ -680,6 +680,7 @@ symbols! {
lateout,
lazy_normalization_consts,
le,
len,
let_chains,
lhs,
lib,
@ -1147,6 +1148,7 @@ symbols! {
skip,
slice,
slice_alloc,
slice_len_fn,
slice_patterns,
slice_u8,
slice_u8_alloc,