diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2024-04-06 10:49:31 -0400 | 
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2024-04-06 10:49:31 -0400 | 
| commit | 668b3188abc1683bd87ddb6245f2613478f559c9 (patch) | |
| tree | ca64cd9226e7d70d8860ee458ef66dc9db025e6f /compiler/rustc_query_system/src/query | |
| parent | 01f7f3a1ff983ddfe485bbd9cedd59c378fdaceb (diff) | |
| download | rust-668b3188abc1683bd87ddb6245f2613478f559c9.tar.gz rust-668b3188abc1683bd87ddb6245f2613478f559c9.zip  | |
Remove sharding for VecCache
This sharding is never used (per the comment in code). If we re-add sharding at some point in the future this is cheap to restore, but for now no need for the extra complexity.
Diffstat (limited to 'compiler/rustc_query_system/src/query')
| -rw-r--r-- | compiler/rustc_query_system/src/query/caches.rs | 19 | 
1 files changed, 6 insertions, 13 deletions
diff --git a/compiler/rustc_query_system/src/query/caches.rs b/compiler/rustc_query_system/src/query/caches.rs index c3fc036aed3..acc29b67ccc 100644 --- a/compiler/rustc_query_system/src/query/caches.rs +++ b/compiler/rustc_query_system/src/query/caches.rs @@ -101,7 +101,7 @@ where } pub struct VecCache<K: Idx, V> { - cache: Sharded<IndexVec<K, Option<(V, DepNodeIndex)>>>, + cache: Lock<IndexVec<K, Option<(V, DepNodeIndex)>>>, } impl<K: Idx, V> Default for VecCache<K, V> { @@ -120,24 +120,20 @@ where #[inline(always)] fn lookup(&self, key: &K) -> Option<(V, DepNodeIndex)> { - // FIXME: lock_shard_by_hash will use high bits which are usually zero in the index() passed - // here. This makes sharding essentially useless, always selecting the zero'th shard. - let lock = self.cache.lock_shard_by_hash(key.index() as u64); + let lock = self.cache.lock(); if let Some(Some(value)) = lock.get(*key) { Some(*value) } else { None } } #[inline] fn complete(&self, key: K, value: V, index: DepNodeIndex) { - let mut lock = self.cache.lock_shard_by_hash(key.index() as u64); + let mut lock = self.cache.lock(); lock.insert(key, (value, index)); } fn iter(&self, f: &mut dyn FnMut(&Self::Key, &Self::Value, DepNodeIndex)) { - for shard in self.cache.lock_shards() { - for (k, v) in shard.iter_enumerated() { - if let Some(v) = v { - f(&k, &v.0, v.1); - } + for (k, v) in self.cache.lock().iter_enumerated() { + if let Some(v) = v { + f(&k, &v.0, v.1); } } } @@ -149,9 +145,6 @@ pub struct DefIdCache<V> { /// /// The second element of the tuple is the set of keys actually present in the IndexVec, used /// for faster iteration in `iter()`. - // FIXME: This may want to be sharded, like VecCache. However *how* to shard an IndexVec isn't - // super clear; VecCache is effectively not sharded today (see FIXME there). For now just omit - // that complexity here. local: Lock<(IndexVec<DefIndex, Option<(V, DepNodeIndex)>>, Vec<DefIndex>)>, foreign: DefaultCache<DefId, V>, }  | 
