Skip to content

Commit e006e2c

Browse files
committed
Remove cgu_reuse_tracker from Session
This removes a bit of global mutable state
1 parent ed2f5ba commit e006e2c

File tree

1 file changed

+36
-32
lines changed

1 file changed

+36
-32
lines changed

Diff for: src/driver/aot.rs

+36-32
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::sync::Arc;
77
use std::thread::JoinHandle;
88

99
use cranelift_object::{ObjectBuilder, ObjectModule};
10+
use rustc_codegen_ssa::assert_module_sources::CguReuse;
1011
use rustc_codegen_ssa::back::metadata::create_compressed_metadata_file;
1112
use rustc_codegen_ssa::base::determine_cgu_reuse;
1213
use rustc_codegen_ssa::{CodegenResults, CompiledModule, CrateInfo, ModuleKind};
@@ -15,7 +16,6 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
1516
use rustc_metadata::EncodedMetadata;
1617
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
1718
use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
18-
use rustc_session::cgu_reuse_tracker::CguReuse;
1919
use rustc_session::config::{DebugInfo, OutputFilenames, OutputType};
2020
use rustc_session::Session;
2121

@@ -375,43 +375,47 @@ pub(crate) fn run_aot(
375375
}
376376
}
377377

378+
// Calculate the CGU reuse
379+
let cgu_reuse = tcx.sess.time("find_cgu_reuse", || {
380+
cgus.iter().map(|cgu| determine_cgu_reuse(tcx, &cgu)).collect::<Vec<_>>()
381+
});
382+
383+
rustc_codegen_ssa::assert_module_sources::assert_module_sources(tcx, &|cgu_reuse_tracker| {
384+
for (i, cgu) in cgus.iter().enumerate() {
385+
let cgu_reuse = cgu_reuse[i];
386+
cgu_reuse_tracker.set_actual_reuse(cgu.name().as_str(), cgu_reuse);
387+
}
388+
});
389+
378390
let global_asm_config = Arc::new(crate::global_asm::GlobalAsmConfig::new(tcx));
379391

380392
let mut concurrency_limiter = ConcurrencyLimiter::new(tcx.sess, cgus.len());
381393

382394
let modules = tcx.sess.time("codegen mono items", || {
383395
cgus.iter()
384-
.map(|cgu| {
385-
let cgu_reuse = if backend_config.disable_incr_cache {
386-
CguReuse::No
387-
} else {
388-
determine_cgu_reuse(tcx, cgu)
389-
};
390-
tcx.sess.cgu_reuse_tracker.set_actual_reuse(cgu.name().as_str(), cgu_reuse);
391-
392-
match cgu_reuse {
393-
CguReuse::No => {
394-
let dep_node = cgu.codegen_dep_node(tcx);
395-
tcx.dep_graph
396-
.with_task(
397-
dep_node,
398-
tcx,
399-
(
400-
backend_config.clone(),
401-
global_asm_config.clone(),
402-
cgu.name(),
403-
concurrency_limiter.acquire(tcx.sess.diagnostic()),
404-
),
405-
module_codegen,
406-
Some(rustc_middle::dep_graph::hash_result),
407-
)
408-
.0
409-
}
410-
CguReuse::PreLto => unreachable!(),
411-
CguReuse::PostLto => {
412-
concurrency_limiter.job_already_done();
413-
OngoingModuleCodegen::Sync(reuse_workproduct_for_cgu(tcx, cgu))
414-
}
396+
.enumerate()
397+
.map(|(i, cgu)| match cgu_reuse[i] {
398+
CguReuse::No => {
399+
let dep_node = cgu.codegen_dep_node(tcx);
400+
tcx.dep_graph
401+
.with_task(
402+
dep_node,
403+
tcx,
404+
(
405+
backend_config.clone(),
406+
global_asm_config.clone(),
407+
cgu.name(),
408+
concurrency_limiter.acquire(tcx.sess.diagnostic()),
409+
),
410+
module_codegen,
411+
Some(rustc_middle::dep_graph::hash_result),
412+
)
413+
.0
414+
}
415+
CguReuse::PreLto => unreachable!(),
416+
CguReuse::PostLto => {
417+
concurrency_limiter.job_already_done();
418+
OngoingModuleCodegen::Sync(reuse_workproduct_for_cgu(tcx, cgu))
415419
}
416420
})
417421
.collect::<Vec<_>>()

0 commit comments

Comments
 (0)