@@ -110,23 +110,21 @@ fn prepare_lto(
110
110
symbol_white_list. extend ( exported_symbols[ & cnum] . iter ( ) . filter_map ( symbol_filter) ) ;
111
111
}
112
112
113
- let _timer = cgcx. prof . generic_activity ( "LLVM_lto_load_upstream_bitcode" ) ;
114
113
let archive = ArchiveRO :: open ( & path) . expect ( "wanted an rlib" ) ;
115
114
let bytecodes = archive
116
115
. iter ( )
117
116
. filter_map ( |child| child. ok ( ) . and_then ( |c| c. name ( ) . map ( |name| ( name, c) ) ) )
118
117
. filter ( |& ( name, _) | name. ends_with ( RLIB_BYTECODE_EXTENSION ) ) ;
119
118
for ( name, data) in bytecodes {
119
+ let _timer =
120
+ cgcx. prof . generic_activity_with_arg ( "LLVM_lto_load_upstream_bitcode" , name) ;
120
121
info ! ( "adding bytecode {}" , name) ;
121
122
let bc_encoded = data. data ( ) ;
122
123
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
+ } ?;
130
128
let bc = SerializedModule :: FromRlib ( bc) ;
131
129
upstream_modules. push ( ( bc, CString :: new ( id) . unwrap ( ) ) ) ;
132
130
}
@@ -281,14 +279,14 @@ fn fat_lto(
281
279
// save and persist everything with the original module.
282
280
let mut linker = Linker :: new ( llmod) ;
283
281
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) ) ;
285
285
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)
292
290
} ) ?;
293
291
serialized_bitcode. push ( bc_decoded) ;
294
292
}
@@ -577,6 +575,8 @@ pub(crate) fn run_pass_manager(
577
575
config : & ModuleConfig ,
578
576
thin : bool ,
579
577
) {
578
+ let _timer = cgcx. prof . extra_verbose_generic_activity ( "LLVM_lto_optimize" , & module. name [ ..] ) ;
579
+
580
580
// Now we have one massive module inside of llmod. Time to run the
581
581
// LTO-specific optimization passes that LLVM provides.
582
582
//
@@ -634,9 +634,7 @@ pub(crate) fn run_pass_manager(
634
634
llvm:: LLVMRustAddPass ( pm, pass. unwrap ( ) ) ;
635
635
}
636
636
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 ( ) ) ;
640
638
641
639
llvm:: LLVMDisposePassManager ( pm) ;
642
640
}
@@ -760,7 +758,9 @@ pub unsafe fn optimize_thin_module(
760
758
// Like with "fat" LTO, get some better optimizations if landing pads
761
759
// are disabled by removing all landing pads.
762
760
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 ( ) ) ;
764
764
llvm:: LLVMRustMarkAllFunctionsNounwind ( llmod) ;
765
765
save_temp_bitcode ( & cgcx, & module, "thin-lto-after-nounwind" ) ;
766
766
}
@@ -774,7 +774,8 @@ pub unsafe fn optimize_thin_module(
774
774
// You can find some more comments about these functions in the LLVM
775
775
// bindings we've got (currently `PassWrapper.cpp`)
776
776
{
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 ( ) ) ;
778
779
if !llvm:: LLVMRustPrepareThinLTORename ( thin_module. shared . data . 0 , llmod) {
779
780
let msg = "failed to prepare thin LTO module" ;
780
781
return Err ( write:: llvm_err ( & diag_handler, msg) ) ;
@@ -783,7 +784,9 @@ pub unsafe fn optimize_thin_module(
783
784
}
784
785
785
786
{
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 ( ) ) ;
787
790
if !llvm:: LLVMRustPrepareThinLTOResolveWeak ( thin_module. shared . data . 0 , llmod) {
788
791
let msg = "failed to prepare thin LTO module" ;
789
792
return Err ( write:: llvm_err ( & diag_handler, msg) ) ;
@@ -792,7 +795,9 @@ pub unsafe fn optimize_thin_module(
792
795
}
793
796
794
797
{
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 ( ) ) ;
796
801
if !llvm:: LLVMRustPrepareThinLTOInternalize ( thin_module. shared . data . 0 , llmod) {
797
802
let msg = "failed to prepare thin LTO module" ;
798
803
return Err ( write:: llvm_err ( & diag_handler, msg) ) ;
@@ -801,7 +806,8 @@ pub unsafe fn optimize_thin_module(
801
806
}
802
807
803
808
{
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 ( ) ) ;
805
811
if !llvm:: LLVMRustPrepareThinLTOImport ( thin_module. shared . data . 0 , llmod) {
806
812
let msg = "failed to prepare thin LTO module" ;
807
813
return Err ( write:: llvm_err ( & diag_handler, msg) ) ;
@@ -839,7 +845,9 @@ pub unsafe fn optimize_thin_module(
839
845
// so it appears). Hopefully we can remove this once upstream bugs are
840
846
// fixed in LLVM.
841
847
{
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 ( ) ) ;
843
851
llvm:: LLVMRustThinLTOPatchDICompileUnit ( llmod, cu1) ;
844
852
save_temp_bitcode ( cgcx, & module, "thin-lto-after-patch" ) ;
845
853
}
@@ -850,7 +858,6 @@ pub unsafe fn optimize_thin_module(
850
858
// populate a thin-specific pass manager, which presumably LLVM treats a
851
859
// little differently.
852
860
{
853
- let _timer = cgcx. prof . generic_activity ( "LLVM_thin_lto_optimize" ) ;
854
861
info ! ( "running thin lto passes over {}" , module. name) ;
855
862
let config = cgcx. config ( module. kind ) ;
856
863
run_pass_manager ( cgcx, & module, config, true ) ;
0 commit comments