Rollup merge of #137701 - cuviper:sharded-hashtable, r=fmease
Convert `ShardedHashMap` to use `hashbrown::HashTable` The `hash_raw_entry` feature (#56167) has finished fcp-close, so the compiler should stop using it to allow its removal. Several `Sharded` maps were using raw entries to avoid re-hashing between shard and map lookup, and we can do that with `hashbrown::HashTable` instead.
This commit is contained in:
commit
4ffbc32f17
10 changed files with 109 additions and 66 deletions
|
@ -452,12 +452,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
}
|
||||
let id = self.alloc_map.reserve();
|
||||
debug!("creating alloc {:?} with id {id:?}", alloc_salt.0);
|
||||
let had_previous = self
|
||||
.alloc_map
|
||||
.to_alloc
|
||||
.lock_shard_by_value(&id)
|
||||
.insert(id, alloc_salt.0.clone())
|
||||
.is_some();
|
||||
let had_previous = self.alloc_map.to_alloc.insert(id, alloc_salt.0.clone()).is_some();
|
||||
// We just reserved, so should always be unique.
|
||||
assert!(!had_previous);
|
||||
dedup.insert(alloc_salt, id);
|
||||
|
@ -510,7 +505,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
/// local dangling pointers and allocations in constants/statics.
|
||||
#[inline]
|
||||
pub fn try_get_global_alloc(self, id: AllocId) -> Option<GlobalAlloc<'tcx>> {
|
||||
self.alloc_map.to_alloc.lock_shard_by_value(&id).get(&id).cloned()
|
||||
self.alloc_map.to_alloc.get(&id)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -529,9 +524,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
/// Freezes an `AllocId` created with `reserve` by pointing it at an `Allocation`. Trying to
|
||||
/// call this function twice, even with the same `Allocation` will ICE the compiler.
|
||||
pub fn set_alloc_id_memory(self, id: AllocId, mem: ConstAllocation<'tcx>) {
|
||||
if let Some(old) =
|
||||
self.alloc_map.to_alloc.lock_shard_by_value(&id).insert(id, GlobalAlloc::Memory(mem))
|
||||
{
|
||||
if let Some(old) = self.alloc_map.to_alloc.insert(id, GlobalAlloc::Memory(mem)) {
|
||||
bug!("tried to set allocation ID {id:?}, but it was already existing as {old:#?}");
|
||||
}
|
||||
}
|
||||
|
@ -539,11 +532,8 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
/// Freezes an `AllocId` created with `reserve` by pointing it at a static item. Trying to
|
||||
/// call this function twice, even with the same `DefId` will ICE the compiler.
|
||||
pub fn set_nested_alloc_id_static(self, id: AllocId, def_id: LocalDefId) {
|
||||
if let Some(old) = self
|
||||
.alloc_map
|
||||
.to_alloc
|
||||
.lock_shard_by_value(&id)
|
||||
.insert(id, GlobalAlloc::Static(def_id.to_def_id()))
|
||||
if let Some(old) =
|
||||
self.alloc_map.to_alloc.insert(id, GlobalAlloc::Static(def_id.to_def_id()))
|
||||
{
|
||||
bug!("tried to set allocation ID {id:?}, but it was already existing as {old:#?}");
|
||||
}
|
||||
|
|
|
@ -2336,8 +2336,8 @@ macro_rules! sty_debug_print {
|
|||
$(let mut $variant = total;)*
|
||||
|
||||
for shard in tcx.interners.type_.lock_shards() {
|
||||
let types = shard.keys();
|
||||
for &InternedInSet(t) in types {
|
||||
let types = shard.iter();
|
||||
for &(InternedInSet(t), ()) in types {
|
||||
let variant = match t.internee {
|
||||
ty::Bool | ty::Char | ty::Int(..) | ty::Uint(..) |
|
||||
ty::Float(..) | ty::Str | ty::Never => continue,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue