diff options
| author | bors <bors@rust-lang.org> | 2023-03-25 17:06:43 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-03-25 17:06:43 +0000 |
| commit | 2d429f3064cb67710fe64dee293329089871d92b (patch) | |
| tree | c3218c73b866c054ab84911c6189be2138d717ff /compiler | |
| parent | 96bd50dd47b645efa52d1312b9cc32e507d9cd76 (diff) | |
| parent | 29c11327c703f59ad39d5840768864106b7c27b7 (diff) | |
| download | rust-2d429f3064cb67710fe64dee293329089871d92b.tar.gz rust-2d429f3064cb67710fe64dee293329089871d92b.zip | |
Auto merge of #109458 - Nilstrieb:smol-cute-little-bits, r=wesleywiser
Use `SmallVec` in bitsets This doesn't increase their size and means that we don't have to heap allocate for small sets.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_index/src/bit_set.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/compiler/rustc_index/src/bit_set.rs b/compiler/rustc_index/src/bit_set.rs index cbf169afb18..eba5b3ed882 100644 --- a/compiler/rustc_index/src/bit_set.rs +++ b/compiler/rustc_index/src/bit_set.rs @@ -1,5 +1,6 @@ use crate::vec::{Idx, IndexVec}; use arrayvec::ArrayVec; +use smallvec::{smallvec, SmallVec}; use std::fmt; use std::iter; use std::marker::PhantomData; @@ -111,7 +112,7 @@ macro_rules! bit_relations_inherent_impls { #[derive(Eq, PartialEq, Hash, Decodable, Encodable)] pub struct BitSet<T> { domain_size: usize, - words: Vec<Word>, + words: SmallVec<[Word; 2]>, marker: PhantomData<T>, } @@ -127,14 +128,15 @@ impl<T: Idx> BitSet<T> { #[inline] pub fn new_empty(domain_size: usize) -> BitSet<T> { let num_words = num_words(domain_size); - BitSet { domain_size, words: vec![0; num_words], marker: PhantomData } + BitSet { domain_size, words: smallvec![0; num_words], marker: PhantomData } } /// Creates a new, filled bitset with a given `domain_size`. #[inline] pub fn new_filled(domain_size: usize) -> BitSet<T> { let num_words = num_words(domain_size); - let mut result = BitSet { domain_size, words: vec![!0; num_words], marker: PhantomData }; + let mut result = + BitSet { domain_size, words: smallvec![!0; num_words], marker: PhantomData }; result.clear_excess_bits(); result } @@ -1571,7 +1573,7 @@ impl<T: Idx> From<BitSet<T>> for GrowableBitSet<T> { pub struct BitMatrix<R: Idx, C: Idx> { num_rows: usize, num_columns: usize, - words: Vec<Word>, + words: SmallVec<[Word; 2]>, marker: PhantomData<(R, C)>, } @@ -1584,7 +1586,7 @@ impl<R: Idx, C: Idx> BitMatrix<R, C> { BitMatrix { num_rows, num_columns, - words: vec![0; num_rows * words_per_row], + words: smallvec![0; num_rows * words_per_row], marker: PhantomData, } } |
