Remove cgu_reuse_tracker from Session
This removes a bit of global mutable state
This commit is contained in:
parent
ed2f5baba6
commit
e006e2c9c6
@ -7,6 +7,7 @@ use std::sync::Arc;
|
|||||||
use std::thread::JoinHandle;
|
use std::thread::JoinHandle;
|
||||||
|
|
||||||
use cranelift_object::{ObjectBuilder, ObjectModule};
|
use cranelift_object::{ObjectBuilder, ObjectModule};
|
||||||
|
use rustc_codegen_ssa::assert_module_sources::CguReuse;
|
||||||
use rustc_codegen_ssa::back::metadata::create_compressed_metadata_file;
|
use rustc_codegen_ssa::back::metadata::create_compressed_metadata_file;
|
||||||
use rustc_codegen_ssa::base::determine_cgu_reuse;
|
use rustc_codegen_ssa::base::determine_cgu_reuse;
|
||||||
use rustc_codegen_ssa::{CodegenResults, CompiledModule, CrateInfo, ModuleKind};
|
use rustc_codegen_ssa::{CodegenResults, CompiledModule, CrateInfo, ModuleKind};
|
||||||
@ -15,7 +16,6 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
|||||||
use rustc_metadata::EncodedMetadata;
|
use rustc_metadata::EncodedMetadata;
|
||||||
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
||||||
use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
|
use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
|
||||||
use rustc_session::cgu_reuse_tracker::CguReuse;
|
|
||||||
use rustc_session::config::{DebugInfo, OutputFilenames, OutputType};
|
use rustc_session::config::{DebugInfo, OutputFilenames, OutputType};
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
|
|
||||||
@ -375,43 +375,47 @@ pub(crate) fn run_aot(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate the CGU reuse
|
||||||
|
let cgu_reuse = tcx.sess.time("find_cgu_reuse", || {
|
||||||
|
cgus.iter().map(|cgu| determine_cgu_reuse(tcx, &cgu)).collect::<Vec<_>>()
|
||||||
|
});
|
||||||
|
|
||||||
|
rustc_codegen_ssa::assert_module_sources::assert_module_sources(tcx, &|cgu_reuse_tracker| {
|
||||||
|
for (i, cgu) in cgus.iter().enumerate() {
|
||||||
|
let cgu_reuse = cgu_reuse[i];
|
||||||
|
cgu_reuse_tracker.set_actual_reuse(cgu.name().as_str(), cgu_reuse);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let global_asm_config = Arc::new(crate::global_asm::GlobalAsmConfig::new(tcx));
|
let global_asm_config = Arc::new(crate::global_asm::GlobalAsmConfig::new(tcx));
|
||||||
|
|
||||||
let mut concurrency_limiter = ConcurrencyLimiter::new(tcx.sess, cgus.len());
|
let mut concurrency_limiter = ConcurrencyLimiter::new(tcx.sess, cgus.len());
|
||||||
|
|
||||||
let modules = tcx.sess.time("codegen mono items", || {
|
let modules = tcx.sess.time("codegen mono items", || {
|
||||||
cgus.iter()
|
cgus.iter()
|
||||||
.map(|cgu| {
|
.enumerate()
|
||||||
let cgu_reuse = if backend_config.disable_incr_cache {
|
.map(|(i, cgu)| match cgu_reuse[i] {
|
||||||
CguReuse::No
|
CguReuse::No => {
|
||||||
} else {
|
let dep_node = cgu.codegen_dep_node(tcx);
|
||||||
determine_cgu_reuse(tcx, cgu)
|
tcx.dep_graph
|
||||||
};
|
.with_task(
|
||||||
tcx.sess.cgu_reuse_tracker.set_actual_reuse(cgu.name().as_str(), cgu_reuse);
|
dep_node,
|
||||||
|
tcx,
|
||||||
match cgu_reuse {
|
(
|
||||||
CguReuse::No => {
|
backend_config.clone(),
|
||||||
let dep_node = cgu.codegen_dep_node(tcx);
|
global_asm_config.clone(),
|
||||||
tcx.dep_graph
|
cgu.name(),
|
||||||
.with_task(
|
concurrency_limiter.acquire(tcx.sess.diagnostic()),
|
||||||
dep_node,
|
),
|
||||||
tcx,
|
module_codegen,
|
||||||
(
|
Some(rustc_middle::dep_graph::hash_result),
|
||||||
backend_config.clone(),
|
)
|
||||||
global_asm_config.clone(),
|
.0
|
||||||
cgu.name(),
|
}
|
||||||
concurrency_limiter.acquire(tcx.sess.diagnostic()),
|
CguReuse::PreLto => unreachable!(),
|
||||||
),
|
CguReuse::PostLto => {
|
||||||
module_codegen,
|
concurrency_limiter.job_already_done();
|
||||||
Some(rustc_middle::dep_graph::hash_result),
|
OngoingModuleCodegen::Sync(reuse_workproduct_for_cgu(tcx, cgu))
|
||||||
)
|
|
||||||
.0
|
|
||||||
}
|
|
||||||
CguReuse::PreLto => unreachable!(),
|
|
||||||
CguReuse::PostLto => {
|
|
||||||
concurrency_limiter.job_already_done();
|
|
||||||
OngoingModuleCodegen::Sync(reuse_workproduct_for_cgu(tcx, cgu))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user