Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce ChunkedBitSet and use it for some dataflow analyses. #93984

Merged
merged 1 commit into from
Feb 23, 2022

Commits on Feb 22, 2022

  1. Introduce ChunkedBitSet and use it for some dataflow analyses.

    This reduces peak memory usage significantly for some programs with very
    large functions, such as:
    - `keccak`, `unicode_normalization`, and `match-stress-enum`, from
      the `rustc-perf` benchmark suite;
    - `http-0.2.6` from crates.io.
    
    The new type is used in the analyses where the bitsets can get huge
    (e.g. 10s of thousands of bits): `MaybeInitializedPlaces`,
    `MaybeUninitializedPlaces`, and `EverInitializedPlaces`.
    
    Some refactoring was required in `rustc_mir_dataflow`. All existing
    analysis domains are either `BitSet` or a trivial wrapper around
    `BitSet`, and access in a few places is done via `Borrow<BitSet>` or
    `BorrowMut<BitSet>`. Now that some of these domains are `ClusterBitSet`,
    that no longer works. So this commit replaces the `Borrow`/`BorrowMut`
    usage with a new trait `BitSetExt` containing the needed bitset
    operations. The impls just forward these to the underlying bitset type.
    This required fiddling with trait bounds in a few places.
    
    The commit also:
    - Moves `static_assert_size` from `rustc_data_structures` to
      `rustc_index` so it can be used in the latter; the former now
      re-exports it so existing users are unaffected.
    - Factors out some common "clear excess bits in the final word"
      functionality in `bit_set.rs`.
    - Uses `fill` in a few places instead of loops.
    nnethercote committed Feb 22, 2022
    Configuration menu
    Copy the full SHA
    36b495f View commit details
    Browse the repository at this point in the history