Skip to content

Commit 9a5e766

Browse files
committed
Extract codegen_cgu_content
1 parent 318318e commit 9a5e766

File tree

1 file changed

+54
-50
lines changed

1 file changed

+54
-50
lines changed

src/driver/aot.rs

Lines changed: 54 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
2323
use rustc_session::config::{DebugInfo, OutFileName, OutputFilenames, OutputType};
2424
use rustc_session::Session;
2525

26+
use crate::base::CodegenedFunction;
2627
use crate::concurrency_limiter::{ConcurrencyLimiter, ConcurrencyLimiterToken};
2728
use crate::debuginfo::TypeDebugContext;
2829
use crate::global_asm::GlobalAsmConfig;
2930
use crate::unwind_module::UnwindModule;
30-
use crate::{prelude::*, BackendConfig};
31+
use crate::{prelude::*, BackendConfig, CodegenCx};
3132

3233
struct ModuleCodegenResult {
3334
module_regular: CompiledModule,
@@ -478,6 +479,55 @@ fn reuse_workproduct_for_cgu(
478479
})
479480
}
480481

482+
fn codegen_cgu_content(
483+
tcx: TyCtxt<'_>,
484+
module: &mut dyn Module,
485+
cgu_name: rustc_span::Symbol,
486+
) -> (CodegenCx, Vec<CodegenedFunction>) {
487+
tcx.prof.generic_activity_with_arg("codegen cgu", cgu_name.as_str()).run(|| {
488+
let cgu = tcx.codegen_unit(cgu_name);
489+
let mono_items = cgu.items_in_deterministic_order(tcx);
490+
491+
let mut cx = crate::CodegenCx::new(
492+
tcx,
493+
module.isa(),
494+
tcx.sess.opts.debuginfo != DebugInfo::None,
495+
cgu_name,
496+
);
497+
let mut type_dbg = TypeDebugContext::default();
498+
super::predefine_mono_items(tcx, module, &mono_items);
499+
let mut codegened_functions = vec![];
500+
for (mono_item, _) in mono_items {
501+
match mono_item {
502+
MonoItem::Fn(inst) => {
503+
if let Some(codegened_function) = crate::base::codegen_fn(
504+
tcx,
505+
&mut cx,
506+
&mut type_dbg,
507+
Function::new(),
508+
module,
509+
inst,
510+
) {
511+
codegened_functions.push(codegened_function);
512+
}
513+
}
514+
MonoItem::Static(def_id) => {
515+
let data_id = crate::constant::codegen_static(tcx, module, def_id);
516+
if let Some(debug_context) = &mut cx.debug_context {
517+
debug_context.define_static(tcx, &mut type_dbg, def_id, data_id);
518+
}
519+
}
520+
MonoItem::GlobalAsm(item_id) => {
521+
crate::global_asm::codegen_global_asm_item(tcx, &mut cx.global_asm, item_id);
522+
}
523+
}
524+
}
525+
crate::main_shim::maybe_create_entry_wrapper(tcx, module, false, cgu.is_primary());
526+
527+
(cx, codegened_functions)
528+
})
529+
}
530+
481531
fn module_codegen(
482532
tcx: TyCtxt<'_>,
483533
(backend_config, global_asm_config, cgu_name, token): (
@@ -487,57 +537,11 @@ fn module_codegen(
487537
ConcurrencyLimiterToken,
488538
),
489539
) -> OngoingModuleCodegen {
490-
let (cgu_name, mut cx, mut module, codegened_functions) =
491-
tcx.prof.generic_activity_with_arg("codegen cgu", cgu_name.as_str()).run(|| {
492-
let cgu = tcx.codegen_unit(cgu_name);
493-
let mono_items = cgu.items_in_deterministic_order(tcx);
494-
495-
let mut module = make_module(tcx.sess, &backend_config, cgu_name.as_str().to_string());
496-
497-
let mut cx = crate::CodegenCx::new(
498-
tcx,
499-
module.isa(),
500-
tcx.sess.opts.debuginfo != DebugInfo::None,
501-
cgu_name,
502-
);
503-
let mut type_dbg = TypeDebugContext::default();
504-
super::predefine_mono_items(tcx, &mut module, &mono_items);
505-
let mut codegened_functions = vec![];
506-
for (mono_item, _) in mono_items {
507-
match mono_item {
508-
MonoItem::Fn(inst) => {
509-
if let Some(codegened_function) = crate::base::codegen_fn(
510-
tcx,
511-
&mut cx,
512-
&mut type_dbg,
513-
Function::new(),
514-
&mut module,
515-
inst,
516-
) {
517-
codegened_functions.push(codegened_function);
518-
}
519-
}
520-
MonoItem::Static(def_id) => {
521-
let data_id = crate::constant::codegen_static(tcx, &mut module, def_id);
522-
if let Some(debug_context) = &mut cx.debug_context {
523-
debug_context.define_static(tcx, &mut type_dbg, def_id, data_id);
524-
}
525-
}
526-
MonoItem::GlobalAsm(item_id) => {
527-
crate::global_asm::codegen_global_asm_item(
528-
tcx,
529-
&mut cx.global_asm,
530-
item_id,
531-
);
532-
}
533-
}
534-
}
535-
crate::main_shim::maybe_create_entry_wrapper(tcx, &mut module, false, cgu.is_primary());
540+
let mut module = make_module(tcx.sess, &backend_config, cgu_name.as_str().to_string());
536541

537-
let cgu_name = cgu.name().as_str().to_owned();
542+
let (mut cx, codegened_functions) = codegen_cgu_content(tcx, &mut module, cgu_name);
538543

539-
(cgu_name, cx, module, codegened_functions)
540-
});
544+
let cgu_name = cgu_name.as_str().to_owned();
541545

542546
let producer = crate::debuginfo::producer(tcx.sess);
543547

0 commit comments

Comments
 (0)