Skip to content

Commit 3047cff

Browse files
committed
Replace CodegenResults with CompiledModules
This is already CodegenResults without CrateInfo. The driver can calculate the CrateInfo and pass it by-ref to the backend. Using CompiledModules makes it a bit easier to move some other things out of the backend as will be necessary for moving LTO to the link phase.
1 parent 022d695 commit 3047cff

File tree

3 files changed

+23
-22
lines changed

3 files changed

+23
-22
lines changed

src/driver/aot.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use cranelift_object::{ObjectBuilder, ObjectModule};
1212
use rustc_codegen_ssa::assert_module_sources::CguReuse;
1313
use rustc_codegen_ssa::back::write::produce_final_output_artifacts;
1414
use rustc_codegen_ssa::base::determine_cgu_reuse;
15-
use rustc_codegen_ssa::{CodegenResults, CompiledModule, CompiledModules, CrateInfo, ModuleKind};
15+
use rustc_codegen_ssa::{CompiledModule, CompiledModules, ModuleKind};
1616
use rustc_data_structures::profiling::SelfProfilerRef;
1717
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
1818
use rustc_data_structures::sync::{IntoDynSyncSend, par_map};
@@ -54,7 +54,6 @@ impl<HCX> HashStable<HCX> for OngoingModuleCodegen {
5454
pub(crate) struct OngoingCodegen {
5555
modules: Vec<OngoingModuleCodegen>,
5656
allocator_module: Option<CompiledModule>,
57-
crate_info: CrateInfo,
5857
concurrency_limiter: ConcurrencyLimiter,
5958
}
6059

@@ -63,7 +62,7 @@ impl OngoingCodegen {
6362
self,
6463
sess: &Session,
6564
outputs: &OutputFilenames,
66-
) -> (CodegenResults, FxIndexMap<WorkProductId, WorkProduct>) {
65+
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
6766
let mut work_products = FxIndexMap::default();
6867
let mut modules = vec![];
6968
let disable_incr_cache = disable_incr_cache();
@@ -126,7 +125,7 @@ impl OngoingCodegen {
126125

127126
produce_final_output_artifacts(sess, &compiled_modules, outputs);
128127

129-
(CodegenResults { compiled_modules, crate_info: self.crate_info }, work_products)
128+
(compiled_modules, work_products)
130129
}
131130
}
132131

@@ -475,13 +474,6 @@ fn emit_allocator_module(tcx: TyCtxt<'_>) -> Option<CompiledModule> {
475474
}
476475

477476
pub(crate) fn run_aot(tcx: TyCtxt<'_>) -> Box<OngoingCodegen> {
478-
// FIXME handle `-Ctarget-cpu=native`
479-
let target_cpu = match tcx.sess.opts.cg.target_cpu {
480-
Some(ref name) => name,
481-
None => tcx.sess.target.cpu.as_ref(),
482-
}
483-
.to_owned();
484-
485477
let cgus = tcx.collect_and_partition_mono_items(()).codegen_units;
486478

487479
if tcx.dep_graph.is_fully_enabled() {
@@ -541,7 +533,6 @@ pub(crate) fn run_aot(tcx: TyCtxt<'_>) -> Box<OngoingCodegen> {
541533
Box::new(OngoingCodegen {
542534
modules,
543535
allocator_module,
544-
crate_info: CrateInfo::new(tcx, target_cpu),
545536
concurrency_limiter: concurrency_limiter.0,
546537
})
547538
}

src/driver/jit.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ use crate::debuginfo::TypeDebugContext;
1616
use crate::prelude::*;
1717
use crate::unwind_module::UnwindModule;
1818

19-
fn create_jit_module(tcx: TyCtxt<'_>) -> (UnwindModule<JITModule>, Option<DebugContext>) {
20-
let crate_info = CrateInfo::new(tcx, "dummy_target_cpu".to_string());
21-
19+
fn create_jit_module(
20+
tcx: TyCtxt<'_>,
21+
crate_info: &CrateInfo,
22+
) -> (UnwindModule<JITModule>, Option<DebugContext>) {
2223
let isa = crate::build_isa(tcx.sess, true);
2324
let mut jit_builder = JITBuilder::with_isa(isa, cranelift_module::default_libcall_names());
2425
crate::compiler_builtins::register_functions_for_jit(&mut jit_builder);
25-
jit_builder.symbol_lookup_fn(dep_symbol_lookup_fn(tcx.sess, crate_info));
26+
jit_builder.symbol_lookup_fn(dep_symbol_lookup_fn(tcx.sess, crate_info.clone()));
2627
let mut jit_module = UnwindModule::new(JITModule::new(jit_builder), false);
2728

2829
let cx = DebugContext::new(tcx, jit_module.isa(), false, "dummy_cgu_name");
@@ -32,14 +33,14 @@ fn create_jit_module(tcx: TyCtxt<'_>) -> (UnwindModule<JITModule>, Option<DebugC
3233
(jit_module, cx)
3334
}
3435

35-
pub(crate) fn run_jit(tcx: TyCtxt<'_>, jit_args: Vec<String>) -> ! {
36+
pub(crate) fn run_jit(tcx: TyCtxt<'_>, crate_info: &CrateInfo, jit_args: Vec<String>) -> ! {
3637
if !tcx.crate_types().contains(&rustc_session::config::CrateType::Executable) {
3738
tcx.dcx().fatal("can't jit non-executable crate");
3839
}
3940

4041
let output_filenames = tcx.output_filenames(());
4142
let should_write_ir = crate::pretty_clif::should_write_ir(tcx.sess);
42-
let (mut jit_module, mut debug_context) = create_jit_module(tcx);
43+
let (mut jit_module, mut debug_context) = create_jit_module(tcx, crate_info);
4344
let mut cached_context = Context::new();
4445

4546
let cgus = tcx.collect_and_partition_mono_items(()).codegen_units;

src/lib.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use std::sync::Arc;
4040
use cranelift_codegen::isa::TargetIsa;
4141
use cranelift_codegen::settings::{self, Configurable};
4242
use rustc_codegen_ssa::traits::CodegenBackend;
43-
use rustc_codegen_ssa::{CodegenResults, TargetConfig};
43+
use rustc_codegen_ssa::{CompiledModules, CrateInfo, TargetConfig};
4444
use rustc_log::tracing::info;
4545
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
4646
use rustc_session::Session;
@@ -200,12 +200,21 @@ impl CodegenBackend for CraneliftCodegenBackend {
200200
println!("Cranelift version: {}", cranelift_codegen::VERSION);
201201
}
202202

203-
fn codegen_crate(&self, tcx: TyCtxt<'_>) -> Box<dyn Any> {
203+
fn target_cpu(&self, sess: &Session) -> String {
204+
// FIXME handle `-Ctarget-cpu=native`
205+
match sess.opts.cg.target_cpu {
206+
Some(ref name) => name,
207+
None => sess.target.cpu.as_ref(),
208+
}
209+
.to_owned()
210+
}
211+
212+
fn codegen_crate(&self, tcx: TyCtxt<'_>, _crate_info: &CrateInfo) -> Box<dyn Any> {
204213
info!("codegen crate {}", tcx.crate_name(LOCAL_CRATE));
205214
let config = self.config.get().unwrap();
206215
if config.jit_mode {
207216
#[cfg(feature = "jit")]
208-
driver::jit::run_jit(tcx, config.jit_args.clone());
217+
driver::jit::run_jit(tcx, _crate_info, config.jit_args.clone());
209218

210219
#[cfg(not(feature = "jit"))]
211220
tcx.dcx().fatal("jit support was disabled when compiling rustc_codegen_cranelift");
@@ -219,7 +228,7 @@ impl CodegenBackend for CraneliftCodegenBackend {
219228
ongoing_codegen: Box<dyn Any>,
220229
sess: &Session,
221230
outputs: &OutputFilenames,
222-
) -> (CodegenResults, FxIndexMap<WorkProductId, WorkProduct>) {
231+
) -> (CompiledModules, FxIndexMap<WorkProductId, WorkProduct>) {
223232
ongoing_codegen.downcast::<driver::aot::OngoingCodegen>().unwrap().join(sess, outputs)
224233
}
225234
}

0 commit comments

Comments
 (0)