diff options
author | David Wood <david@davidtw.co> | 2020-06-22 14:00:53 +0100 |
---|---|---|
committer | David Wood <david@davidtw.co> | 2020-07-20 19:35:34 +0100 |
commit | 5ce29d3d6f8994a1d9db9b9f8aa076001f7b8d07 (patch) | |
tree | a8e6a173b9f43bd09b30ce729c8d42d2ec6bb001 | |
parent | f52c72948aa1dd718cc1f168d21c91c584c0a662 (diff) | |
download | rust-5ce29d3d6f8994a1d9db9b9f8aa076001f7b8d07.tar.gz |
metadata: record `unused_generic_params`
This commit records the results of `unused_generic_params` in crate
metadata, hopefully improving performance.
Signed-off-by: David Wood <david@davidtw.co>
-rw-r--r-- | src/librustc_metadata/rmeta/decoder.rs | 10 | ||||
-rw-r--r-- | src/librustc_metadata/rmeta/decoder/cstore_impl.rs | 1 | ||||
-rw-r--r-- | src/librustc_metadata/rmeta/encoder.rs | 2 | ||||
-rw-r--r-- | src/librustc_metadata/rmeta/mod.rs | 1 |
4 files changed, 14 insertions, 0 deletions
diff --git a/src/librustc_metadata/rmeta/decoder.rs b/src/librustc_metadata/rmeta/decoder.rs index 4746e53ce59..e4edb2427a2 100644 --- a/src/librustc_metadata/rmeta/decoder.rs +++ b/src/librustc_metadata/rmeta/decoder.rs @@ -1132,6 +1132,16 @@ impl<'a, 'tcx> CrateMetadataRef<'a> { .decode((self, tcx)) } + fn get_unused_generic_params(&self, id: DefIndex) -> u64 { + self.root + .tables + .unused_generic_params + .get(self, id) + .filter(|_| !self.is_proc_macro(id)) + .map(|params| params.decode(self)) + .unwrap_or_default() + } + fn get_promoted_mir(&self, tcx: TyCtxt<'tcx>, id: DefIndex) -> IndexVec<Promoted, Body<'tcx>> { self.root .tables diff --git a/src/librustc_metadata/rmeta/decoder/cstore_impl.rs b/src/librustc_metadata/rmeta/decoder/cstore_impl.rs index be153758a2a..9160327c1d1 100644 --- a/src/librustc_metadata/rmeta/decoder/cstore_impl.rs +++ b/src/librustc_metadata/rmeta/decoder/cstore_impl.rs @@ -113,6 +113,7 @@ provide! { <'tcx> tcx, def_id, other, cdata, } optimized_mir => { tcx.arena.alloc(cdata.get_optimized_mir(tcx, def_id.index)) } promoted_mir => { tcx.arena.alloc(cdata.get_promoted_mir(tcx, def_id.index)) } + unused_generic_params => { cdata.get_unused_generic_params(def_id.index) } mir_const_qualif => { cdata.mir_const_qualif(def_id.index) } fn_sig => { cdata.fn_sig(def_id.index, tcx) } inherent_impls => { cdata.get_inherent_implementations_for_type(tcx, def_id.index) } diff --git a/src/librustc_metadata/rmeta/encoder.rs b/src/librustc_metadata/rmeta/encoder.rs index a8c46d3e32e..186828b6a19 100644 --- a/src/librustc_metadata/rmeta/encoder.rs +++ b/src/librustc_metadata/rmeta/encoder.rs @@ -1065,6 +1065,8 @@ impl EncodeContext<'tcx> { debug!("EntryBuilder::encode_mir({:?})", def_id); if self.tcx.mir_keys(LOCAL_CRATE).contains(&def_id) { record!(self.tables.mir[def_id.to_def_id()] <- self.tcx.optimized_mir(def_id)); + record!(self.tables.unused_generic_params[def_id.to_def_id()] <- + self.tcx.unused_generic_params(def_id)); } } diff --git a/src/librustc_metadata/rmeta/mod.rs b/src/librustc_metadata/rmeta/mod.rs index 8abc3784d6d..1d095ac06ec 100644 --- a/src/librustc_metadata/rmeta/mod.rs +++ b/src/librustc_metadata/rmeta/mod.rs @@ -277,6 +277,7 @@ define_tables! { super_predicates: Table<DefIndex, Lazy!(ty::GenericPredicates<'tcx>)>, mir: Table<DefIndex, Lazy!(mir::Body<'tcx>)>, promoted_mir: Table<DefIndex, Lazy!(IndexVec<mir::Promoted, mir::Body<'tcx>>)>, + unused_generic_params: Table<DefIndex, Lazy<u64>>, } #[derive(Copy, Clone, RustcEncodable, RustcDecodable)] |