Skip to content

Commit 5ec82ec

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 43a4909 commit 5ec82ec

9 files changed

Lines changed: 28 additions & 48 deletions

File tree

compiler/rustc_codegen_cranelift/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use cranelift_codegen::settings::{self, Configurable};
4040
use rustc_codegen_ssa::traits::CodegenBackend;
4141
use rustc_codegen_ssa::{CompiledModules, CrateInfo, TargetConfig, back};
4242
use rustc_log::tracing::info;
43-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
43+
use rustc_middle::dep_graph::WorkProductMap;
4444
use rustc_session::Session;
4545
use rustc_session::config::OutputFilenames;
4646
use rustc_span::{Symbol, sym};
@@ -88,7 +88,7 @@ mod prelude {
8888
};
8989
pub(crate) use cranelift_module::{self, DataDescription, FuncId, Linkage, Module};
9090
pub(crate) use rustc_abi::{BackendRepr, FIRST_VARIANT, FieldIdx, Scalar, Size, VariantIdx};
91-
pub(crate) use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
91+
pub(crate) use rustc_data_structures::fx::FxHashMap;
9292
pub(crate) use rustc_hir::def_id::{DefId, LOCAL_CRATE};
9393
pub(crate) use rustc_index::Idx;
9494
pub(crate) use rustc_middle::mir::{self, *};
@@ -235,7 +235,7 @@ impl CodegenBackend for CraneliftCodegenBackend {
235235
sess: &Session,
236236
_outputs: &OutputFilenames,
237237
crate_info: &CrateInfo,
238-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
238+
) -> (CompiledModules, WorkProductMap) {
239239
ongoing_codegen
240240
.downcast::<rustc_codegen_ssa::back::write::OngoingCodegen<driver::aot::AotDriver>>()
241241
.unwrap()

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() || sess.opts.unstable_opts.disable_incr_comp_backend_caching
467466
{
@@ -2099,11 +2098,7 @@ pub struct OngoingCodegen<B: WriteBackendMethods> {
20992098
}
21002099

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

21092104
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(

tests/ui-fulldeps/codegen-backend/auxiliary/the_backend.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,17 @@
44
#![deny(warnings)]
55

66
extern crate rustc_codegen_ssa;
7-
extern crate rustc_data_structures;
8-
extern crate rustc_driver;
9-
extern crate rustc_errors;
10-
extern crate rustc_hir;
7+
extern crate rustc_driver as _;
118
extern crate rustc_metadata;
129
extern crate rustc_middle;
1310
extern crate rustc_session;
14-
extern crate rustc_span;
15-
extern crate rustc_symbol_mangling;
16-
extern crate rustc_target;
1711

1812
use std::any::Any;
1913

2014
use rustc_codegen_ssa::traits::CodegenBackend;
2115
use rustc_codegen_ssa::{CompiledModules, CrateInfo};
22-
use rustc_data_structures::fx::FxIndexMap;
2316
use rustc_metadata::EncodedMetadata;
24-
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
17+
use rustc_middle::dep_graph::{WorkProduct, WorkProductId, WorkProductMap};
2518
use rustc_middle::ty::TyCtxt;
2619
use rustc_session::Session;
2720
use rustc_session::config::OutputFilenames;
@@ -47,11 +40,11 @@ impl CodegenBackend for TheBackend {
4740
_sess: &Session,
4841
_outputs: &OutputFilenames,
4942
_crate_info: &CrateInfo,
50-
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
43+
) -> (CompiledModules, WorkProductMap) {
5144
let codegen_results = ongoing_codegen
5245
.downcast::<CompiledModules>()
5346
.expect("in join_codegen: ongoing_codegen is not a CompiledModules");
54-
(*codegen_results, FxIndexMap::default())
47+
(*codegen_results, WorkProductMap::default())
5548
}
5649

5750
fn link(

0 commit comments

Comments
 (0)