@@ -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