Skip to content

[nll] only compute liveness for variables whose types include regions #52034

Closed
@nikomatsakis

Description

@nikomatsakis

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 of Local -> 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 one IndexVec<RegionLocal, Local> mapping back to the original id.
  • The liveness callbacks would be giving us RegionLocal which we would map back.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-NLLArea: Non-lexical lifetimes (NLL)E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.NLL-performantWorking towards the "performance is good" goalT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions