Skip to content

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

@nikomatsakis

Description

@nikomatsakis
Contributor

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.

Activity

added
T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
NLL-performantWorking towards the "performance is good" goal
on Jul 3, 2018
added
E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.
on Jul 3, 2018
nikomatsakis

nikomatsakis commented on Jul 3, 2018

@nikomatsakis
ContributorAuthor

There are some loose mentoring instructions here. If you'd like more details, pop in on Zulip and ask me some questions.

Dylan-DPC-zz

Dylan-DPC-zz commented on Jul 4, 2018

@Dylan-DPC-zz

@nikomatsakis can do this 👍

nikomatsakis

nikomatsakis commented on Jul 4, 2018

@nikomatsakis
ContributorAuthor

@Dylan-DPC awesome! let me know how it goes. I'd call this pretty high priority, since right now tuple-stress stands at a 16000% overhead. =)

nikomatsakis

nikomatsakis commented on Jul 4, 2018

@nikomatsakis
ContributorAuthor

BTW if you have any questions please join us on Zulip and ask them in #wg-nll

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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

        Participants

        @nikomatsakis@Dylan-DPC-zz

        Issue actions

          [nll] only compute liveness for variables whose types include regions · Issue #52034 · rust-lang/rust