@@ -7,6 +7,7 @@ use std::sync::Arc;
77use std:: thread:: JoinHandle ;
88
99use cranelift_object:: { ObjectBuilder , ObjectModule } ;
10+ use rustc_codegen_ssa:: assert_module_sources:: CguReuse ;
1011use rustc_codegen_ssa:: back:: metadata:: create_compressed_metadata_file;
1112use rustc_codegen_ssa:: base:: determine_cgu_reuse;
1213use rustc_codegen_ssa:: { CodegenResults , CompiledModule , CrateInfo , ModuleKind } ;
@@ -15,7 +16,6 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
1516use rustc_metadata:: EncodedMetadata ;
1617use rustc_middle:: dep_graph:: { WorkProduct , WorkProductId } ;
1718use rustc_middle:: mir:: mono:: { CodegenUnit , MonoItem } ;
18- use rustc_session:: cgu_reuse_tracker:: CguReuse ;
1919use rustc_session:: config:: { DebugInfo , OutputFilenames , OutputType } ;
2020use rustc_session:: Session ;
2121
@@ -375,43 +375,47 @@ pub(crate) fn run_aot(
375375 }
376376 }
377377
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+
378390 let global_asm_config = Arc :: new ( crate :: global_asm:: GlobalAsmConfig :: new ( tcx) ) ;
379391
380392 let mut concurrency_limiter = ConcurrencyLimiter :: new ( tcx. sess , cgus. len ( ) ) ;
381393
382394 let modules = tcx. sess . time ( "codegen mono items" , || {
383395 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) )
415419 }
416420 } )
417421 . collect :: < Vec < _ > > ( )
0 commit comments