@@ -110,23 +110,21 @@ fn prepare_lto(
110110                symbol_white_list. extend ( exported_symbols[ & cnum] . iter ( ) . filter_map ( symbol_filter) ) ; 
111111            } 
112112
113-             let  _timer = cgcx. prof . generic_activity ( "LLVM_lto_load_upstream_bitcode" ) ; 
114113            let  archive = ArchiveRO :: open ( & path) . expect ( "wanted an rlib" ) ; 
115114            let  bytecodes = archive
116115                . iter ( ) 
117116                . filter_map ( |child| child. ok ( ) . and_then ( |c| c. name ( ) . map ( |name| ( name,  c) ) ) ) 
118117                . filter ( |& ( name,  _) | name. ends_with ( RLIB_BYTECODE_EXTENSION ) ) ; 
119118            for  ( name,  data)  in  bytecodes { 
119+                 let  _timer =
120+                     cgcx. prof . generic_activity_with_arg ( "LLVM_lto_load_upstream_bitcode" ,  name) ; 
120121                info ! ( "adding bytecode {}" ,  name) ; 
121122                let  bc_encoded = data. data ( ) ; 
122123
123-                 let  ( bc,  id)  = cgcx
124-                     . prof 
125-                     . extra_verbose_generic_activity ( & format ! ( "decode {}" ,  name) ) 
126-                     . run ( || match  DecodedBytecode :: new ( bc_encoded)  { 
127-                         Ok ( b)  => Ok ( ( b. bytecode ( ) ,  b. identifier ( ) . to_string ( ) ) ) , 
128-                         Err ( e)  => Err ( diag_handler. fatal ( & e) ) , 
129-                     } ) ?; 
124+                 let  ( bc,  id)  = match  DecodedBytecode :: new ( bc_encoded)  { 
125+                     Ok ( b)  => Ok ( ( b. bytecode ( ) ,  b. identifier ( ) . to_string ( ) ) ) , 
126+                     Err ( e)  => Err ( diag_handler. fatal ( & e) ) , 
127+                 } ?; 
130128                let  bc = SerializedModule :: FromRlib ( bc) ; 
131129                upstream_modules. push ( ( bc,  CString :: new ( id) . unwrap ( ) ) ) ; 
132130            } 
@@ -281,14 +279,14 @@ fn fat_lto(
281279        // save and persist everything with the original module. 
282280        let  mut  linker = Linker :: new ( llmod) ; 
283281        for  ( bc_decoded,  name)  in  serialized_modules { 
284-             let  _timer = cgcx. prof . generic_activity ( "LLVM_fat_lto_link_module" ) ; 
282+             let  _timer = cgcx
283+                 . prof 
284+                 . generic_activity_with_arg ( "LLVM_fat_lto_link_module" ,  format ! ( "{:?}" ,  name) ) ; 
285285            info ! ( "linking {:?}" ,  name) ; 
286-             cgcx. prof . extra_verbose_generic_activity ( & format ! ( "ll link {:?}" ,  name) ) . run ( || { 
287-                 let  data = bc_decoded. data ( ) ; 
288-                 linker. add ( & data) . map_err ( |( ) | { 
289-                     let  msg = format ! ( "failed to load bc of {:?}" ,  name) ; 
290-                     write:: llvm_err ( & diag_handler,  & msg) 
291-                 } ) 
286+             let  data = bc_decoded. data ( ) ; 
287+             linker. add ( & data) . map_err ( |( ) | { 
288+                 let  msg = format ! ( "failed to load bc of {:?}" ,  name) ; 
289+                 write:: llvm_err ( & diag_handler,  & msg) 
292290            } ) ?; 
293291            serialized_bitcode. push ( bc_decoded) ; 
294292        } 
@@ -577,6 +575,8 @@ pub(crate) fn run_pass_manager(
577575    config :  & ModuleConfig , 
578576    thin :  bool , 
579577)  { 
578+     let  _timer = cgcx. prof . extra_verbose_generic_activity ( "LLVM_lto_optimize" ,  & module. name [ ..] ) ; 
579+ 
580580    // Now we have one massive module inside of llmod. Time to run the 
581581    // LTO-specific optimization passes that LLVM provides. 
582582    // 
@@ -634,9 +634,7 @@ pub(crate) fn run_pass_manager(
634634            llvm:: LLVMRustAddPass ( pm,  pass. unwrap ( ) ) ; 
635635        } 
636636
637-         cgcx. prof 
638-             . extra_verbose_generic_activity ( "LTO_passes" ) 
639-             . run ( || llvm:: LLVMRunPassManager ( pm,  module. module_llvm . llmod ( ) ) ) ; 
637+         llvm:: LLVMRunPassManager ( pm,  module. module_llvm . llmod ( ) ) ; 
640638
641639        llvm:: LLVMDisposePassManager ( pm) ; 
642640    } 
@@ -760,7 +758,9 @@ pub unsafe fn optimize_thin_module(
760758        // Like with "fat" LTO, get some better optimizations if landing pads 
761759        // are disabled by removing all landing pads. 
762760        if  cgcx. no_landing_pads  { 
763-             let  _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_remove_landing_pads" ) ; 
761+             let  _timer = cgcx
762+                 . prof 
763+                 . generic_activity_with_arg ( "LLVM_thin_lto_remove_landing_pads" ,  thin_module. name ( ) ) ; 
764764            llvm:: LLVMRustMarkAllFunctionsNounwind ( llmod) ; 
765765            save_temp_bitcode ( & cgcx,  & module,  "thin-lto-after-nounwind" ) ; 
766766        } 
@@ -774,7 +774,8 @@ pub unsafe fn optimize_thin_module(
774774        // You can find some more comments about these functions in the LLVM 
775775        // bindings we've got (currently `PassWrapper.cpp`) 
776776        { 
777-             let  _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_rename" ) ; 
777+             let  _timer =
778+                 cgcx. prof . generic_activity_with_arg ( "LLVM_thin_lto_rename" ,  thin_module. name ( ) ) ; 
778779            if  !llvm:: LLVMRustPrepareThinLTORename ( thin_module. shared . data . 0 ,  llmod)  { 
779780                let  msg = "failed to prepare thin LTO module" ; 
780781                return  Err ( write:: llvm_err ( & diag_handler,  msg) ) ; 
@@ -783,7 +784,9 @@ pub unsafe fn optimize_thin_module(
783784        } 
784785
785786        { 
786-             let  _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_resolve_weak" ) ; 
787+             let  _timer = cgcx
788+                 . prof 
789+                 . generic_activity_with_arg ( "LLVM_thin_lto_resolve_weak" ,  thin_module. name ( ) ) ; 
787790            if  !llvm:: LLVMRustPrepareThinLTOResolveWeak ( thin_module. shared . data . 0 ,  llmod)  { 
788791                let  msg = "failed to prepare thin LTO module" ; 
789792                return  Err ( write:: llvm_err ( & diag_handler,  msg) ) ; 
@@ -792,7 +795,9 @@ pub unsafe fn optimize_thin_module(
792795        } 
793796
794797        { 
795-             let  _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_internalize" ) ; 
798+             let  _timer = cgcx
799+                 . prof 
800+                 . generic_activity_with_arg ( "LLVM_thin_lto_internalize" ,  thin_module. name ( ) ) ; 
796801            if  !llvm:: LLVMRustPrepareThinLTOInternalize ( thin_module. shared . data . 0 ,  llmod)  { 
797802                let  msg = "failed to prepare thin LTO module" ; 
798803                return  Err ( write:: llvm_err ( & diag_handler,  msg) ) ; 
@@ -801,7 +806,8 @@ pub unsafe fn optimize_thin_module(
801806        } 
802807
803808        { 
804-             let  _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_import" ) ; 
809+             let  _timer =
810+                 cgcx. prof . generic_activity_with_arg ( "LLVM_thin_lto_import" ,  thin_module. name ( ) ) ; 
805811            if  !llvm:: LLVMRustPrepareThinLTOImport ( thin_module. shared . data . 0 ,  llmod)  { 
806812                let  msg = "failed to prepare thin LTO module" ; 
807813                return  Err ( write:: llvm_err ( & diag_handler,  msg) ) ; 
@@ -839,7 +845,9 @@ pub unsafe fn optimize_thin_module(
839845        // so it appears). Hopefully we can remove this once upstream bugs are 
840846        // fixed in LLVM. 
841847        { 
842-             let  _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_patch_debuginfo" ) ; 
848+             let  _timer = cgcx
849+                 . prof 
850+                 . generic_activity_with_arg ( "LLVM_thin_lto_patch_debuginfo" ,  thin_module. name ( ) ) ; 
843851            llvm:: LLVMRustThinLTOPatchDICompileUnit ( llmod,  cu1) ; 
844852            save_temp_bitcode ( cgcx,  & module,  "thin-lto-after-patch" ) ; 
845853        } 
@@ -850,7 +858,6 @@ pub unsafe fn optimize_thin_module(
850858        // populate a thin-specific pass manager, which presumably LLVM treats a 
851859        // little differently. 
852860        { 
853-             let  _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_optimize" ) ; 
854861            info ! ( "running thin lto passes over {}" ,  module. name) ; 
855862            let  config = cgcx. config ( module. kind ) ; 
856863            run_pass_manager ( cgcx,  & module,  config,  true ) ; 
0 commit comments