about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2020-01-04 21:42:28 +0100
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2020-03-19 15:12:31 +0100
commit6cd0dcade7c873209e6c220d40f811e5e72679f2 (patch)
treee0bc188e44fffc409baef401b383d82bd96d23ea
parent3c6f982cc908aacc39c3ac97f31c989f81cc213c (diff)
downloadrust-6cd0dcade7c873209e6c220d40f811e5e72679f2.tar.gz
rust-6cd0dcade7c873209e6c220d40f811e5e72679f2.zip
Prefetch queries used by the metadata encoder
-rw-r--r--src/librustc_metadata/rmeta/encoder.rs18
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);