@@ -163,19 +163,22 @@ pub fn register_plugins<'a>(
163163 )
164164 } ) ;
165165
166- let ( krate, features) = rustc_expand:: config:: features (
167- krate,
168- & sess. parse_sess ,
169- sess. edition ( ) ,
170- & sess. opts . debugging_opts . allow_features ,
171- ) ;
166+ let ( krate, features) = sess. time ( "compute_features" , || {
167+ rustc_expand:: config:: features (
168+ krate,
169+ & sess. parse_sess ,
170+ sess. edition ( ) ,
171+ & sess. opts . debugging_opts . allow_features ,
172+ )
173+ } ) ;
172174 // these need to be set "early" so that expansion sees `quote` if enabled.
173175 sess. init_features ( features) ;
174176
175177 let crate_types = util:: collect_crate_types ( sess, & krate. attrs ) ;
176178 sess. crate_types . set ( crate_types) ;
177179
178- let disambiguator = util:: compute_crate_disambiguator ( sess) ;
180+ let disambiguator =
181+ sess. time ( "compute_crate_disambiguator" , || util:: compute_crate_disambiguator ( sess) ) ;
179182 sess. crate_disambiguator . set ( disambiguator) ;
180183 rustc_incremental:: prepare_session_directory ( sess, & crate_name, disambiguator) ;
181184
@@ -611,6 +614,8 @@ pub fn prepare_outputs(
611614 boxed_resolver : & Steal < Rc < RefCell < BoxedResolver > > > ,
612615 crate_name : & str ,
613616) -> Result < OutputFilenames > {
617+ let _timer = sess. timer ( "prepare_outputs" ) ;
618+
614619 // FIXME: rustdoc passes &[] instead of &krate.attrs here
615620 let outputs = util:: build_output_filenames (
616621 & compiler. input ,
@@ -721,33 +726,40 @@ pub fn create_global_ctxt<'tcx>(
721726
722727 let query_result_on_disk_cache = rustc_incremental:: load_query_result_cache ( sess) ;
723728
724- let codegen_backend = compiler. codegen_backend ( ) ;
725- let mut local_providers = ty:: query:: Providers :: default ( ) ;
726- default_provide ( & mut local_providers) ;
727- codegen_backend. provide ( & mut local_providers) ;
729+ let codegen_backend = sess. time ( "load_codegen_backend" , || compiler. codegen_backend ( ) ) ;
728730
729- let mut extern_providers = local_providers;
730- default_provide_extern ( & mut extern_providers) ;
731- codegen_backend. provide_extern ( & mut extern_providers) ;
731+ let ( local_providers, extern_providers) = sess. time ( "load_codegen_backend" , || {
732+ let mut local_providers = ty:: query:: Providers :: default ( ) ;
733+ default_provide ( & mut local_providers) ;
734+ codegen_backend. provide ( & mut local_providers) ;
732735
733- if let Some ( callback ) = compiler . override_queries {
734- callback ( sess , & mut local_providers , & mut extern_providers) ;
735- }
736+ let mut extern_providers = local_providers ;
737+ default_provide_extern ( & mut extern_providers) ;
738+ codegen_backend . provide_extern ( & mut extern_providers ) ;
736739
737- let gcx = global_ctxt. init_locking ( || {
738- TyCtxt :: create_global_ctxt (
739- sess,
740- lint_store,
741- local_providers,
742- extern_providers,
743- & all_arenas,
744- arena,
745- resolver_outputs,
746- hir_map,
747- query_result_on_disk_cache,
748- & crate_name,
749- & outputs,
750- )
740+ if let Some ( callback) = compiler. override_queries {
741+ callback ( sess, & mut local_providers, & mut extern_providers) ;
742+ }
743+
744+ ( local_providers, extern_providers)
745+ } ) ;
746+
747+ let gcx = sess. time ( "setup_global_ctxt" , || {
748+ global_ctxt. init_locking ( || {
749+ TyCtxt :: create_global_ctxt (
750+ sess,
751+ lint_store,
752+ local_providers,
753+ extern_providers,
754+ & all_arenas,
755+ arena,
756+ resolver_outputs,
757+ hir_map,
758+ query_result_on_disk_cache,
759+ & crate_name,
760+ & outputs,
761+ )
762+ } )
751763 } ) ;
752764
753765 // Do some initialization of the DepGraph that can only be done with the tcx available.
0 commit comments