Skip to content

Commit a767a10

Browse files
committed
Extract codegen_cgu_content
1 parent 53e1043 commit a767a10

File tree

1 file changed

+54
-49
lines changed

1 file changed

+54
-49
lines changed

src/driver/aot.rs

+54-49
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ use rustc_middle::mir::mono::{CodegenUnit, MonoItem};
2626
use rustc_session::Session;
2727
use rustc_session::config::{DebugInfo, OutFileName, OutputFilenames, OutputType};
2828

29+
use crate::CodegenCx;
30+
use crate::base::CodegenedFunction;
2931
use crate::concurrency_limiter::{ConcurrencyLimiter, ConcurrencyLimiterToken};
3032
use crate::debuginfo::TypeDebugContext;
3133
use crate::global_asm::GlobalAsmConfig;
@@ -486,6 +488,55 @@ fn reuse_workproduct_for_cgu(
486488
})
487489
}
488490

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

544-
let cgu_name = cgu.name().as_str().to_owned();
550+
let (mut cx, codegened_functions) = codegen_cgu_content(tcx, &mut module, cgu_name);
545551

546-
(cgu_name, cx, module, codegened_functions)
547-
});
552+
let cgu_name = cgu_name.as_str().to_owned();
548553

549554
let producer = crate::debuginfo::producer(tcx.sess);
550555

0 commit comments

Comments
 (0)