@@ -258,53 +258,68 @@ fn module_codegen(
258
258
ConcurrencyLimiterToken ,
259
259
) ,
260
260
) -> OngoingModuleCodegen {
261
- let cgu = tcx. codegen_unit ( cgu_name) ;
262
- let mono_items = cgu. items_in_deterministic_order ( tcx) ;
263
-
264
- let mut module = make_module ( tcx. sess , & backend_config, cgu_name. as_str ( ) . to_string ( ) ) ;
265
-
266
- let mut cx = crate :: CodegenCx :: new (
267
- tcx,
268
- backend_config. clone ( ) ,
269
- module. isa ( ) ,
270
- tcx. sess . opts . debuginfo != DebugInfo :: None ,
271
- cgu_name,
272
- ) ;
273
- super :: predefine_mono_items ( tcx, & mut module, & mono_items) ;
274
- let mut codegened_functions = vec ! [ ] ;
275
- for ( mono_item, _) in mono_items {
276
- match mono_item {
277
- MonoItem :: Fn ( inst) => {
278
- tcx. sess . time ( "codegen fn" , || {
279
- let codegened_function =
280
- crate :: base:: codegen_fn ( tcx, & mut cx, Function :: new ( ) , & mut module, inst) ;
281
- codegened_functions. push ( codegened_function) ;
282
- } ) ;
283
- }
284
- MonoItem :: Static ( def_id) => crate :: constant:: codegen_static ( tcx, & mut module, def_id) ,
285
- MonoItem :: GlobalAsm ( item_id) => {
286
- crate :: global_asm:: codegen_global_asm_item ( tcx, & mut cx. global_asm , item_id) ;
261
+ let ( cgu_name, mut cx, mut module, codegened_functions) = tcx. sess . time ( "codegen cgu" , || {
262
+ let cgu = tcx. codegen_unit ( cgu_name) ;
263
+ let mono_items = cgu. items_in_deterministic_order ( tcx) ;
264
+
265
+ let mut module = make_module ( tcx. sess , & backend_config, cgu_name. as_str ( ) . to_string ( ) ) ;
266
+
267
+ let mut cx = crate :: CodegenCx :: new (
268
+ tcx,
269
+ backend_config. clone ( ) ,
270
+ module. isa ( ) ,
271
+ tcx. sess . opts . debuginfo != DebugInfo :: None ,
272
+ cgu_name,
273
+ ) ;
274
+ super :: predefine_mono_items ( tcx, & mut module, & mono_items) ;
275
+ let mut codegened_functions = vec ! [ ] ;
276
+ for ( mono_item, _) in mono_items {
277
+ match mono_item {
278
+ MonoItem :: Fn ( inst) => {
279
+ tcx. sess . time ( "codegen fn" , || {
280
+ let codegened_function = crate :: base:: codegen_fn (
281
+ tcx,
282
+ & mut cx,
283
+ Function :: new ( ) ,
284
+ & mut module,
285
+ inst,
286
+ ) ;
287
+ codegened_functions. push ( codegened_function) ;
288
+ } ) ;
289
+ }
290
+ MonoItem :: Static ( def_id) => {
291
+ crate :: constant:: codegen_static ( tcx, & mut module, def_id)
292
+ }
293
+ MonoItem :: GlobalAsm ( item_id) => {
294
+ crate :: global_asm:: codegen_global_asm_item ( tcx, & mut cx. global_asm , item_id) ;
295
+ }
287
296
}
288
297
}
289
- }
290
- crate :: main_shim:: maybe_create_entry_wrapper (
291
- tcx,
292
- & mut module,
293
- & mut cx. unwind_context ,
294
- false ,
295
- cgu. is_primary ( ) ,
296
- ) ;
298
+ crate :: main_shim:: maybe_create_entry_wrapper (
299
+ tcx,
300
+ & mut module,
301
+ & mut cx. unwind_context ,
302
+ false ,
303
+ cgu. is_primary ( ) ,
304
+ ) ;
297
305
298
- let cgu_name = cgu. name ( ) . as_str ( ) . to_owned ( ) ;
306
+ let cgu_name = cgu. name ( ) . as_str ( ) . to_owned ( ) ;
307
+
308
+ ( cgu_name, cx, module, codegened_functions)
309
+ } ) ;
299
310
300
311
OngoingModuleCodegen :: Async ( std:: thread:: spawn ( move || {
301
- let mut cached_context = Context :: new ( ) ;
302
- for codegened_func in codegened_functions {
303
- crate :: base:: compile_fn ( & mut cx, & mut cached_context, & mut module, codegened_func) ;
304
- }
312
+ cx. profiler . clone ( ) . verbose_generic_activity ( "compile functions" ) . run ( || {
313
+ let mut cached_context = Context :: new ( ) ;
314
+ for codegened_func in codegened_functions {
315
+ crate :: base:: compile_fn ( & mut cx, & mut cached_context, & mut module, codegened_func) ;
316
+ }
317
+ } ) ;
305
318
306
319
let global_asm_object_file =
307
- crate :: global_asm:: compile_global_asm ( & global_asm_config, & cgu_name, & cx. global_asm ) ?;
320
+ cx. profiler . verbose_generic_activity ( "compile assembly" ) . run ( || {
321
+ crate :: global_asm:: compile_global_asm ( & global_asm_config, & cgu_name, & cx. global_asm )
322
+ } ) ?;
308
323
309
324
let codegen_result = cx. profiler . verbose_generic_activity ( "write object file" ) . run ( || {
310
325
emit_cgu (
0 commit comments