Skip to content

Commit 398ed7f

Browse files
authored
Rollup merge of #67193 - lqd:measureme_polonius, r=wesleywiser
In which we start tracking polonius in `-Z self-profile` This PR adds 2 `-Z self-profile` activities: - "polonius_fact_generation" to track the different places where we convert MIR/NLL data to polonius facts - "polonius_analysis" to track the time polonius itself takes to do its job: some move/init analysis (and more to come soon), liveness, borrow checking. cc @albins for the commits slightly refactoring the liveness fact generation (to make it easier to use the `measureme` profiler), what do you think ? I know you've wanted to refactor liveness fact generation in general (even though we'll do broader changes when that happens). I also hope I haven't missed relations. cc @rust-lang/wg-polonius in general: like most of `-Z self-profile` + `summarize`, the profiling is done per-session/per-crate (?) and thus here we won't differentiate between functions/`DefId`s either, but (depending on the tool) commonly aggregate the different polonius durations. While we know it'll be needed in the future, and should be relatively easy to track with the profiler, would the profiling information in this PR be worthwhile on its own until then ? (Or would you rather we try to do that now ?). It would seem useful to eventually have both: one view would be high-level (and helpful to compare and track performance over time), and the other fine-grained, knowing exactly what time each `def_id` took, to spot specific problems/outliers (either in rustc/polonius or in user code). Hence, this PR as a first step towards that. Here are a couple examples (taken on _stage 1_) post-processed with `summarize`: <details> <summary>Example output for the polonius smoke-tests</summary> ``` +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | Item | Self time | % of total time | Item count | Cache hits | Blocked time | Incremental load time | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | metadata_register_crate | 34.10ms | 27.052 | 14 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_borrowck | 27.05ms | 21.459 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | metadata_decode_entry | 17.12ms | 13.583 | 1380 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_liveness | 12.91ms | 10.244 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | macro_expand_crate | 4.25ms | 3.375 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | metadata_load_macro | 3.19ms | 2.533 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | resolve_lifetimes | 2.96ms | 2.344 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | polonius_analysis | 2.65ms | 2.099 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | typeck_tables_of | 2.50ms | 1.985 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | parse_crate | 1.61ms | 1.279 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_built | 1.26ms | 0.996 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_item_well_formed | 1.03ms | 0.821 | 9 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | build_hir_map | 953.10µs | 0.756 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_match | 913.60µs | 0.725 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | item_attrs | 816.20µs | 0.647 | 475 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | analysis | 703.80µs | 0.558 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | type_of | 684.80µs | 0.543 | 381 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | trait_impls_of | 679.20µs | 0.539 | 4 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | resolve_crate | 641.30µs | 0.509 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | adt_def | 588.30µs | 0.467 | 332 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | hir_lowering | 573.20µs | 0.455 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | evaluate_obligation | 521.10µs | 0.413 | 22 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | region_scope_tree | 484.10µs | 0.384 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | target_features_whitelist | 445.70µs | 0.354 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | implied_outlives_bounds | 309.50µs | 0.246 | 6 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_const | 289.60µs | 0.230 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | param_env | 288.80µs | 0.229 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | polonius_fact_generation | 285.80µs | 0.227 | 191 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | type_check_crate | 239.80µs | 0.190 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_validated | 210.00µs | 0.167 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | type_op_prove_predicate | 178.10µs | 0.141 | 5 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | generics_of | 174.10µs | 0.138 | 36 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | collect_mod_item_types | 163.40µs | 0.130 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | get_lang_items | 157.10µs | 0.125 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | unsafety_check_result | 150.50µs | 0.119 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | codegen_fn_attrs | 140.60µs | 0.112 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | predicates_of | 128.50µs | 0.102 | 19 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | fn_sig | 127.30µs | 0.101 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | predicates_defined_on | 114.90µs | 0.091 | 19 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | implementations_of_trait | 113.20µs | 0.090 | 56 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_attrs | 95.30µs | 0.076 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_const_qualif | 74.40µs | 0.059 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_copy_raw | 74.00µs | 0.059 | 11 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_unstable_api_usage | 71.40µs | 0.057 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_freeze_raw | 69.50µs | 0.055 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | stability_index | 59.00µs | 0.047 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | impl_trait_ref | 57.80µs | 0.046 | 29 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | layout_raw | 57.80µs | 0.046 | 3 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_loops | 56.30µs | 0.045 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_sized_raw | 50.20µs | 0.040 | 9 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | def_kind | 46.60µs | 0.037 | 25 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_intrinsics | 43.30µs | 0.034 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | explicit_predicates_of | 42.60µs | 0.034 | 19 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | typeck_item_bodies | 37.10µs | 0.029 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | inferred_outlives_of | 34.90µs | 0.028 | 19 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | lint_levels | 32.20µs | 0.026 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | impl_polarity | 29.40µs | 0.023 | 12 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | defined_lang_items | 28.10µs | 0.022 | 14 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_const_bodies | 27.80µs | 0.022 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | entry_fn | 25.60µs | 0.020 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | missing_lang_items | 25.10µs | 0.020 | 14 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | object_lifetime_defaults_map | 23.60µs | 0.019 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_late_bound_map | 23.10µs | 0.018 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | needs_drop_raw | 20.40µs | 0.016 | 15 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_const_fn_raw | 18.00µs | 0.014 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | upvars | 17.50µs | 0.014 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | lookup_deprecation_entry | 17.20µs | 0.014 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | all_crate_nums | 16.70µs | 0.013 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | proc_macro_decls_static | 16.10µs | 0.013 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_item_types | 15.90µs | 0.013 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | plugin_registrar_fn | 12.60µs | 0.010 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | trait_def | 11.60µs | 0.009 | 3 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | used_trait_imports | 11.50µs | 0.009 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | def_span | 10.20µs | 0.008 | 7 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | crate_inherent_impls | 10.00µs | 0.008 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | features_query | 9.90µs | 0.008 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | crate_inherent_impls_overlap_check | 9.80µs | 0.008 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_impl_wf | 7.20µs | 0.006 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | named_region_map | 6.60µs | 0.005 | 4 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | trait_of_item | 5.10µs | 0.004 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | lookup_stability | 4.00µs | 0.003 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | erase_regions_ty | 3.00µs | 0.002 | 2 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | maybe_unused_extern_crates | 1.50µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ Total cpu time: 126.0543ms ``` </details> <details> <summary>Example output for one of the slow tests on the `Naive` variant: ui/dynamically-sized-types/dst-tuple.rs</summary> ``` +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | Item | Self time | % of total time | Item count | Cache hits | Blocked time | Incremental load time | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | polonius_analysis | 55.31s | 98.090 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | link_crate | 339.76ms | 0.603 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | LLVM_module_codegen_emit_obj | 303.58ms | 0.538 | 17 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | metadata_decode_entry | 73.48ms | 0.130 | 18662 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | polonius_fact_generation | 32.85ms | 0.058 | 5476 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | typeck_tables_of | 32.55ms | 0.058 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_borrowck | 29.41ms | 0.052 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | macro_expand_crate | 23.50ms | 0.042 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | metadata_register_crate | 21.04ms | 0.037 | 14 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | codegen_module | 19.84ms | 0.035 | 16 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | LLVM_module_optimize_module_passes | 13.91ms | 0.025 | 16 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_built | 12.72ms | 0.023 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | evaluate_obligation | 9.17ms | 0.016 | 497 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | specialization_graph_of | 7.89ms | 0.014 | 19 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | type_of | 7.27ms | 0.013 | 3736 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | LLVM_module_optimize | 5.97ms | 0.011 | 17 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | optimized_mir | 5.72ms | 0.010 | 103 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | trait_impls_of | 5.37ms | 0.010 | 35 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | item_children | 5.11ms | 0.009 | 3094 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | impl_trait_ref | 5.06ms | 0.009 | 3134 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | impl_parent | 4.92ms | 0.009 | 3046 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | codegen_crate | 4.86ms | 0.009 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | resolve_crate | 3.99ms | 0.007 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | metadata_load_macro | 3.55ms | 0.006 | 13 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | analysis | 3.45ms | 0.006 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | visible_parent_map | 3.25ms | 0.006 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | parse_crate | 3.17ms | 0.006 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | build_hir_map | 3.10ms | 0.006 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_item_well_formed | 2.97ms | 0.005 | 17 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | monomorphization_collector_graph_walk | 2.44ms | 0.004 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | hir_lowering | 2.40ms | 0.004 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | generics_of | 2.37ms | 0.004 | 1283 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | adt_def | 2.25ms | 0.004 | 823 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | item_attrs | 2.12ms | 0.004 | 1167 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | LLVM_module_codegen | 2.11ms | 0.004 | 17 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | type_op_prove_predicate | 2.05ms | 0.004 | 92 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | erase_regions_ty | 1.80ms | 0.003 | 807 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | explicit_predicates_of | 1.73ms | 0.003 | 203 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | crate_variances | 1.73ms | 0.003 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | const_eval_raw | 1.69ms | 0.003 | 90 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | layout_raw | 1.59ms | 0.003 | 390 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | symbol_name | 1.48ms | 0.003 | 150 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | resolve_lifetimes | 1.46ms | 0.003 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | promoted_mir | 1.31ms | 0.002 | 4 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_item_types | 1.23ms | 0.002 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | param_env | 1.17ms | 0.002 | 102 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | collect_mod_item_types | 1.13ms | 0.002 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | LLVM_module_optimize_function_passes | 1.12ms | 0.002 | 16 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | codegen_fulfill_obligation | 1.11ms | 0.002 | 48 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | type_check_crate | 1.08ms | 0.002 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | const_eval | 1.06ms | 0.002 | 175 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_freeze_raw | 1.03ms | 0.002 | 225 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_sized_raw | 1.02ms | 0.002 | 219 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | super_predicates_of | 968.90µs | 0.002 | 15 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | type_op_ascribe_user_type | 891.00µs | 0.002 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | needs_drop_raw | 882.90µs | 0.002 | 522 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | predicates_of | 881.30µs | 0.002 | 203 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_copy_raw | 879.20µs | 0.002 | 231 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | const_caller_location | 871.70µs | 0.002 | 15 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_match | 856.70µs | 0.002 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_const_qualif | 848.90µs | 0.002 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | inferred_outlives_of | 838.90µs | 0.001 | 203 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | predicates_defined_on | 822.40µs | 0.001 | 203 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | implementations_of_trait | 805.00µs | 0.001 | 476 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | unsafety_check_result | 804.50µs | 0.001 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_validated | 767.50µs | 0.001 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_impl_wf | 758.20µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | codegen_fn_attrs | 740.50µs | 0.001 | 133 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_const | 629.80µs | 0.001 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_privacy | 609.90µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_keys | 603.90µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | inferred_outlives_crate | 586.10µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | def_kind | 548.20µs | 0.001 | 308 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | lint_mod | 544.50µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | specializes | 541.60µs | 0.001 | 60 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | associated_item | 536.70µs | 0.001 | 143 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_mir_available | 515.60µs | 0.001 | 96 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | variances_of | 511.40µs | 0.001 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | region_scope_tree | 459.60µs | 0.001 | 22 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_private_in_public | 458.20µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | cgu_partitioning_place_roots | 453.00µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_liveness | 446.80µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | fn_sig | 445.70µs | 0.001 | 143 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | method_autoderef_steps | 427.20µs | 0.001 | 6 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | associated_item_def_ids | 412.00µs | 0.001 | 64 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | coherent_trait | 380.40µs | 0.001 | 9 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | trait_def | 364.60µs | 0.001 | 32 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | normalize_projection_ty | 341.50µs | 0.001 | 3 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | privacy_access_levels | 334.50µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_unstable_api_usage | 304.40µs | 0.001 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | def_span | 272.80µs | 0.000 | 141 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | collect_and_partition_mono_items | 262.90µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | vtable_methods | 262.90µs | 0.000 | 3 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | trait_of_item | 249.00µs | 0.000 | 131 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | implied_outlives_bounds | 231.50µs | 0.000 | 13 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | dropck_outlives | 217.70µs | 0.000 | 18 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | mir_shims | 215.50µs | 0.000 | 9 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | impl_polarity | 202.40µs | 0.000 | 96 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_impl_item_well_formed | 199.70µs | 0.000 | 5 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_foreign_item | 192.40µs | 0.000 | 107 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_reachable_non_generic | 187.30µs | 0.000 | 101 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | get_lang_items | 158.40µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | dependency_formats | 157.00µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | adt_dtorck_constraint | 149.50µs | 0.000 | 10 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | codegen_module_optimize | 143.60µs | 0.000 | 17 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | cgu_partitioning | 139.90µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | monomorphization_collector_root_collections | 118.20µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_attrs | 118.00µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | target_features_whitelist | 110.50µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | codegen_unit | 101.00µs | 0.000 | 16 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | reachable_non_generics | 98.40µs | 0.000 | 4 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_trait_item_well_formed | 94.50µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | adt_sized_constraint | 94.30µs | 0.000 | 27 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | lint_levels | 91.20µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | instance_def_size_estimate | 89.90µs | 0.000 | 92 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | stability_index | 89.00µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | normalize_ty_after_erasing_regions | 88.80µs | 0.000 | 11 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_loops | 88.40µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_intrinsics | 83.30µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | upstream_monomorphizations_for | 82.70µs | 0.000 | 59 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_codegened_item | 78.10µs | 0.000 | 34 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | exported_symbols | 78.00µs | 0.000 | 15 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | lookup_deprecation_entry | 70.20µs | 0.000 | 33 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | cgu_partitioning_merge_cgus | 65.20µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_panic_runtime | 62.00µs | 0.000 | 15 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | upstream_monomorphizations | 61.60µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | lookup_stability | 59.60µs | 0.000 | 30 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | reachable_set | 55.70µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | visibility | 54.60µs | 0.000 | 26 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | object_lifetime_defaults_map | 53.80µs | 0.000 | 23 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | adt_destructor | 49.30µs | 0.000 | 10 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | check_mod_const_bodies | 49.00µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | static_mutability | 48.80µs | 0.000 | 24 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | cgu_partitioning_place_inline_items | 46.50µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | issue33140_self_ty | 45.40µs | 0.000 | 37 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | typeck_item_bodies | 44.10µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | cgu_partitioning_internalize_symbols | 44.10µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | substitute_normalize_and_test_predicates | 44.00µs | 0.000 | 2 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | backend_optimization_level | 40.40µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | get_lib_features | 36.50µs | 0.000 | 1 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | crate_name | 35.00µs | 0.000 | 15 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+-----------+-----------------+------------+------------+--------------+-----------------------+ | is_compiler_builtins | 33.30µs | 0.000 | 15 | 0 | 0.00ns | 0.00ns | +---------------------------------------------+------…
2 parents b8f8638 + e0481d1 commit 398ed7f

File tree

5 files changed

+41
-37
lines changed

5 files changed

+41
-37
lines changed

Diff for: src/librustc_mir/borrow_check/nll/constraint_generation.rs

+4
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ impl<'cg, 'cx, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'cx, 'tcx> {
9797
location: Location,
9898
) {
9999
if let Some(all_facts) = self.all_facts {
100+
let _prof_timer = self.infcx.tcx.prof.generic_activity("polonius_fact_generation");
100101
all_facts.cfg_edge.push((
101102
self.location_table.start_index(location),
102103
self.location_table.mid_index(location),
@@ -142,6 +143,7 @@ impl<'cg, 'cx, 'tcx> Visitor<'tcx> for ConstraintGeneration<'cg, 'cx, 'tcx> {
142143
location: Location,
143144
) {
144145
if let Some(all_facts) = self.all_facts {
146+
let _prof_timer = self.infcx.tcx.prof.generic_activity("polonius_fact_generation");
145147
all_facts.cfg_edge.push((
146148
self.location_table.start_index(location),
147149
self.location_table.mid_index(location),
@@ -205,6 +207,8 @@ impl<'cx, 'cg, 'tcx> ConstraintGeneration<'cx, 'cg, 'tcx> {
205207
/// as `killed`. For example, when assigning to a local, or on a call's return destination.
206208
fn record_killed_borrows_for_place(&mut self, place: &Place<'tcx>, location: Location) {
207209
if let Some(all_facts) = self.all_facts {
210+
let _prof_timer = self.infcx.tcx.prof.generic_activity("polonius_fact_generation");
211+
208212
// Depending on the `Place` we're killing:
209213
// - if it's a local, or a single deref of a local,
210214
// we kill all the borrows on the local.

Diff for: src/librustc_mir/borrow_check/nll/invalidation.rs

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ pub(super) fn generate_invalidates<'tcx>(
3131
}
3232

3333
if let Some(all_facts) = all_facts {
34+
let _prof_timer = tcx.prof.generic_activity("polonius_fact_generation");
3435
let dominators = body.dominators();
3536
let mut ig = InvalidationGenerator {
3637
all_facts,

Diff for: src/librustc_mir/borrow_check/nll/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ pub(in crate::borrow_check) fn compute_regions<'cx, 'tcx>(
201201
);
202202

203203
if let Some(all_facts) = &mut all_facts {
204+
let _prof_timer = infcx.tcx.prof.generic_activity("polonius_fact_generation");
204205
all_facts
205206
.universal_region
206207
.extend(universal_regions.universal_regions());
@@ -302,6 +303,7 @@ pub(in crate::borrow_check) fn compute_regions<'cx, 'tcx>(
302303
.unwrap_or_else(|_| String::from("Naive"));
303304
let algorithm = Algorithm::from_str(&algorithm).unwrap();
304305
debug!("compute_regions: using polonius algorithm {:?}", algorithm);
306+
let _prof_timer = infcx.tcx.prof.generic_activity("polonius_analysis");
305307
Some(Rc::new(Output::compute(
306308
&all_facts,
307309
algorithm,

Diff for: src/librustc_mir/borrow_check/nll/type_check/liveness/polonius.rs

+29-35
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,19 @@ use crate::util::liveness::{categorize, DefUse};
55
use rustc::mir::visit::{MutatingUseContext, PlaceContext, Visitor};
66
use rustc::mir::{Local, Location, Place, ReadOnlyBodyAndCache};
77
use rustc::ty::subst::GenericArg;
8-
use rustc::ty::Ty;
98

109
use super::TypeChecker;
1110

12-
type VarPointRelations = Vec<(Local, LocationIndex)>;
13-
type MovePathPointRelations = Vec<(MovePathIndex, LocationIndex)>;
11+
type VarPointRelation = Vec<(Local, LocationIndex)>;
12+
type PathPointRelation = Vec<(MovePathIndex, LocationIndex)>;
1413

1514
struct UseFactsExtractor<'me> {
16-
var_defined: &'me mut VarPointRelations,
17-
var_used: &'me mut VarPointRelations,
15+
var_defined: &'me mut VarPointRelation,
16+
var_used: &'me mut VarPointRelation,
1817
location_table: &'me LocationTable,
1918
var_drop_used: &'me mut Vec<(Local, Location)>,
2019
move_data: &'me MoveData<'me>,
21-
path_accessed_at: &'me mut MovePathPointRelations,
20+
path_accessed_at: &'me mut PathPointRelation,
2221
}
2322

2423
// A Visitor to walk through the MIR and extract point-wise facts
@@ -28,22 +27,22 @@ impl UseFactsExtractor<'_> {
2827
}
2928

3029
fn insert_def(&mut self, local: Local, location: Location) {
31-
debug!("LivenessFactsExtractor::insert_def()");
30+
debug!("UseFactsExtractor::insert_def()");
3231
self.var_defined.push((local, self.location_to_index(location)));
3332
}
3433

3534
fn insert_use(&mut self, local: Local, location: Location) {
36-
debug!("LivenessFactsExtractor::insert_use()");
35+
debug!("UseFactsExtractor::insert_use()");
3736
self.var_used.push((local, self.location_to_index(location)));
3837
}
3938

4039
fn insert_drop_use(&mut self, local: Local, location: Location) {
41-
debug!("LivenessFactsExtractor::insert_drop_use()");
40+
debug!("UseFactsExtractor::insert_drop_use()");
4241
self.var_drop_used.push((local, location));
4342
}
4443

4544
fn insert_path_access(&mut self, path: MovePathIndex, location: Location) {
46-
debug!("LivenessFactsExtractor::insert_path_access({:?}, {:?})", path, location);
45+
debug!("UseFactsExtractor::insert_path_access({:?}, {:?})", path, location);
4746
self.path_accessed_at.push((path, self.location_to_index(location)));
4847
}
4948

@@ -84,44 +83,39 @@ impl Visitor<'tcx> for UseFactsExtractor<'_> {
8483
}
8584
}
8685

87-
fn add_var_uses_regions(typeck: &mut TypeChecker<'_, 'tcx>, local: Local, ty: Ty<'tcx>) {
88-
debug!("add_regions(local={:?}, type={:?})", local, ty);
89-
typeck.tcx().for_each_free_region(&ty, |region| {
90-
let region_vid = typeck.borrowck_context.universal_regions.to_region_vid(region);
91-
debug!("add_regions for region {:?}", region_vid);
92-
if let Some(facts) = typeck.borrowck_context.all_facts {
93-
facts.var_uses_region.push((local, region_vid));
94-
}
95-
});
96-
}
97-
9886
pub(super) fn populate_access_facts(
9987
typeck: &mut TypeChecker<'_, 'tcx>,
10088
body: ReadOnlyBodyAndCache<'_, 'tcx>,
10189
location_table: &LocationTable,
10290
move_data: &MoveData<'_>,
10391
drop_used: &mut Vec<(Local, Location)>,
10492
) {
105-
debug!("populate_var_liveness_facts()");
93+
debug!("populate_access_facts()");
10694

10795
if let Some(facts) = typeck.borrowck_context.all_facts.as_mut() {
108-
UseFactsExtractor {
96+
let mut extractor = UseFactsExtractor {
10997
var_defined: &mut facts.var_defined,
11098
var_used: &mut facts.var_used,
11199
var_drop_used: drop_used,
112100
path_accessed_at: &mut facts.path_accessed_at,
113101
location_table,
114102
move_data,
115-
}
116-
.visit_body(body);
103+
};
104+
extractor.visit_body(body);
117105

118106
facts.var_drop_used.extend(drop_used.iter().map(|&(local, location)| {
119107
(local, location_table.mid_index(location))
120108
}));
121-
}
122109

123-
for (local, local_decl) in body.local_decls.iter_enumerated() {
124-
add_var_uses_regions(typeck, local, local_decl.ty);
110+
for (local, local_decl) in body.local_decls.iter_enumerated() {
111+
debug!("add var_uses_regions facts - local={:?}, type={:?}", local, local_decl.ty);
112+
let _prof_timer = typeck.infcx.tcx.prof.generic_activity("polonius_fact_generation");
113+
let universal_regions = &typeck.borrowck_context.universal_regions;
114+
typeck.infcx.tcx.for_each_free_region(&local_decl.ty, |region| {
115+
let region_vid = universal_regions.to_region_vid(region);
116+
facts.var_uses_region.push((local, region_vid));
117+
});
118+
}
125119
}
126120
}
127121

@@ -133,12 +127,12 @@ pub(super) fn add_var_drops_regions(
133127
kind: &GenericArg<'tcx>,
134128
) {
135129
debug!("add_var_drops_region(local={:?}, kind={:?}", local, kind);
136-
let tcx = typeck.tcx();
137-
138-
tcx.for_each_free_region(kind, |drop_live_region| {
139-
let region_vid = typeck.borrowck_context.universal_regions.to_region_vid(drop_live_region);
140-
if let Some(facts) = typeck.borrowck_context.all_facts.as_mut() {
130+
if let Some(facts) = typeck.borrowck_context.all_facts.as_mut() {
131+
let _prof_timer = typeck.infcx.tcx.prof.generic_activity("polonius_fact_generation");
132+
let universal_regions = &typeck.borrowck_context.universal_regions;
133+
typeck.infcx.tcx.for_each_free_region(kind, |drop_live_region| {
134+
let region_vid = universal_regions.to_region_vid(drop_live_region);
141135
facts.var_drops_region.push((local, region_vid));
142-
};
143-
});
136+
});
137+
}
144138
}

Diff for: src/librustc_mir/borrow_check/nll/type_check/mod.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ pub(crate) fn type_check<'tcx>(
182182
move_data,
183183
location_table);
184184

185-
translate_outlives_facts(cx.borrowck_context);
185+
translate_outlives_facts(&mut cx);
186186
},
187187
);
188188

@@ -228,8 +228,10 @@ fn type_check_internal<'a, 'tcx, R>(
228228
extra(&mut checker)
229229
}
230230

231-
fn translate_outlives_facts(cx: &mut BorrowCheckContext<'_, '_>) {
231+
fn translate_outlives_facts(typeck: &mut TypeChecker<'_, '_>) {
232+
let cx = &mut typeck.borrowck_context;
232233
if let Some(facts) = cx.all_facts {
234+
let _prof_timer = typeck.infcx.tcx.prof.generic_activity("polonius_fact_generation");
233235
let location_table = cx.location_table;
234236
facts
235237
.outlives
@@ -2489,6 +2491,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
24892491
// that occurs when we are borrowing an unsafe place, for
24902492
// example).
24912493
if let Some(all_facts) = all_facts {
2494+
let _prof_timer = self.infcx.tcx.prof.generic_activity("polonius_fact_generation");
24922495
if let Some(borrow_index) = borrow_set.location_map.get(&location) {
24932496
let region_vid = borrow_region.to_region_vid();
24942497
all_facts.borrow_region.push((

0 commit comments

Comments
 (0)