Closed
Description
Looking more at the tuple-stress benchmark, @nnethercote and I were thinking that one way to speed it up -- and possibly others as well! -- would be to tweak the liveness code. Instead of computing the liveness of all variables, for the purposes of NLL we only need to compute the liveness for variables whose types include regions. We could use the same flag mechanism described in #52027 to modify the liveness code and skip those variables whose types do not have any free regions.
To do this, we'd have to modify the liveness code. I imagine something like this:
- We modify the liveness code so that it is parametric in some new index type. This index type would be
Local
if you are using all locals, but possibly something else otherwise. It would take some kind ofLocal -> Option<N>
map. - In the NLL code, we would walk the locals and make a dense map of those whose types include regions (using the same flags described in [nll] optimize tuple-stress benchmark by skipping visit of types that do not have regions #52027 to quickly test). We would also wind up with two vectors, one
IndexVec<Local, Option<RegionLocal>>
mapping to the compressed id, and oneIndexVec<RegionLocal, Local>
mapping back to the original id. - The liveness callbacks would be giving us
RegionLocal
which we would map back.