Skip to content

Commit 0f7d917

Browse files
committed
Use WorkProductMap instead of FxIndexMap
This is an UnordMap internally. Iteration order for the work product map should not matter aside from the place it is serialized where sorting by WorkProductId is sufficient.
1 parent 042c759 commit 0f7d917

9 files changed

Lines changed: 27 additions & 40 deletions

File tree

compiler/rustc_codegen_cranelift/src/driver/aot.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use rustc_data_structures::profiling::SelfProfilerRef;
1717
use rustc_data_structures::stable_hash::{StableHash, StableHashCtxt, StableHasher};
1818
use rustc_data_structures::sync::{IntoDynSyncSend, par_map};
1919
use rustc_hir::attrs::Linkage as RLinkage;
20-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
20+
use rustc_middle::dep_graph::{WorkProduct, WorkProductId, WorkProductMap};
2121
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
2222
use rustc_middle::mono::{CodegenUnit, MonoItem, MonoItemData, Visibility};
2323
use rustc_session::Session;
@@ -61,8 +61,8 @@ impl OngoingCodegen {
6161
self,
6262
sess: &Session,
6363
outputs: &OutputFilenames,
64-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
65-
let mut work_products = FxIndexMap::default();
64+
) -> (CompiledModules, WorkProductMap) {
65+
let mut work_products = WorkProductMap::default();
6666
let mut modules = vec![];
6767
let disable_incr_cache = disable_incr_cache();
6868

compiler/rustc_codegen_cranelift/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ use cranelift_codegen::settings::{self, Configurable};
4242
use rustc_codegen_ssa::traits::CodegenBackend;
4343
use rustc_codegen_ssa::{CompiledModules, CrateInfo, TargetConfig};
4444
use rustc_log::tracing::info;
45-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
45+
use rustc_middle::dep_graph::WorkProductMap;
4646
use rustc_session::Session;
4747
use rustc_session::config::OutputFilenames;
4848
use rustc_span::{Symbol, sym};
@@ -91,7 +91,7 @@ mod prelude {
9191
};
9292
pub(crate) use cranelift_module::{self, DataDescription, FuncId, Linkage, Module};
9393
pub(crate) use rustc_abi::{BackendRepr, FIRST_VARIANT, FieldIdx, Scalar, Size, VariantIdx};
94-
pub(crate) use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
94+
pub(crate) use rustc_data_structures::fx::FxHashMap;
9595
pub(crate) use rustc_hir::def_id::{DefId, LOCAL_CRATE};
9696
pub(crate) use rustc_index::Idx;
9797
pub(crate) use rustc_middle::mir::{self, *};
@@ -234,7 +234,7 @@ impl CodegenBackend for CraneliftCodegenBackend {
234234
sess: &Session,
235235
outputs: &OutputFilenames,
236236
_crate_info: &CrateInfo,
237-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
237+
) -> (CompiledModules, WorkProductMap) {
238238
ongoing_codegen.downcast::<driver::aot::OngoingCodegen>().unwrap().join(sess, outputs)
239239
}
240240

compiler/rustc_codegen_gcc/src/lib.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,10 @@ use rustc_codegen_ssa::base::codegen_crate;
8989
use rustc_codegen_ssa::target_features::cfg_target_feature;
9090
use rustc_codegen_ssa::traits::{CodegenBackend, ExtraBackendMethods, WriteBackendMethods};
9191
use rustc_codegen_ssa::{CompiledModule, CompiledModules, CrateInfo, ModuleCodegen, TargetConfig};
92-
use rustc_data_structures::fx::FxIndexMap;
9392
use rustc_data_structures::profiling::SelfProfilerRef;
9493
use rustc_data_structures::sync::IntoDynSyncSend;
9594
use rustc_errors::{DiagCtxt, DiagCtxtHandle};
96-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
95+
use rustc_middle::dep_graph::{WorkProduct, WorkProductMap};
9796
use rustc_middle::ty::TyCtxt;
9897
use rustc_middle::util::Providers;
9998
use rustc_session::Session;
@@ -301,7 +300,7 @@ impl CodegenBackend for GccCodegenBackend {
301300
sess: &Session,
302301
_outputs: &OutputFilenames,
303302
crate_info: &CrateInfo,
304-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
303+
) -> (CompiledModules, WorkProductMap) {
305304
ongoing_codegen
306305
.downcast::<rustc_codegen_ssa::back::write::OngoingCodegen<GccCodegenBackend>>()
307306
.expect("Expected GccCodegenBackend's OngoingCodegen, found Box<Any>")

compiler/rustc_codegen_llvm/src/lib.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,10 @@ use rustc_codegen_ssa::back::write::{
3232
};
3333
use rustc_codegen_ssa::traits::*;
3434
use rustc_codegen_ssa::{CompiledModule, CompiledModules, CrateInfo, ModuleCodegen, TargetConfig};
35-
use rustc_data_structures::fx::FxIndexMap;
3635
use rustc_data_structures::profiling::SelfProfilerRef;
3736
use rustc_errors::{DiagCtxt, DiagCtxtHandle};
3837
use rustc_metadata::EncodedMetadata;
39-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
38+
use rustc_middle::dep_graph::{WorkProduct, WorkProductMap};
4039
use rustc_middle::ty::TyCtxt;
4140
use rustc_middle::util::Providers;
4241
use rustc_session::Session;
@@ -358,7 +357,7 @@ impl CodegenBackend for LlvmCodegenBackend {
358357
sess: &Session,
359358
outputs: &OutputFilenames,
360359
crate_info: &CrateInfo,
361-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
360+
) -> (CompiledModules, WorkProductMap) {
362361
let (compiled_modules, work_products) = ongoing_codegen
363362
.downcast::<rustc_codegen_ssa::back::write::OngoingCodegen<LlvmCodegenBackend>>()
364363
.expect("Expected LlvmCodegenBackend's OngoingCodegen, found Box<Any>")

compiler/rustc_codegen_ssa/src/back/write.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use std::sync::mpsc::{Receiver, Sender, channel};
66
use std::{assert_matches, fs, io, mem, str, thread};
77

88
use rustc_abi::Size;
9-
use rustc_data_structures::fx::FxIndexMap;
109
use rustc_data_structures::jobserver::{self, Acquired};
1110
use rustc_data_structures::profiling::{SelfProfilerRef, VerboseTimingGuard};
1211
use rustc_errors::emitter::Emitter;
@@ -22,7 +21,7 @@ use rustc_incremental::{
2221
use rustc_macros::{Decodable, Encodable};
2322
use rustc_metadata::fs::copy_to_stdout;
2423
use rustc_middle::bug;
25-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
24+
use rustc_middle::dep_graph::{WorkProduct, WorkProductMap};
2625
use rustc_middle::ty::TyCtxt;
2726
use rustc_session::Session;
2827
use rustc_session::config::{
@@ -460,8 +459,8 @@ pub(crate) fn start_async_codegen<B: WriteBackendMethods>(
460459
fn copy_all_cgu_workproducts_to_incr_comp_cache_dir(
461460
sess: &Session,
462461
compiled_modules: &CompiledModules,
463-
) -> FxIndexMap<WorkProductId, WorkProduct> {
464-
let mut work_products = FxIndexMap::default();
462+
) -> WorkProductMap {
463+
let mut work_products = WorkProductMap::default();
465464

466465
if sess.opts.incremental.is_none() {
467466
return work_products;
@@ -2098,11 +2097,7 @@ pub struct OngoingCodegen<B: WriteBackendMethods> {
20982097
}
20992098

21002099
impl<B: WriteBackendMethods> OngoingCodegen<B> {
2101-
pub fn join(
2102-
self,
2103-
sess: &Session,
2104-
crate_info: &CrateInfo,
2105-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
2100+
pub fn join(self, sess: &Session, crate_info: &CrateInfo) -> (CompiledModules, WorkProductMap) {
21062101
self.shared_emitter_main.check(sess, true);
21072102

21082103
let maybe_lto_modules = sess.time("join_worker_thread", || match self.coordinator.join() {

compiler/rustc_codegen_ssa/src/traits/backend.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ use std::any::Any;
22
use std::hash::Hash;
33

44
use rustc_ast::expand::allocator::AllocatorMethod;
5-
use rustc_data_structures::fx::FxIndexMap;
65
use rustc_data_structures::sync::{DynSend, DynSync};
76
use rustc_metadata::EncodedMetadata;
87
use rustc_metadata::creader::MetadataLoaderDyn;
9-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
8+
use rustc_middle::dep_graph::WorkProductMap;
109
use rustc_middle::ty::TyCtxt;
1110
use rustc_middle::util::Providers;
1211
use rustc_session::Session;
@@ -130,7 +129,7 @@ pub trait CodegenBackend {
130129
sess: &Session,
131130
outputs: &OutputFilenames,
132131
crate_info: &CrateInfo,
133-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>);
132+
) -> (CompiledModules, WorkProductMap);
134133

135134
fn print_pass_timings(&self) {}
136135

compiler/rustc_incremental/src/persist/save.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use std::fs;
22

3-
use rustc_data_structures::fx::FxIndexMap;
43
use rustc_data_structures::sync::par_join;
5-
use rustc_middle::dep_graph::{DepGraph, WorkProduct, WorkProductId};
4+
use rustc_middle::dep_graph::{DepGraph, WorkProductMap};
65
use rustc_middle::query::on_disk_cache;
76
use rustc_middle::ty::TyCtxt;
87
use rustc_serialize::Encodable as RustcEncodable;
@@ -93,7 +92,7 @@ pub(crate) fn save_dep_graph(tcx: TyCtxt<'_>) {
9392
pub fn save_work_product_index(
9493
sess: &Session,
9594
dep_graph: &DepGraph,
96-
new_work_products: FxIndexMap<WorkProductId, WorkProduct>,
95+
new_work_products: WorkProductMap,
9796
) {
9897
if sess.opts.incremental.is_none() {
9998
return;
@@ -126,18 +125,16 @@ pub fn save_work_product_index(
126125

127126
// Check that we did not delete one of the current work-products:
128127
debug_assert!({
129-
new_work_products.iter().all(|(_, wp)| {
128+
new_work_products.items().all(|(_, wp)| {
130129
wp.saved_files.items().all(|(_, path)| in_incr_comp_dir_sess(sess, path).exists())
131130
})
132131
});
133132
}
134133

135-
fn encode_work_product_index(
136-
work_products: &FxIndexMap<WorkProductId, WorkProduct>,
137-
encoder: &mut FileEncoder,
138-
) {
134+
fn encode_work_product_index(work_products: &WorkProductMap, encoder: &mut FileEncoder) {
139135
let serialized_products: Vec<_> = work_products
140-
.iter()
136+
.to_sorted_stable_ord()
137+
.into_iter()
141138
.map(|(id, work_product)| SerializedWorkProduct {
142139
id: *id,
143140
work_product: work_product.clone(),

compiler/rustc_interface/src/queries.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ use std::sync::Arc;
33

44
use rustc_codegen_ssa::traits::CodegenBackend;
55
use rustc_codegen_ssa::{CompiledModules, CrateInfo};
6-
use rustc_data_structures::indexmap::IndexMap;
76
use rustc_data_structures::svh::Svh;
87
use rustc_errors::timings::TimingSection;
98
use rustc_hir::def_id::LOCAL_CRATE;
109
use rustc_metadata::EncodedMetadata;
11-
use rustc_middle::dep_graph::DepGraph;
10+
use rustc_middle::dep_graph::{DepGraph, WorkProductMap};
1211
use rustc_middle::ty::TyCtxt;
1312
use rustc_session::Session;
1413
use rustc_session::config::{self, OutputFilenames, OutputType};
@@ -51,7 +50,7 @@ impl Linker {
5150
let (compiled_modules, mut work_products) = sess.time("finish_ongoing_codegen", || {
5251
match self.ongoing_codegen.downcast::<CompiledModules>() {
5352
// This was a check only build
54-
Ok(compiled_modules) => (*compiled_modules, IndexMap::default()),
53+
Ok(compiled_modules) => (*compiled_modules, WorkProductMap::default()),
5554

5655
Err(ongoing_codegen) => codegen_backend.join_codegen(
5756
ongoing_codegen,

compiler/rustc_interface/src/util.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@ use rustc_codegen_ssa::target_features::cfg_target_feature;
1414
use rustc_codegen_ssa::traits::CodegenBackend;
1515
use rustc_codegen_ssa::{CompiledModules, CrateInfo, TargetConfig};
1616
use rustc_data_structures::base_n::{CASE_INSENSITIVE, ToBaseN};
17-
use rustc_data_structures::fx::FxIndexMap;
1817
use rustc_data_structures::jobserver::Proxy;
1918
use rustc_data_structures::sync;
2019
use rustc_metadata::{DylibError, EncodedMetadata, load_symbol_from_dylib};
21-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
20+
use rustc_middle::dep_graph::WorkProductMap;
2221
use rustc_middle::ty::{CurrentGcx, TyCtxt};
2322
use rustc_query_impl::{CollectActiveJobsKind, collect_active_query_jobs};
2423
use rustc_session::config::{
@@ -418,8 +417,8 @@ impl CodegenBackend for DummyCodegenBackend {
418417
_sess: &Session,
419418
_outputs: &OutputFilenames,
420419
_crate_info: &CrateInfo,
421-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
422-
(*ongoing_codegen.downcast().unwrap(), FxIndexMap::default())
420+
) -> (CompiledModules, WorkProductMap) {
421+
(*ongoing_codegen.downcast().unwrap(), WorkProductMap::default())
423422
}
424423

425424
fn link(

0 commit comments

Comments
 (0)