From f098f346ec3b925ad10858fbc6d9e98e15d7ebf1 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Sat, 23 Dec 2023 10:37:05 -0500 Subject: [PATCH] Remove metadata decoding DefPathHash cache This cache is largely useless. Decoding a DefPathHash from metadata is essentially a pair of memory loads - there's no heavyweight processing involved. Caching it behind a HashMap just adds extra cost and incurs hashing overheads. --- compiler/rustc_metadata/src/rmeta/decoder.rs | 30 ++++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs index b5e251f3c59..b6fe93759ee 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder.rs @@ -88,8 +88,6 @@ pub(crate) struct CrateMetadata { alloc_decoding_state: AllocDecodingState, /// Caches decoded `DefKey`s. def_key_cache: Lock>, - /// Caches decoded `DefPathHash`es. - def_path_hash_cache: Lock>, // --- Other significant crate properties --- /// ID of this crate, from the current compilation session's point of view. @@ -1485,27 +1483,16 @@ impl<'a, 'tcx> CrateMetadataRef<'a> { DefPath::make(self.cnum, id, |parent| self.def_key(parent)) } - fn def_path_hash_unlocked( - self, - index: DefIndex, - def_path_hashes: &mut FxHashMap, - ) -> DefPathHash { - *def_path_hashes.entry(index).or_insert_with(|| { - // This is a hack to workaround the fact that we can't easily encode/decode a Hash64 - // into the FixedSizeEncoding, as Hash64 lacks a Default impl. A future refactor to - // relax the Default restriction will likely fix this. - let fingerprint = Fingerprint::new( - self.root.stable_crate_id.as_u64(), - self.root.tables.def_path_hashes.get(self, index), - ); - DefPathHash::new(self.root.stable_crate_id, fingerprint.split().1) - }) - } - #[inline] fn def_path_hash(self, index: DefIndex) -> DefPathHash { - let mut def_path_hashes = self.def_path_hash_cache.lock(); - self.def_path_hash_unlocked(index, &mut def_path_hashes) + // This is a hack to workaround the fact that we can't easily encode/decode a Hash64 + // into the FixedSizeEncoding, as Hash64 lacks a Default impl. A future refactor to + // relax the Default restriction will likely fix this. + let fingerprint = Fingerprint::new( + self.root.stable_crate_id.as_u64(), + self.root.tables.def_path_hashes.get(self, index), + ); + DefPathHash::new(self.root.stable_crate_id, fingerprint.split().1) } #[inline] @@ -1832,7 +1819,6 @@ impl CrateMetadata { extern_crate: Lock::new(None), hygiene_context: Default::default(), def_key_cache: Default::default(), - def_path_hash_cache: Default::default(), }; // Need `CrateMetadataRef` to decode `DefId`s in simplified types.