about summary refs log tree commit diff
path: root/compiler/rustc_query_system/src/query
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2024-04-06 10:49:31 -0400
committerMark Rousskov <mark.simulacrum@gmail.com>2024-04-06 10:49:31 -0400
commit668b3188abc1683bd87ddb6245f2613478f559c9 (patch)
treeca64cd9226e7d70d8860ee458ef66dc9db025e6f /compiler/rustc_query_system/src/query
parent01f7f3a1ff983ddfe485bbd9cedd59c378fdaceb (diff)
downloadrust-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.rs19
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>,
 }