diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2020-01-04 21:42:28 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2020-03-19 15:12:31 +0100 |
| commit | 6cd0dcade7c873209e6c220d40f811e5e72679f2 (patch) | |
| tree | e0bc188e44fffc409baef401b383d82bd96d23ea | |
| parent | 3c6f982cc908aacc39c3ac97f31c989f81cc213c (diff) | |
| download | rust-6cd0dcade7c873209e6c220d40f811e5e72679f2.tar.gz rust-6cd0dcade7c873209e6c220d40f811e5e72679f2.zip | |
Prefetch queries used by the metadata encoder
| -rw-r--r-- | src/librustc_metadata/rmeta/encoder.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/librustc_metadata/rmeta/encoder.rs b/src/librustc_metadata/rmeta/encoder.rs index 6280fd62de9..625970fbfbf 100644 --- a/src/librustc_metadata/rmeta/encoder.rs +++ b/src/librustc_metadata/rmeta/encoder.rs @@ -18,7 +18,7 @@ use rustc_ast::attr; use rustc_data_structures::fingerprint::Fingerprint; use rustc_data_structures::fx::FxHashMap; use rustc_data_structures::stable_hasher::StableHasher; -use rustc_data_structures::sync::Lrc; +use rustc_data_structures::sync::{join, par_for_each_in, Lrc}; use rustc_hir as hir; use rustc_hir::def::CtorKind; use rustc_hir::def_id::{CrateNum, DefId, DefIndex, LocalDefId, CRATE_DEF_INDEX, LOCAL_CRATE}; @@ -1721,6 +1721,22 @@ impl<'tcx, 'v> ItemLikeVisitor<'v> for ImplVisitor<'tcx> { // generated regardless of trailing bytes that end up in it. pub(super) fn encode_metadata(tcx: TyCtxt<'_>) -> EncodedMetadata { + join( + || encode_metadata_impl(tcx), + || { + // Prefetch some queries used by metadata encoding + tcx.dep_graph.with_ignore(|| { + par_for_each_in(tcx.mir_keys(LOCAL_CRATE), |&def_id| { + tcx.optimized_mir(def_id); + tcx.promoted_mir(def_id); + }); + }) + }, + ) + .0 +} + +fn encode_metadata_impl(tcx: TyCtxt<'_>) -> EncodedMetadata { let mut encoder = opaque::Encoder::new(vec![]); encoder.emit_raw_bytes(METADATA_HEADER); |
