@@ -7,6 +7,7 @@ use std::sync::Arc;
7
7
use std:: thread:: JoinHandle ;
8
8
9
9
use cranelift_object:: { ObjectBuilder , ObjectModule } ;
10
+ use rustc_codegen_ssa:: assert_module_sources:: CguReuse ;
10
11
use rustc_codegen_ssa:: back:: metadata:: create_compressed_metadata_file;
11
12
use rustc_codegen_ssa:: base:: determine_cgu_reuse;
12
13
use rustc_codegen_ssa:: { CodegenResults , CompiledModule , CrateInfo , ModuleKind } ;
@@ -15,7 +16,6 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
15
16
use rustc_metadata:: EncodedMetadata ;
16
17
use rustc_middle:: dep_graph:: { WorkProduct , WorkProductId } ;
17
18
use rustc_middle:: mir:: mono:: { CodegenUnit , MonoItem } ;
18
- use rustc_session:: cgu_reuse_tracker:: CguReuse ;
19
19
use rustc_session:: config:: { DebugInfo , OutputFilenames , OutputType } ;
20
20
use rustc_session:: Session ;
21
21
@@ -375,43 +375,47 @@ pub(crate) fn run_aot(
375
375
}
376
376
}
377
377
378
+ // Calculate the CGU reuse
379
+ let cgu_reuse = tcx. sess . time ( "find_cgu_reuse" , || {
380
+ cgus. iter ( ) . map ( |cgu| determine_cgu_reuse ( tcx, & cgu) ) . collect :: < Vec < _ > > ( )
381
+ } ) ;
382
+
383
+ rustc_codegen_ssa:: assert_module_sources:: assert_module_sources ( tcx, & |cgu_reuse_tracker| {
384
+ for ( i, cgu) in cgus. iter ( ) . enumerate ( ) {
385
+ let cgu_reuse = cgu_reuse[ i] ;
386
+ cgu_reuse_tracker. set_actual_reuse ( cgu. name ( ) . as_str ( ) , cgu_reuse) ;
387
+ }
388
+ } ) ;
389
+
378
390
let global_asm_config = Arc :: new ( crate :: global_asm:: GlobalAsmConfig :: new ( tcx) ) ;
379
391
380
392
let mut concurrency_limiter = ConcurrencyLimiter :: new ( tcx. sess , cgus. len ( ) ) ;
381
393
382
394
let modules = tcx. sess . time ( "codegen mono items" , || {
383
395
cgus. iter ( )
384
- . map ( |cgu| {
385
- let cgu_reuse = if backend_config. disable_incr_cache {
386
- CguReuse :: No
387
- } else {
388
- determine_cgu_reuse ( tcx, cgu)
389
- } ;
390
- tcx. sess . cgu_reuse_tracker . set_actual_reuse ( cgu. name ( ) . as_str ( ) , cgu_reuse) ;
391
-
392
- match cgu_reuse {
393
- CguReuse :: No => {
394
- let dep_node = cgu. codegen_dep_node ( tcx) ;
395
- tcx. dep_graph
396
- . with_task (
397
- dep_node,
398
- tcx,
399
- (
400
- backend_config. clone ( ) ,
401
- global_asm_config. clone ( ) ,
402
- cgu. name ( ) ,
403
- concurrency_limiter. acquire ( tcx. sess . diagnostic ( ) ) ,
404
- ) ,
405
- module_codegen,
406
- Some ( rustc_middle:: dep_graph:: hash_result) ,
407
- )
408
- . 0
409
- }
410
- CguReuse :: PreLto => unreachable ! ( ) ,
411
- CguReuse :: PostLto => {
412
- concurrency_limiter. job_already_done ( ) ;
413
- OngoingModuleCodegen :: Sync ( reuse_workproduct_for_cgu ( tcx, cgu) )
414
- }
396
+ . enumerate ( )
397
+ . map ( |( i, cgu) | match cgu_reuse[ i] {
398
+ CguReuse :: No => {
399
+ let dep_node = cgu. codegen_dep_node ( tcx) ;
400
+ tcx. dep_graph
401
+ . with_task (
402
+ dep_node,
403
+ tcx,
404
+ (
405
+ backend_config. clone ( ) ,
406
+ global_asm_config. clone ( ) ,
407
+ cgu. name ( ) ,
408
+ concurrency_limiter. acquire ( tcx. sess . diagnostic ( ) ) ,
409
+ ) ,
410
+ module_codegen,
411
+ Some ( rustc_middle:: dep_graph:: hash_result) ,
412
+ )
413
+ . 0
414
+ }
415
+ CguReuse :: PreLto => unreachable ! ( ) ,
416
+ CguReuse :: PostLto => {
417
+ concurrency_limiter. job_already_done ( ) ;
418
+ OngoingModuleCodegen :: Sync ( reuse_workproduct_for_cgu ( tcx, cgu) )
415
419
}
416
420
} )
417
421
. collect :: < Vec < _ > > ( )
0 commit comments