Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

item_bodies_checking CPU time and liveness_and_intrinsic_checking mem usage explode on a generated ~2.5MB .rs file #79671

Open
yupferris opened this issue Dec 3, 2020 · 14 comments
Labels
C-bug Category: This is a bug. I-compilemem Issue: Problems and improvements with respect to memory usage during compilation. I-compiletime Issue: Problems and improvements with respect to compile times. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@yupferris
Copy link

yupferris commented Dec 3, 2020

I've been working on a compiler project to be able to describe digital logic in rust. This logic can be compiled to Verilog for use on FPGA or in silicon, and in order to test, it can be compiled to a simulator as pure rust code. The idea is that a user would use a build.rs script to compile the relevant module(s) and output to a modules.rs file, and then the hw module(s) can be tested/verified with regular rust code/tests.

The main project I'm building with this is getting to the point where the simulator exposes some scaling issues. In particular, when compiling the generated rust code, rustc's memory usage stays around 100-150MB for most of the process, but then suddenly jumps to 11GB+(!!!) towards the end, before either completing (mac) or causing my system to come to a grinding halt (windows) and requiring a hw reset (due to the exorbitant memory usage causing constant swapping). Additionally, the compilation process takes well over a minute for this single file.

I've packed one such modules.rs into a project. It's enough to cargo build [--release] to reproduce the issue. The file contains a single simulator struct. Its new fn is relatively normal, as is its posedge_clk fn. Its prop fn is very large - this is where the majority of the logic lives to propagate signals through the design. So I would imagine there's something that scales superlinearly that tends to work fine under more typical circumstances, but for a large fn with loads of bindings, it blows up.

I did a bit of preliminary profiling out of curiosity. Running cargo rustc --release -- -Z self-profile yields this:

(summary output for `a`)

$ summarize summarize a-42631.mm_profdata 
+-------------------------------------------------+-----------+-----------------+----------+------------+
| Item                                            | Self time | % of total time | Time     | Item count |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| typeck                                          | 63.82s    | 78.922          | 63.85s   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_liveness                              | 14.71s    | 18.197          | 14.71s   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_borrowck                                    | 497.69ms  | 0.615           | 912.49ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| run_linker                                      | 390.20ms  | 0.483           | 390.20ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_built                                       | 374.79ms  | 0.463           | 377.57ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| expand_crate                                    | 194.45ms  | 0.240           | 213.22ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_match                                     | 138.03ms  | 0.171           | 138.04ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| resolve_crate                                   | 118.20ms  | 0.146           | 118.20ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_lowering                                    | 70.37ms   | 0.087           | 70.37ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| free_global_ctxt                                | 68.06ms   | 0.084           | 68.06ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lint_mod                                        | 41.90ms   | 0.052           | 41.90ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| build_hir_map                                   | 41.35ms   | 0.051           | 41.35ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| region_scope_tree                               | 40.12ms   | 0.050           | 40.12ms  | 7          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_privacy                               | 34.40ms   | 0.043           | 34.48ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| drop_ast                                        | 33.45ms   | 0.041           | 33.45ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| early_lint_checks                               | 20.03ms   | 0.025           | 20.03ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_passes                                     | 18.37ms   | 0.023           | 18.56ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_codegen_emit_obj                    | 17.20ms   | 0.021           | 17.20ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_promoted                                    | 16.02ms   | 0.020           | 413.11ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| analysis                                        | 15.55ms   | 0.019           | 79.84s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| pre_AST_expansion_lint_checks                   | 12.58ms   | 0.016           | 12.58ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_lto_optimize                               | 12.10ms   | 0.015           | 12.10ms  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_const                                       | 11.29ms   | 0.014           | 397.01ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_item_children             | 10.04ms   | 0.012           | 10.04ms  | 4649       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| unsafety_check_result                           | 6.92ms    | 0.009           | 385.23ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_optimize_module_passes              | 5.96ms    | 0.007           | 5.96ms   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| evaluate_obligation                             | 5.84ms    | 0.007           | 14.75ms  | 127        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_adt_def                   | 5.80ms    | 0.007           | 9.64ms   | 972        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_lints                                     | 5.72ms    | 0.007           | 5.80ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| predicates_of                                   | 5.65ms    | 0.007           | 10.25ms  | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_item_attrs                | 5.23ms    | 0.006           | 5.23ms   | 997        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_intrinsics                            | 4.88ms    | 0.006           | 4.88ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_register_crate                         | 4.68ms    | 0.006           | 6.82ms   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_trait_ref            | 4.39ms    | 0.005           | 14.07ms  | 1572       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_attrs                                 | 4.12ms    | 0.005           | 4.47ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| complete_gated_feature_checking                 | 3.83ms    | 0.005           | 3.83ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lint_levels                                     | 3.55ms    | 0.004           | 3.55ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_private_in_public                         | 3.33ms    | 0.004           | 3.36ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| resolve_lifetimes                               | 3.19ms    | 0.004           | 3.22ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| collect_mod_item_types                          | 2.76ms    | 0.003           | 10.23ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| AST_validation                                  | 2.62ms    | 0.003           | 2.62ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_optimize                            | 2.59ms    | 0.003           | 10.29ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_module_optimize                         | 2.50ms    | 0.003           | 16.40ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| death_checking                                  | 2.34ms    | 0.003           | 5.92ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_loops                                 | 2.04ms    | 0.003           | 2.04ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| privacy_access_levels                           | 1.97ms    | 0.002           | 1.98ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| self_profile_alloc_query_strings                | 1.90ms    | 0.002           | 1.90ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_module                                  | 1.85ms    | 0.002           | 4.95ms   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| wf_checking                                     | 1.79ms    | 0.002           | 43.75ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_children                                   | 1.77ms    | 0.002           | 11.81ms  | 4649       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_optimize_function_passes            | 1.74ms    | 0.002           | 1.74ms   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_codegen                             | 1.72ms    | 0.002           | 18.92ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| param_env                                       | 1.68ms    | 0.002           | 3.51ms   | 299        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_const_bodies                          | 1.55ms    | 0.002           | 1.56ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| get_lib_features                                | 1.55ms    | 0.002           | 1.55ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_load_macro                             | 1.54ms    | 0.002           | 1.54ms   | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| stability_index                                 | 1.54ms    | 0.002           | 1.54ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_unstable_api_usage                    | 1.46ms    | 0.002           | 3.12ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| visible_parent_map                              | 1.38ms    | 0.002           | 13.23ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| predicates_defined_on                           | 1.32ms    | 0.002           | 4.21ms   | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| trait_impls_of                                  | 1.31ms    | 0.002           | 2.06ms   | 26         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_def_span                  | 1.25ms    | 0.002           | 1.25ms   | 324        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_generics_of               | 1.06ms    | 0.001           | 1.06ms   | 1571       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| generics_of                                     | 1.05ms    | 0.001           | 5.36ms   | 2928       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| parse_crate                                     | 1.05ms    | 0.001           | 1.05ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| setup_global_ctxt                               | 1.01ms    | 0.001           | 1.01ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_optimized_mir             | 998.43µs  | 0.001           | 1.01ms   | 28         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_associated_item_def_ids   | 993.72µs  | 0.001           | 993.72µs | 73         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_crate                                   | 993.27µs  | 0.001           | 33.87ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_item_well_formed                          | 949.86µs  | 0.001           | 1.52ms   | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_module_perform_lto                      | 915.64µs  | 0.001           | 28.69ms  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| vtable_methods                                  | 905.31µs  | 0.001           | 3.85ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_op_prove_predicate                         | 894.86µs  | 0.001           | 1.32ms   | 30         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| specializes                                     | 834.32µs  | 0.001           | 2.93ms   | 444        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| drop_compiler                                   | 767.77µs  | 0.001           | 767.77µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| eval_to_allocation_raw                          | 742.39µs  | 0.001           | 15.36ms  | 24         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| explicit_predicates_of                          | 729.46µs  | 0.001           | 1.37ms   | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_def                                         | 728.89µs  | 0.001           | 10.52ms  | 973        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| resolve_instance                                | 629.76µs  | 0.001           | 2.43ms   | 25         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_binary                                     | 626.47µs  | 0.001           | 391.38ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| layout_raw                                      | 594.55µs  | 0.001           | 2.79ms   | 73         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_fn_sig                    | 587.68µs  | 0.001           | 648.99µs | 38         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| inferred_outlives_crate                         | 575.19µs  | 0.001           | 1.10ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_implementations_of_trait  | 571.50µs  | 0.001           | 571.50µs | 390        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_fn_attrs                                | 551.70µs  | 0.001           | 2.47ms   | 35         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_trait_ref                                  | 533.98µs  | 0.001           | 14.61ms  | 1573       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link                                            | 529.91µs  | 0.001           | 391.95ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_binary_remove_temps                        | 491.66µs  | 0.001           | 491.66µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_explicit_predicates_of    | 481.45µs  | 0.001           | 481.45µs | 382        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| def_kind                                        | 478.00µs  | 0.001           | 618.36µs | 1763       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_type_of                   | 467.71µs  | 0.001           | 664.90µs | 112        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| monomorphization_collector_graph_walk           | 442.63µs  | 0.001           | 24.44ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| prepare_outputs                                 | 436.36µs  | 0.001           | 436.36µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_of                                         | 421.55µs  | 0.001           | 1.76ms   | 1466       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| associated_items                                | 403.52µs  | 0.000           | 1.80ms   | 73         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| def_span                                        | 360.74µs  | 0.000           | 1.61ms   | 1681       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_copy_raw                                     | 357.05µs  | 0.000           | 2.48ms   | 18         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| symbol_name                                     | 355.19µs  | 0.000           | 406.19µs | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_fulfill_obligation                      | 349.28µs  | 0.000           | 605.93µs | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_op_ascribe_user_type                       | 340.78µs  | 0.000           | 340.78µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| inferred_outlives_of                            | 297.45µs  | 0.000           | 1.52ms   | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| normalize_projection_ty                         | 293.07µs  | 0.000           | 458.63µs | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_import                            | 292.17µs  | 0.000           | 292.17µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| optimized_mir                                   | 283.55µs  | 0.000           | 2.31ms   | 29         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_sized_raw                                    | 282.34µs  | 0.000           | 343.65µs | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_attrs                                      | 278.66µs  | 0.000           | 5.51ms   | 997        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lookup_deprecation_entry                        | 256.29µs  | 0.000           | 1.82ms   | 1364       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| associated_item                                 | 236.81µs  | 0.000           | 442.39µs | 524        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_trait_of_item             | 218.15µs  | 0.000           | 218.15µs | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_shims                                       | 216.51µs  | 0.000           | 344.81µs | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_diagnostic_items          | 213.79µs  | 0.000           | 213.79µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| visibility                                      | 208.13µs  | 0.000           | 215.94µs | 1377       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| specialization_graph_of                         | 205.87µs  | 0.000           | 1.93ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_associated_item           | 196.88µs  | 0.000           | 196.88µs | 520        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_impl_item_well_formed                     | 178.56µs  | 0.000           | 40.43ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_global_analysis                   | 167.55µs  | 0.000           | 167.55µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_item_types                            | 166.71µs  | 0.000           | 2.03ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| implementations_of_trait                        | 165.27µs  | 0.000           | 736.77µs | 390        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lit_to_const                                    | 163.01µs  | 0.000           | 172.09µs | 127        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| method_autoderef_steps                          | 155.76µs  | 0.000           | 428.60µs | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| normalize_generic_arg_after_erasing_regions     | 146.80µs  | 0.000           | 15.85ms  | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| promoted_mir                                    | 145.57µs  | 0.000           | 145.57µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| erase_regions_ty                                | 144.51µs  | 0.000           | 191.99µs | 47         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_parent               | 143.28µs  | 0.000           | 143.28µs | 99         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_dtorck_constraint                           | 141.87µs  | 0.000           | 429.38µs | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_def_kind                  | 140.36µs  | 0.000           | 140.36µs | 405        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_exported_symbols          | 133.94µs  | 0.000           | 133.94µs | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_drops_elaborated_and_const_checked          | 133.15µs  | 0.000           | 136.50µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_inferred_outlives_of      | 128.91µs  | 0.000           | 128.91µs | 382        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_polarity             | 125.56µs  | 0.000           | 125.56µs | 283        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| configure_and_expand                            | 123.92µs  | 0.000           | 338.09ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_super_predicates_of       | 121.02µs  | 0.000           | 121.02µs | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| eval_to_const_value_raw                         | 115.21µs  | 0.000           | 30.90ms  | 44         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_polarity                                   | 109.87µs  | 0.000           | 235.43µs | 284        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| issue33140_self_ty                              | 104.63µs  | 0.000           | 133.99µs | 242        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_freeze_raw                                   | 99.04µs   | 0.000           | 1.57ms   | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dropck_outlives                                 | 97.43µs   | 0.000           | 371.14µs | 11         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| get_lang_items                                  | 96.91µs   | 0.000           | 144.43µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| write_allocator_module                          | 91.47µs   | 0.000           | 91.47µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| associated_item_def_ids                         | 90.36µs   | 0.000           | 1.08ms   | 74         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| fn_sig                                          | 89.77µs   | 0.000           | 738.76µs | 43         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_reachable_non_generics    | 88.93µs   | 0.000           | 178.30µs | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_place_roots                    | 80.40µs   | 0.000           | 112.14µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dependency_formats                              | 74.24µs   | 0.000           | 141.68µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| liveness_and_intrinsic_checking                 | 70.33µs   | 0.000           | 14.72s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_check_crate                                | 69.05µs   | 0.000           | 63.91s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| implied_outlives_bounds                         | 64.75µs   | 0.000           | 64.75µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_binary_check_files_are_writeable           | 60.27µs   | 0.000           | 60.27µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| needs_drop_raw                                  | 58.75µs   | 0.000           | 2.08ms   | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| MIR_borrow_checking                             | 57.32µs   | 0.000           | 912.55ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_lookup_stability          | 55.38µs   | 0.000           | 55.38µs  | 18         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| subst_and_check_impossible_predicates           | 55.31µs   | 0.000           | 165.82µs | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| monomorphization_collector_root_collections     | 51.69µs   | 0.000           | 511.23µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| create_global_ctxt                              | 50.98µs   | 0.000           | 1.06ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_keys                                        | 48.09µs   | 0.000           | 48.09µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| exported_symbols                                | 47.06µs   | 0.000           | 181.00µs | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_injection                                 | 44.05µs   | 0.000           | 44.05µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_sized_constraint                            | 43.58µs   | 0.000           | 117.16µs | 12         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| reachable_non_generics                          | 40.93µs   | 0.000           | 241.16µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_trait_def                 | 39.09µs   | 0.000           | 39.09µs  | 19         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| misc_checking_1                                 | 37.93µs   | 0.000           | 11.35ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_const_qualif                                | 37.68µs   | 0.000           | 37.68µs  | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| misc_checking_3                                 | 36.00µs   | 0.000           | 95.07ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_naked_functions                       | 34.97µs   | 0.000           | 34.97µs  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_reachable_non_generic                        | 34.73µs   | 0.000           | 275.88µs | 14         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_abstract_const                              | 34.56µs   | 0.000           | 34.56µs  | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_parent                                     | 33.56µs   | 0.000           | 176.84µs | 99         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| static_mutability                               | 32.02µs   | 0.000           | 36.62µs  | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_destructor                                  | 31.72µs   | 0.000           | 1.85ms   | 9          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| trait_of_item                                   | 31.36µs   | 0.000           | 249.51µs | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| trait_def                                       | 31.08µs   | 0.000           | 70.17µs  | 19         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_adt_destructor            | 30.33µs   | 0.000           | 65.03µs  | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_mir_available                                | 29.89µs   | 0.000           | 97.88µs  | 28         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| unused_lib_feature_checking                     | 29.86µs   | 0.000           | 1.58ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| inherent_impls                                  | 29.68µs   | 0.000           | 41.62µs  | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| collect_and_partition_mono_items                | 29.57µs   | 0.000           | 25.57ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_rename                            | 28.83µs   | 0.000           | 28.83µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| supported_target_features                       | 28.30µs   | 0.000           | 28.30µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| variances_of                                    | 27.23µs   | 0.000           | 58.13µs  | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_merge_cgus                     | 27.09µs   | 0.000           | 27.09µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_lookup_deprecation_entry  | 26.82µs   | 0.000           | 26.82µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_expn_that_defined         | 25.80µs   | 0.000           | 25.80µs  | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| expn_that_defined                               | 25.75µs   | 0.000           | 51.55µs  | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_drop_tys                                    | 25.59µs   | 0.000           | 123.70µs | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_profiler_runtime                             | 25.29µs   | 0.000           | 26.14µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_late_bound_map                               | 24.27µs   | 0.000           | 24.27µs  | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_impl_wf                               | 23.88µs   | 0.000           | 23.88µs  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| assert_symbols_are_distinct                     | 23.74µs   | 0.000           | 394.67µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| object_lifetime_defaults_map                    | 22.61µs   | 0.000           | 3.24ms   | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_collecting                                 | 22.39µs   | 0.000           | 10.25ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_missing_extern_crate_item | 21.13µs   | 0.000           | 21.13µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_foreign_item                                 | 20.39µs   | 0.000           | 27.75µs  | 13         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| typeck_item_bodies                              | 20.26µs   | 0.000           | 63.85s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_mir_available          | 19.90µs   | 0.000           | 19.90µs  | 27         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| looking_for_entry_point                         | 19.56µs   | 0.000           | 33.35µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| index_hir                                       | 19.39µs   | 0.000           | 41.37ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| coherent_trait                                  | 18.99µs   | 0.000           | 1.76ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_variances                                 | 18.72µs   | 0.000           | 18.72µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lookup_stability                                | 18.70µs   | 0.000           | 74.08µs  | 19         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| join_worker_thread                              | 17.64µs   | 0.000           | 17.64µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| match_checking                                  | 17.54µs   | 0.000           | 138.05ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| missing_extern_crate_item                       | 17.53µs   | 0.000           | 38.65µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| reachable_set                                   | 17.16µs   | 0.000           | 17.16µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_generate_lto_work                       | 16.97µs   | 0.000           | 187.31µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_internalize                       | 16.49µs   | 0.000           | 16.49µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning                                | 16.42µs   | 0.000           | 182.65µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| coherence_checking                              | 16.21µs   | 0.000           | 50.58µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_panic_runtime                                | 14.97µs   | 0.000           | 17.08µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| super_predicates_of                             | 14.83µs   | 0.000           | 135.86µs | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| defined_lang_items                              | 14.58µs   | 0.000           | 24.70µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| MIR_effect_checking                             | 14.33µs   | 0.000           | 14.33µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_owner                                       | 14.14µs   | 0.000           | 41.38ms  | 11         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| looking_for_derive_registrar                    | 14.01µs   | 0.000           | 22.04µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| entry_fn                                        | 13.79µs   | 0.000           | 13.79µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_place_inline_items             | 13.35µs   | 0.000           | 13.35µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_inherent_impls                            | 13.27µs   | 0.000           | 13.27µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| native_libraries                                | 13.18µs   | 0.000           | 20.85µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_owner_nodes                                 | 13.08µs   | 0.000           | 13.08µs  | 7          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| looking_for_plugin_registrar                    | 12.89µs   | 0.000           | 19.60µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_used_crate_source         | 12.64µs   | 0.000           | 12.64µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_name                                      | 12.46µs   | 0.000           | 13.56µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_variances_of              | 12.18µs   | 0.000           | 12.18µs  | 7          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_inherent_impls            | 11.94µs   | 0.000           | 11.94µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| normalize_opaque_types                          | 11.62µs   | 0.000           | 11.62µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_resolve_weak                      | 11.11µs   | 0.000           | 11.11µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| parent_module_from_def_id                       | 10.66µs   | 0.000           | 10.66µs  | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| panic_strategy                                  | 10.59µs   | 0.000           | 11.47µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| upvars_mentioned                                | 10.22µs   | 0.000           | 10.22µs  | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_unit                                    | 10.19µs   | 0.000           | 10.19µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_defined_lang_items        | 10.12µs   | 0.000           | 10.12µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_inherent_impls_overlap_check              | 9.82µs    | 0.000           | 13.51µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| used_crate_source                               | 9.66µs    | 0.000           | 22.30µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| assert_dep_graph                                | 9.39µs    | 0.000           | 9.39µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| macro_expand_crate                              | 9.24µs    | 0.000           | 213.22ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_module_items                                | 9.13µs    | 0.000           | 9.13µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| all_crate_nums                                  | 8.87µs    | 0.000           | 8.87µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| finish_ongoing_codegen                          | 8.79µs    | 0.000           | 26.43µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| original_crate_name                             | 8.66µs    | 0.000           | 8.87µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| extern_crate                                    | 8.39µs    | 0.000           | 8.92µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dep_kind                                        | 8.32µs    | 0.000           | 11.04µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_crate                                       | 8.30µs    | 0.000           | 8.30µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| proc_macro_decls_static                         | 8.03µs    | 0.000           | 8.03µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_internalize_symbols            | 8.01µs    | 0.000           | 8.01µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| recursion_limit                                 | 7.96µs    | 0.000           | 7.96µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_visibility                | 7.81µs    | 0.000           | 7.81µs   | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_native_libraries          | 7.68µs    | 0.000           | 7.68µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| module_exports                                  | 7.57µs    | 0.000           | 7.57µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| missing_lang_items                              | 7.52µs    | 0.000           | 13.95µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_foreign_item           | 7.36µs    | 0.000           | 7.36µs   | 13         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| module_lints                                    | 6.83µs    | 0.000           | 41.90ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_const_fn_raw                                 | 6.82µs    | 0.000           | 6.82µs   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| backend_optimization_level                      | 6.78µs    | 0.000           | 6.78µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_wf_inference                               | 6.75µs    | 0.000           | 30.63µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| maybe_create_a_macro_crate                      | 6.74µs    | 0.000           | 6.74µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| privacy_checking_modules                        | 6.73µs    | 0.000           | 34.49ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| plugin_registrar_fn                             | 6.71µs    | 0.000           | 6.71µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| symbol_mangling_version                         | 6.66µs    | 0.000           | 7.37µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| opt_const_param_of                              | 6.66µs    | 0.000           | 6.66µs   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_missing_lang_items        | 6.43µs    | 0.000           | 6.43µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_defaultness                                | 6.30µs    | 0.000           | 8.48µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| features_query                                  | 6.29µs    | 0.000           | 6.29µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_codegened_item                               | 6.10µs    | 0.000           | 6.10µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| named_region_map                                | 5.73µs    | 0.000           | 5.73µs   | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| partition_and_assert_distinct_symbols           | 5.73µs    | 0.000           | 583.05µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| serialize_work_products                         | 5.69µs    | 0.000           | 5.69µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| instance_def_size_estimate                      | 5.65µs    | 0.000           | 5.65µs   | 13         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_disambiguator                             | 5.41µs    | 0.000           | 5.65µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_args                                       | 5.19µs    | 0.000           | 5.19µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_compiler_builtins                            | 5.12µs    | 0.000           | 5.89µs   | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_types_checking                             | 5.12µs    | 0.000           | 2.03ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| orphan_checking                                 | 5.00µs    | 0.000           | 5.00µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| in_scope_traits_map                             | 4.96µs    | 0.000           | 4.96µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| diagnostic_items                                | 4.84µs    | 0.000           | 218.63µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_static_mutability         | 4.60µs    | 0.000           | 4.60µs   | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| extern_mod_stmt_cnum                            | 4.52µs    | 0.000           | 4.52µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| all_local_trait_impls                           | 4.50µs    | 0.000           | 4.50µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| postorder_cnums                                 | 4.44µs    | 0.000           | 4.44µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| misc_checking_2                                 | 4.38µs    | 0.000           | 14.86s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lint_checking                                   | 4.23µs    | 0.000           | 47.71ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_no_builtins                                  | 4.06µs    | 0.000           | 4.84µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_crate                                      | 3.82µs    | 0.000           | 391.39ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| output_filenames                                | 3.80µs    | 0.000           | 3.80µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_bodies_checking                            | 3.78µs    | 0.000           | 63.85s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| maybe_building_test_harness                     | 3.49µs    | 0.000           | 3.49µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| param_env_reveal_all_normalized                 | 3.35µs    | 0.000           | 3.35µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| <unknown>                                       | 3.26µs    | 0.000           | 3.26µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| attributes_injection                            | 2.86µs    | 0.000           | 2.86µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_lto_generate_symbols_below_threshold       | 2.79µs    | 0.000           | 2.79µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_dep_kind                  | 2.72µs    | 0.000           | 2.72µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| unsafety_checking                               | 2.59µs    | 0.000           | 2.59µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| monomorphization_collector                      | 2.53µs    | 0.000           | 24.95ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| used_trait_imports                              | 2.38µs    | 0.000           | 2.38µs   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| maybe_unused_extern_crates                      | 2.25µs    | 0.000           | 2.25µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_defaultness          | 2.19µs    | 0.000           | 2.19µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_panic_runtime          | 2.11µs    | 0.000           | 2.11µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| find_cgu_reuse                                  | 1.90µs    | 0.000           | 1.90µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| plugin_loading                                  | 1.77µs    | 0.000           | 1.77µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| serialize_dep_graph                             | 1.77µs    | 0.000           | 1.77µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dep_graph_tcx_init                              | 1.71µs    | 0.000           | 1.71µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| has_typeck_results                              | 1.25µs    | 0.000           | 1.25µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_crate_name                | 1.10µs    | 0.000           | 1.10µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| layout_testing                                  | 918.00ns  | 0.000           | 918.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_patch_debuginfo                   | 889.00ns  | 0.000           | 889.00ns | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_panic_strategy            | 888.00ns  | 0.000           | 888.00ns | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_profiler_runtime       | 850.00ns  | 0.000           | 850.00ns | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_no_builtins            | 781.00ns  | 0.000           | 781.00ns | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_compiler_builtins      | 767.00ns  | 0.000           | 767.00ns | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_symbol_mangling_version   | 706.00ns  | 0.000           | 706.00ns | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_extern_crate              | 534.00ns  | 0.000           | 534.00ns | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| write_crate_metadata                            | 526.00ns  | 0.000           | 526.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| drop_dep_graph                                  | 375.00ns  | 0.000           | 375.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_unused_macros                             | 301.00ns  | 0.000           | 301.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_crate_disambiguator       | 241.00ns  | 0.000           | 241.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_original_crate_name       | 216.00ns  | 0.000           | 216.00ns | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| llvm_dump_timing_file                           | 211.00ns  | 0.000           | 211.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| plugin_registration                             | 83.00ns   | 0.000           | 83.00ns  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
Total cpu time: 80.86475014s

Unfortunately there doesn't seem to be any memory usage info in this report (at least not that I know how to extract), but most of the time is spent in typeck, which may be relevant, but I'm not at all familiar with rustc's internals.

For the sake of trying something I did hack my compiler to output types for all the temporaries in the prop fn (that version is available here). While this does make things about 10 seconds faster, the mem usage spike is still there, so it's not really a viable workaround.

(summary output for `b`)

$ summarize summarize ./b-43023.mm_profdata 
+-------------------------------------------------+-----------+-----------------+----------+------------+
| Item                                            | Self time | % of total time | Time     | Item count |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| typeck                                          | 50.03s    | 72.754          | 50.06s   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_liveness                              | 15.97s    | 23.228          | 15.97s   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_borrowck                                    | 565.67ms  | 0.823           | 1.03s    | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_built                                       | 421.41ms  | 0.613           | 424.60ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| run_linker                                      | 373.43ms  | 0.543           | 373.43ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| expand_crate                                    | 328.05ms  | 0.477           | 373.18ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_match                                     | 158.69ms  | 0.231           | 158.70ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| resolve_crate                                   | 158.33ms  | 0.230           | 158.33ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| free_global_ctxt                                | 89.45ms   | 0.130           | 89.45ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_lowering                                    | 86.25ms   | 0.125           | 86.25ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lint_mod                                        | 57.96ms   | 0.084           | 57.96ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_privacy                               | 51.09ms   | 0.074           | 51.18ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| build_hir_map                                   | 45.86ms   | 0.067           | 45.86ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| drop_ast                                        | 41.69ms   | 0.061           | 41.69ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| region_scope_tree                               | 40.94ms   | 0.060           | 40.94ms  | 7          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| pre_AST_expansion_lint_checks                   | 33.93ms   | 0.049           | 33.93ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| early_lint_checks                               | 21.40ms   | 0.031           | 21.40ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| analysis                                        | 19.30ms   | 0.028           | 67.50s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_passes                                     | 19.03ms   | 0.028           | 19.23ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_codegen_emit_obj                    | 15.55ms   | 0.023           | 15.55ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| AST_validation                                  | 13.64ms   | 0.020           | 13.64ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_promoted                                    | 12.62ms   | 0.018           | 457.95ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_const                                       | 11.30ms   | 0.016           | 445.24ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_item_children             | 10.78ms   | 0.016           | 10.78ms  | 4649       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_lto_optimize                               | 10.27ms   | 0.015           | 10.27ms  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_register_crate                         | 8.46ms    | 0.012           | 10.62ms  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| unsafety_check_result                           | 7.96ms    | 0.012           | 433.35ms | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| predicates_of                                   | 6.32ms    | 0.009           | 11.49ms  | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_optimize_module_passes              | 6.29ms    | 0.009           | 6.29ms   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_lints                                     | 6.17ms    | 0.009           | 6.27ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| evaluate_obligation                             | 6.17ms    | 0.009           | 17.22ms  | 127        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_intrinsics                            | 6.12ms    | 0.009           | 6.12ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| resolve_lifetimes                               | 6.05ms    | 0.009           | 6.07ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_adt_def                   | 5.36ms    | 0.008           | 9.09ms   | 972        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| complete_gated_feature_checking                 | 5.13ms    | 0.007           | 5.13ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_attrs                                 | 4.87ms    | 0.007           | 5.16ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_private_in_public                         | 4.84ms    | 0.007           | 4.87ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_item_attrs                | 4.76ms    | 0.007           | 4.76ms   | 997        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_trait_ref            | 4.51ms    | 0.007           | 13.67ms  | 1572       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lint_levels                                     | 3.64ms    | 0.005           | 3.64ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_module_optimize                         | 3.51ms    | 0.005           | 17.82ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| death_checking                                  | 3.41ms    | 0.005           | 7.09ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| privacy_access_levels                           | 3.33ms    | 0.005           | 3.34ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| collect_mod_item_types                          | 3.17ms    | 0.005           | 13.84ms  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_const_bodies                          | 3.04ms    | 0.004           | 3.05ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_load_macro                             | 2.78ms    | 0.004           | 2.78ms   | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_loops                                 | 2.49ms    | 0.004           | 2.49ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_binary                                     | 2.48ms    | 0.004           | 376.31ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_optimize                            | 2.42ms    | 0.004           | 10.63ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| wf_checking                                     | 2.29ms    | 0.003           | 45.15ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| stability_index                                 | 2.21ms    | 0.003           | 2.21ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_codegen                             | 2.21ms    | 0.003           | 17.76ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| get_lib_features                                | 2.14ms    | 0.003           | 2.14ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_children                                   | 2.07ms    | 0.003           | 12.85ms  | 4649       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_module_optimize_function_passes            | 1.93ms    | 0.003           | 1.93ms   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| param_env                                       | 1.87ms    | 0.003           | 4.20ms   | 299        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_unstable_api_usage                    | 1.84ms    | 0.003           | 4.17ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_module                                  | 1.77ms    | 0.003           | 4.52ms   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| self_profile_alloc_query_strings                | 1.72ms    | 0.002           | 1.72ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_def_span                  | 1.71ms    | 0.002           | 1.71ms   | 324        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| visible_parent_map                              | 1.68ms    | 0.002           | 14.56ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| predicates_defined_on                           | 1.49ms    | 0.002           | 4.79ms   | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| trait_impls_of                                  | 1.41ms    | 0.002           | 2.13ms   | 26         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_crate                                   | 1.34ms    | 0.002           | 31.93ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| specializes                                     | 1.20ms    | 0.002           | 4.05ms   | 444        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_module_perform_lto                      | 1.10ms    | 0.002           | 25.78ms  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_generics_of               | 1.10ms    | 0.002           | 1.10ms   | 1571       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| setup_global_ctxt                               | 1.09ms    | 0.002           | 1.09ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| generics_of                                     | 1.08ms    | 0.002           | 8.27ms   | 2928       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_associated_item_def_ids   | 1.04ms    | 0.002           | 1.04ms   | 73         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_item_well_formed                          | 1.02ms    | 0.001           | 1.60ms   | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| parse_crate                                     | 952.44µs  | 0.001           | 952.44µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_op_prove_predicate                         | 922.96µs  | 0.001           | 1.48ms   | 32         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| explicit_predicates_of                          | 810.56µs  | 0.001           | 1.61ms   | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| eval_to_allocation_raw                          | 745.02µs  | 0.001           | 16.53ms  | 24         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_def                                         | 713.15µs  | 0.001           | 9.96ms   | 973        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_explicit_predicates_of    | 632.07µs  | 0.001           | 632.07µs | 382        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| inferred_outlives_crate                         | 617.87µs  | 0.001           | 1.19ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_optimized_mir             | 610.86µs  | 0.001           | 616.74µs | 28         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_trait_ref                                  | 577.01µs  | 0.001           | 14.25ms  | 1573       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_implementations_of_trait  | 551.24µs  | 0.001           | 551.24µs | 390        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| vtable_methods                                  | 550.76µs  | 0.001           | 2.79ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_fn_sig                    | 495.59µs  | 0.001           | 551.06µs | 38         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| def_kind                                        | 486.79µs  | 0.001           | 648.50µs | 1763       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_fn_attrs                                | 472.04µs  | 0.001           | 1.97ms   | 35         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_type_of                   | 453.09µs  | 0.001           | 635.36µs | 112        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| prepare_outputs                                 | 446.99µs  | 0.001           | 446.99µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| drop_compiler                                   | 444.75µs  | 0.001           | 444.75µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_of                                         | 440.27µs  | 0.001           | 1.72ms   | 1466       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_copy_raw                                     | 427.43µs  | 0.001           | 2.80ms   | 18         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| layout_raw                                      | 423.63µs  | 0.001           | 1.93ms   | 73         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_op_ascribe_user_type                       | 421.56µs  | 0.001           | 421.56µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| symbol_name                                     | 388.52µs  | 0.001           | 449.03µs | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| resolve_instance                                | 376.21µs  | 0.001           | 1.63ms   | 25         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| associated_items                                | 375.30µs  | 0.001           | 1.76ms   | 73         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| def_span                                        | 369.01µs  | 0.001           | 2.08ms   | 1681       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| inferred_outlives_of                            | 365.98µs  | 0.001           | 1.69ms   | 1739       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_binary_remove_temps                        | 335.10µs  | 0.000           | 335.10µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_diagnostic_items          | 311.90µs  | 0.000           | 311.90µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| monomorphization_collector_graph_walk           | 301.67µs  | 0.000           | 22.47ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_attrs                                      | 290.65µs  | 0.000           | 5.05ms   | 997        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_import                            | 268.71µs  | 0.000           | 268.71µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| optimized_mir                                   | 235.37µs  | 0.000           | 1.77ms   | 29         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lookup_deprecation_entry                        | 222.61µs  | 0.000           | 2.47ms   | 1364       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| visibility                                      | 213.70µs  | 0.000           | 222.95µs | 1377       |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_fulfill_obligation                      | 207.40µs  | 0.000           | 342.25µs | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_shims                                       | 199.51µs  | 0.000           | 311.84µs | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| associated_item                                 | 191.11µs  | 0.000           | 364.44µs | 524        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_trait_of_item             | 186.34µs  | 0.000           | 186.34µs | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link                                            | 185.41µs  | 0.000           | 376.54ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_impl_item_well_formed                     | 178.66µs  | 0.000           | 41.26ms  | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| specialization_graph_of                         | 178.13µs  | 0.000           | 1.79ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_global_analysis                   | 176.51µs  | 0.000           | 176.51µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| method_autoderef_steps                          | 170.77µs  | 0.000           | 490.56µs | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| normalize_projection_ty                         | 169.77µs  | 0.000           | 272.01µs | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_sized_raw                                    | 168.19µs  | 0.000           | 207.56µs | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_item_types                            | 167.81µs  | 0.000           | 1.92ms   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lit_to_const                                    | 165.91µs  | 0.000           | 173.81µs | 127        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_associated_item           | 165.58µs  | 0.000           | 165.58µs | 520        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| implementations_of_trait                        | 165.04µs  | 0.000           | 716.27µs | 390        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_def_kind                  | 161.72µs  | 0.000           | 161.72µs | 405        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| configure_and_expand                            | 153.05µs  | 0.000           | 550.58ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| issue33140_self_ty                              | 148.47µs  | 0.000           | 185.29µs | 242        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| write_allocator_module                          | 143.66µs  | 0.000           | 143.66µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_super_predicates_of       | 142.84µs  | 0.000           | 142.84µs | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_exported_symbols          | 140.77µs  | 0.000           | 140.77µs | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_parent               | 139.76µs  | 0.000           | 139.76µs | 99         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| promoted_mir                                    | 139.14µs  | 0.000           | 139.14µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_inferred_outlives_of      | 139.04µs  | 0.000           | 139.04µs | 382        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_polarity             | 138.74µs  | 0.000           | 138.74µs | 283        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_dtorck_constraint                           | 137.63µs  | 0.000           | 395.18µs | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_polarity                                   | 131.29µs  | 0.000           | 270.04µs | 284        |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_drops_elaborated_and_const_checked          | 128.22µs  | 0.000           | 131.60µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| normalize_generic_arg_after_erasing_regions     | 125.55µs  | 0.000           | 16.79ms  | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| erase_regions_ty                                | 122.30µs  | 0.000           | 166.87µs | 47         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| eval_to_const_value_raw                         | 116.10µs  | 0.000           | 33.23ms  | 44         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dropck_outlives                                 | 98.64µs   | 0.000           | 356.04µs | 11         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_place_roots                    | 97.67µs   | 0.000           | 142.77µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_freeze_raw                                   | 96.17µs   | 0.000           | 1.27ms   | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dependency_formats                              | 94.10µs   | 0.000           | 172.61µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| get_lang_items                                  | 90.85µs   | 0.000           | 136.02µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_reachable_non_generics    | 87.85µs   | 0.000           | 168.64µs | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| fn_sig                                          | 86.21µs   | 0.000           | 637.27µs | 43         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| associated_item_def_ids                         | 82.71µs   | 0.000           | 1.12ms   | 74         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| MIR_borrow_checking                             | 70.58µs   | 0.000           | 1.03s    | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| liveness_and_intrinsic_checking                 | 66.58µs   | 0.000           | 15.98s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_check_crate                                | 65.29µs   | 0.000           | 50.13s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| implied_outlives_bounds                         | 64.93µs   | 0.000           | 64.93µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_binary_check_files_are_writeable           | 63.53µs   | 0.000           | 63.53µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_lookup_stability          | 58.32µs   | 0.000           | 58.32µs  | 18         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| needs_drop_raw                                  | 57.40µs   | 0.000           | 2.41ms   | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| subst_and_check_impossible_predicates           | 52.18µs   | 0.000           | 174.74µs | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| create_global_ctxt                              | 50.79µs   | 0.000           | 1.14ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| monomorphization_collector_root_collections     | 49.96µs   | 0.000           | 544.10µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| exported_symbols                                | 48.17µs   | 0.000           | 188.94µs | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_keys                                        | 46.90µs   | 0.000           | 46.90µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_const_qualif                                | 45.75µs   | 0.000           | 45.75µs  | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| macro_expand_crate                              | 41.54µs   | 0.000           | 373.23ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_naked_functions                       | 41.25µs   | 0.000           | 41.25µs  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| reachable_non_generics                          | 40.48µs   | 0.000           | 231.07µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| misc_checking_1                                 | 38.45µs   | 0.000           | 15.02ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_sized_constraint                            | 37.81µs   | 0.000           | 107.34µs | 12         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_profiler_runtime                             | 37.34µs   | 0.000           | 38.98µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| mir_abstract_const                              | 37.07µs   | 0.000           | 37.07µs  | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| type_collecting                                 | 35.89µs   | 0.000           | 13.87ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| inherent_impls                                  | 34.98µs   | 0.000           | 45.76µs  | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| collect_and_partition_mono_items                | 34.90µs   | 0.000           | 23.73ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_injection                                 | 34.77µs   | 0.000           | 34.77µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_parent                                     | 33.95µs   | 0.000           | 173.71µs | 99         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_merge_cgus                     | 33.84µs   | 0.000           | 33.84µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_trait_def                 | 33.56µs   | 0.000           | 33.56µs  | 19         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| misc_checking_3                                 | 31.03µs   | 0.000           | 132.92ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_destructor                                  | 30.51µs   | 0.000           | 1.75ms   | 9          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_late_bound_map                               | 30.32µs   | 0.000           | 30.32µs  | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| unused_lib_feature_checking                     | 30.27µs   | 0.000           | 2.17ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_lookup_deprecation_entry  | 29.89µs   | 0.000           | 29.89µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| trait_def                                       | 29.77µs   | 0.000           | 63.33µs  | 19         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_rename                            | 28.35µs   | 0.000           | 28.35µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_adt_destructor            | 27.62µs   | 0.000           | 56.79µs  | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_reachable_non_generic                        | 27.56µs   | 0.000           | 258.63µs | 14         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| variances_of                                    | 27.33µs   | 0.000           | 58.53µs  | 8          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| supported_target_features                       | 27.31µs   | 0.000           | 27.31µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_mir_available                                | 27.18µs   | 0.000           | 90.69µs  | 28         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| assert_symbols_are_distinct                     | 26.36µs   | 0.000           | 444.41µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| expn_that_defined                               | 26.09µs   | 0.000           | 51.85µs  | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_expn_that_defined         | 25.77µs   | 0.000           | 25.77µs  | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| object_lifetime_defaults_map                    | 25.27µs   | 0.000           | 6.10ms   | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_mod_impl_wf                               | 23.46µs   | 0.000           | 23.46µs  | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| trait_of_item                                   | 23.36µs   | 0.000           | 209.70µs | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| join_worker_thread                              | 22.55µs   | 0.000           | 22.55µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_foreign_item                                 | 22.52µs   | 0.000           | 28.07µs  | 13         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| adt_drop_tys                                    | 22.45µs   | 0.000           | 156.42µs | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| assert_dep_graph                                | 20.73µs   | 0.000           | 20.73µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lookup_stability                                | 20.11µs   | 0.000           | 78.43µs  | 19         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| index_hir                                       | 19.04µs   | 0.000           | 45.88ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_owner_nodes                                 | 18.93µs   | 0.000           | 18.93µs  | 7          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| typeck_item_bodies                              | 18.88µs   | 0.000           | 50.06s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_variances                                 | 18.73µs   | 0.000           | 18.73µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| looking_for_entry_point                         | 18.73µs   | 0.000           | 31.09µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning                                | 18.28µs   | 0.000           | 224.60µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_panic_runtime                                | 18.10µs   | 0.000           | 21.03µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| native_libraries                                | 18.05µs   | 0.000           | 31.80µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| match_checking                                  | 17.68µs   | 0.000           | 158.72ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| coherent_trait                                  | 17.51µs   | 0.000           | 1.66ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| reachable_set                                   | 17.23µs   | 0.000           | 17.23µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| MIR_effect_checking                             | 17.15µs   | 0.000           | 17.15µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_name                                      | 17.02µs   | 0.000           | 18.21µs  | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_unit                                    | 16.99µs   | 0.000           | 16.99µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_internalize                       | 16.86µs   | 0.000           | 16.86µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| coherence_checking                              | 16.76µs   | 0.000           | 51.14µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_mir_available          | 16.62µs   | 0.000           | 16.62µs  | 27         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| maybe_building_test_harness                     | 16.04µs   | 0.000           | 16.04µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_place_inline_items             | 15.30µs   | 0.000           | 15.30µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| codegen_generate_lto_work                       | 15.26µs   | 0.000           | 194.44µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| static_mutability                               | 15.13µs   | 0.000           | 19.83µs  | 21         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| maybe_create_a_macro_crate                      | 14.72µs   | 0.000           | 14.72µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| super_predicates_of                             | 14.55µs   | 0.000           | 157.38µs | 10         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| defined_lang_items                              | 14.29µs   | 0.000           | 23.70µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_owner                                       | 14.18µs   | 0.000           | 45.89ms  | 11         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_missing_extern_crate_item | 13.95µs   | 0.000           | 13.95µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_native_libraries          | 13.75µs   | 0.000           | 13.75µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_inherent_impls                            | 13.15µs   | 0.000           | 13.15µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| looking_for_derive_registrar                    | 12.71µs   | 0.000           | 19.85µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| looking_for_plugin_registrar                    | 12.59µs   | 0.000           | 19.10µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_variances_of              | 12.47µs   | 0.000           | 12.47µs  | 7          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| entry_fn                                        | 12.36µs   | 0.000           | 12.36µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dep_kind                                        | 11.59µs   | 0.000           | 14.99µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| panic_strategy                                  | 11.51µs   | 0.000           | 12.41µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| backend_optimization_level                      | 10.97µs   | 0.000           | 10.97µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_resolve_weak                      | 10.97µs   | 0.000           | 10.97µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| missing_extern_crate_item                       | 10.87µs   | 0.000           | 24.82µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| normalize_opaque_types                          | 10.85µs   | 0.000           | 10.85µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| used_crate_source                               | 10.81µs   | 0.000           | 20.49µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_inherent_impls            | 10.77µs   | 0.000           | 10.77µs  | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| upvars_mentioned                                | 9.89µs    | 0.000           | 9.89µs   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| module_exports                                  | 9.86µs    | 0.000           | 9.86µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_used_crate_source         | 9.68µs    | 0.000           | 9.68µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_inherent_impls_overlap_check              | 9.42µs    | 0.000           | 13.43µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_defined_lang_items        | 9.41µs    | 0.000           | 9.41µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_visibility                | 9.24µs    | 0.000           | 9.24µs   | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| parent_module_from_def_id                       | 9.19µs    | 0.000           | 9.19µs   | 6          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| finish_ongoing_codegen                          | 9.07µs    | 0.000           | 31.61µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| extern_crate                                    | 8.95µs    | 0.000           | 9.65µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_module_items                                | 8.69µs    | 0.000           | 8.69µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| all_crate_nums                                  | 8.26µs    | 0.000           | 8.26µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_args                                       | 8.09µs    | 0.000           | 8.09µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| original_crate_name                             | 7.96µs    | 0.000           | 8.15µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| crate_disambiguator                             | 7.78µs    | 0.000           | 7.91µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| hir_crate                                       | 7.59µs    | 0.000           | 7.59µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| privacy_checking_modules                        | 7.38µs    | 0.000           | 51.19ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| instance_def_size_estimate                      | 7.25µs    | 0.000           | 7.25µs   | 13         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| missing_lang_items                              | 7.18µs    | 0.000           | 13.22µs  | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| cgu_partitioning_internalize_symbols            | 7.16µs    | 0.000           | 7.16µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| proc_macro_decls_static                         | 7.14µs    | 0.000           | 7.14µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| postorder_cnums                                 | 7.02µs    | 0.000           | 7.02µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| partition_and_assert_distinct_symbols           | 7.01µs    | 0.000           | 676.02µs | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_const_fn_raw                                 | 6.91µs    | 0.000           | 6.91µs   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_wf_inference                               | 6.82µs    | 0.000           | 30.28µs  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| symbol_mangling_version                         | 6.53µs    | 0.000           | 6.93µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| plugin_registrar_fn                             | 6.51µs    | 0.000           | 6.51µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_compiler_builtins                            | 6.50µs    | 0.000           | 7.29µs   | 16         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| opt_const_param_of                              | 6.49µs    | 0.000           | 6.49µs   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| module_lints                                    | 6.18µs    | 0.000           | 57.97ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| features_query                                  | 6.08µs    | 0.000           | 6.08µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_missing_lang_items        | 6.04µs    | 0.000           | 6.04µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_foreign_item           | 5.55µs    | 0.000           | 5.55µs   | 13         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| named_region_map                                | 5.45µs    | 0.000           | 5.45µs   | 4          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| all_local_trait_impls                           | 5.27µs    | 0.000           | 5.27µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| serialize_work_products                         | 5.26µs    | 0.000           | 5.26µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| lint_checking                                   | 5.21µs    | 0.000           | 64.24ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_codegened_item                               | 5.15µs    | 0.000           | 5.15µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| orphan_checking                                 | 5.10µs    | 0.000           | 5.10µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| output_filenames                                | 5.09µs    | 0.000           | 5.09µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| diagnostic_items                                | 4.89µs    | 0.000           | 316.79µs | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_types_checking                             | 4.78µs    | 0.000           | 1.93ms   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_static_mutability         | 4.70µs    | 0.000           | 4.70µs   | 20         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| misc_checking_2                                 | 4.63µs    | 0.000           | 16.14s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| impl_defaultness                                | 4.41µs    | 0.000           | 5.10µs   | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| is_no_builtins                                  | 4.39µs    | 0.000           | 5.17µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| extern_mod_stmt_cnum                            | 4.38µs    | 0.000           | 4.38µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| in_scope_traits_map                             | 4.29µs    | 0.000           | 4.29µs   | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| item_bodies_checking                            | 3.89µs    | 0.000           | 50.06s   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| serialize_dep_graph                             | 3.78µs    | 0.000           | 3.78µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| link_crate                                      | 3.77µs    | 0.000           | 376.32ms | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| recursion_limit                                 | 3.71µs    | 0.000           | 3.71µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_dep_kind                  | 3.40µs    | 0.000           | 3.40µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| param_env_reveal_all_normalized                 | 3.39µs    | 0.000           | 3.39µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| <unknown>                                       | 3.34µs    | 0.000           | 3.34µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| find_cgu_reuse                                  | 3.24µs    | 0.000           | 3.24µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_panic_runtime          | 2.93µs    | 0.000           | 2.93µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| used_trait_imports                              | 2.71µs    | 0.000           | 2.71µs   | 5          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| unsafety_checking                               | 2.71µs    | 0.000           | 2.71µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_lto_generate_symbols_below_threshold       | 2.67µs    | 0.000           | 2.67µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| check_unused_macros                             | 2.53µs    | 0.000           | 2.53µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| attributes_injection                            | 2.42µs    | 0.000           | 2.42µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| maybe_unused_extern_crates                      | 2.37µs    | 0.000           | 2.37µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| monomorphization_collector                      | 2.35µs    | 0.000           | 23.02ms  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_profiler_runtime       | 1.64µs    | 0.000           | 1.64µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| plugin_loading                                  | 1.62µs    | 0.000           | 1.62µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| dep_graph_tcx_init                              | 1.61µs    | 0.000           | 1.61µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_crate_name                | 1.19µs    | 0.000           | 1.19µs   | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| layout_testing                                  | 1.01µs    | 0.000           | 1.01µs   | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| has_typeck_results                              | 988.00ns  | 0.000           | 988.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_panic_strategy            | 899.00ns  | 0.000           | 899.00ns | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_compiler_builtins      | 797.00ns  | 0.000           | 797.00ns | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_is_no_builtins            | 775.00ns  | 0.000           | 775.00ns | 15         |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| write_crate_metadata                            | 771.00ns  | 0.000           | 771.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| LLVM_thin_lto_patch_debuginfo                   | 724.00ns  | 0.000           | 724.00ns | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_extern_crate              | 699.00ns  | 0.000           | 699.00ns | 3          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_impl_defaultness          | 693.00ns  | 0.000           | 693.00ns | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_symbol_mangling_version   | 399.00ns  | 0.000           | 399.00ns | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| drop_dep_graph                                  | 291.00ns  | 0.000           | 291.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_original_crate_name       | 192.00ns  | 0.000           | 192.00ns | 2          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| llvm_dump_timing_file                           | 184.00ns  | 0.000           | 184.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| metadata_decode_entry_crate_disambiguator       | 132.00ns  | 0.000           | 132.00ns | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
| plugin_registration                             | 83.00ns   | 0.000           | 83.00ns  | 1          |
+-------------------------------------------------+-----------+-----------------+----------+------------+
Total cpu time: 68.770408871s

Meta

rustc --version --verbose:

rustc 1.50.0-nightly (6645da366 2020-12-01)
binary: rustc
commit-hash: 6645da366eed0c61258a04265bea513e94df7ea6
commit-date: 2020-12-01
host: x86_64-apple-darwin
release: 1.50.0-nightly

This issue occurs for stable as well. I have not tried beta. It also appears in windows builds.

Thanks for your time, and let me know if there's anything else I can do to help identify the issue!

@yupferris yupferris added the C-bug Category: This is a bug. label Dec 3, 2020
@jyn514 jyn514 added I-compilemem Issue: Problems and improvements with respect to memory usage during compilation. I-compiletime Issue: Problems and improvements with respect to compile times. labels Dec 3, 2020
@jyn514
Copy link
Member

jyn514 commented Dec 3, 2020

@yupferris you can see memory usage per-query by using -Z time-passes instead of -Z self-profile, that would be helpful.

@jyn514 jyn514 added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Dec 3, 2020
@yupferris
Copy link
Author

@yupferris you can see memory usage per-query by using -Z time-passes instead of -Z self-profile, that would be helpful.

I tried this, but for some reason there's no memory usage reported; is this not available on mac perhaps?

`$ cargo rustc --release -- -Z time-passes`

   Compiling a v0.1.0 (/Users/yupferris/dev/projects/a)
time: 0.001	parse_crate
time: 0.000	attributes_injection
time: 0.000	recursion_limit
time: 0.000	plugin_loading
time: 0.000	plugin_registration
time: 0.000	pre_AST_expansion_lint_checks
time: 0.000	crate_injection
time: 0.013	pre_AST_expansion_lint_checks
time: 0.219	expand_crate
time: 0.000	check_unused_macros
time: 0.219	macro_expand_crate
time: 0.000	maybe_building_test_harness
time: 0.003	AST_validation
time: 0.000	maybe_create_a_macro_crate
time: 0.005	complete_gated_feature_checking
time: 0.357	configure_and_expand
time: 0.001	prepare_outputs
time: 0.071	hir_lowering
time: 0.023	early_lint_checks
time: 0.001	setup_global_ctxt
time: 0.000	dep_graph_tcx_init
time: 0.001	create_global_ctxt
time: 0.000	looking_for_entry_point
time: 0.000	looking_for_plugin_registrar
time: 0.000	looking_for_derive_registrar
time: 0.012	misc_checking_1
time: 0.009	type_collecting
time: 0.000	impl_wf_inference
time: 0.000	unsafety_checking
time: 0.000	orphan_checking
time: 0.000	coherence_checking
time: 0.047	wf_checking
time: 0.003	item_types_checking
time: 70.603	item_bodies_checking
time: 70.662	type_check_crate
time: 0.147	match_checking
time: 14.560	liveness_and_intrinsic_checking
time: 14.707	misc_checking_2
time: 0.849	MIR_borrow_checking
time: 0.000	MIR_effect_checking
time: 0.000	layout_testing
warning: struct is never constructed: `Top`
 --> src/modules.rs:1:12
  |
1 | pub struct Top{
  |            ^^^
  |
  = note: `#[warn(dead_code)]` on by default

warning: associated function is never used: `new`
    --> src/modules.rs:1358:12
     |
1358 |     pub fn new() -> Top {
     |            ^^^

warning: associated function is never used: `reset`
    --> src/modules.rs:3006:12
     |
3006 |     pub fn reset(&mut self) {
     |            ^^^^^

warning: associated function is never used: `posedge_clk`
    --> src/modules.rs:3128:12
     |
3128 |     pub fn posedge_clk(&mut self) {
     |            ^^^^^^^^^^^

warning: associated function is never used: `prop`
    --> src/modules.rs:3707:12
     |
3707 |     pub fn prop(&mut self) {
     |            ^^^^

time: 0.005	death_checking
time: 0.002	unused_lib_feature_checking
time: 0.006	crate_lints
time: 0.039	module_lints
time: 0.045	lint_checking
time: 0.039	privacy_checking_modules
time: 0.096	misc_checking_3
time: 0.001	monomorphization_collector_root_collections
time: 0.017	monomorphization_collector_graph_walk
time: 0.001	partition_and_assert_distinct_symbols
time: 0.000	write_allocator_module
time: 0.000	find_cgu_reuse
time: 0.001	LLVM_module_optimize_function_passes(a.6tst2r86-cgu.1)
time: 0.004	codegen_to_LLVM_IR
time: 0.000	assert_dep_graph
time: 0.000	serialize_dep_graph
time: 0.024	codegen_crate
time: 0.001	LLVM_module_optimize_function_passes(a.6tst2r86-cgu.2)
time: 0.001	LLVM_module_optimize_function_passes(a.6tst2r86-cgu.0)
time: 0.003	LLVM_module_optimize_module_passes(a.6tst2r86-cgu.1)
time: 0.001	LLVM_module_optimize_module_passes(a.6tst2r86-cgu.0)
time: 0.004	LLVM_module_optimize_module_passes(a.6tst2r86-cgu.2)
time: 0.003	LLVM_lto_optimize(a.6tst2r86-cgu.0)
time: 0.004	LLVM_lto_optimize(a.6tst2r86-cgu.1)
time: 0.005	LLVM_lto_optimize(a.6tst2r86-cgu.2)
time: 0.020	LLVM_passes(crate)
time: 0.078	free_global_ctxt
time: 0.000	join_worker_thread
time: 0.000	finish_ongoing_codegen
time: 0.000	llvm_dump_timing_file
time: 0.000	serialize_work_products
time: 0.000	link_binary_check_files_are_writeable
time: 0.386	run_linker
time: 0.000	link_binary_remove_temps
time: 0.387	link_binary
time: 0.387	link_crate
time: 0.388	link
warning: 5 warnings emitted

time: 87.377		total
    Finished release [optimized] target(s) in 1m 27s

@jyn514 jyn514 changed the title rustc mem usage and CPU time explode on a generated ~2.5MB .rs file item_bodies_checking mem usage and CPU time explode on a generated ~2.5MB .rs file Dec 3, 2020
@jyn514
Copy link
Member

jyn514 commented Dec 3, 2020

That's super weird, it shows up for me on linux:

-Z time-passes
time: 0.003; rss: 55MB	parse_crate
time: 0.001; rss: 55MB	attributes_injection
time: 0.001; rss: 55MB	recursion_limit
time: 0.001; rss: 57MB	plugin_loading
time: 0.000; rss: 57MB	plugin_registration
time: 0.003; rss: 57MB	pre_AST_expansion_lint_checks
time: 0.003; rss: 59MB	crate_injection
time: 0.008; rss: 124MB	pre_AST_expansion_lint_checks
time: 0.288; rss: 134MB	expand_crate
time: 0.000; rss: 134MB	check_unused_macros
time: 0.288; rss: 134MB	macro_expand_crate
time: 0.000; rss: 134MB	maybe_building_test_harness
time: 0.005; rss: 134MB	AST_validation
time: 0.000; rss: 134MB	maybe_create_a_macro_crate
time: 0.003; rss: 157MB	complete_gated_feature_checking
time: 0.450; rss: 157MB	configure_and_expand
time: 0.000; rss: 159MB	prepare_outputs
time: 0.060; rss: 178MB	hir_lowering
time: 0.014; rss: 178MB	early_lint_checks
time: 0.011; rss: 179MB	setup_global_ctxt
time: 0.000; rss: 179MB	dep_graph_tcx_init
time: 0.021; rss: 179MB	create_global_ctxt
time: 0.000; rss: 184MB	looking_for_entry_point
time: 0.000; rss: 184MB	looking_for_plugin_registrar
time: 0.001; rss: 184MB	looking_for_derive_registrar
time: 0.039; rss: 187MB	misc_checking_1
time: 0.039; rss: 189MB	type_collecting
time: 0.000; rss: 189MB	impl_wf_inference
time: 0.000; rss: 189MB	unsafety_checking
time: 0.000; rss: 189MB	orphan_checking
time: 0.000; rss: 189MB	coherence_checking
time: 0.104; rss: 213MB	wf_checking
time: 0.027; rss: 215MB	item_types_checking
time: 35.773; rss: 274MB	item_bodies_checking
time: 35.944; rss: 274MB	type_check_crate
time: 0.050; rss: 275MB	match_checking
time: 190.171; rss: 5505MB	liveness_and_intrinsic_checking
time: 190.261; rss: 5503MB	misc_checking_2
time: 3.083; rss: 591MB	MIR_borrow_checking
time: 0.000; rss: 591MB	MIR_effect_checking
time: 0.019; rss: 591MB	layout_testing
warning: struct is never constructed: `Top`
 --> src/modules.rs:1:12
  |
1 | pub struct Top{
  |            ^^^
  |
  = note: `#[warn(dead_code)]` on by default

warning: associated function is never used: `new`
    --> src/modules.rs:1358:12
     |
1358 |     pub fn new() -> Top {
     |            ^^^

warning: associated function is never used: `reset`
    --> src/modules.rs:3006:12
     |
3006 |     pub fn reset(&mut self) {
     |            ^^^^^

warning: associated function is never used: `posedge_clk`
    --> src/modules.rs:3128:12
     |
3128 |     pub fn posedge_clk(&mut self) {
     |            ^^^^^^^^^^^

warning: associated function is never used: `prop`
    --> src/modules.rs:3707:12
     |
3707 |     pub fn prop(&mut self) {
     |            ^^^^

time: 0.037; rss: 594MB	death_checking
time: 0.006; rss: 594MB	unused_lib_feature_checking
time: 0.036; rss: 596MB	crate_lints
time: 0.066; rss: 597MB	module_lints
time: 0.102; rss: 597MB	lint_checking
time: 0.045; rss: 598MB	privacy_checking_modules
time: 0.220; rss: 598MB	misc_checking_3
time: 0.020; rss: 600MB	monomorphization_collector_root_collections
time: 0.372; rss: 641MB	monomorphization_collector_graph_walk
time: 0.010; rss: 642MB	partition_and_assert_distinct_symbols
time: 0.004; rss: 659MB	write_allocator_module
time: 0.000; rss: 659MB	find_cgu_reuse
time: 0.055; rss: 668MB	codegen_to_LLVM_IR
time: 0.001; rss: 668MB	assert_dep_graph
time: 0.000; rss: 668MB	serialize_dep_graph
time: 0.560; rss: 668MB	codegen_crate
time: 0.013; rss: 635MB	LLVM_module_optimize_function_passes(a.disqncfg-cgu.2)
time: 0.013; rss: 635MB	LLVM_module_optimize_function_passes(a.disqncfg-cgu.0)
time: 0.014; rss: 635MB	LLVM_module_optimize_function_passes(a.disqncfg-cgu.1)
time: 0.018; rss: 639MB	LLVM_module_optimize_module_passes(a.disqncfg-cgu.2)
time: 0.020; rss: 639MB	LLVM_module_optimize_module_passes(a.disqncfg-cgu.1)
time: 0.023; rss: 640MB	LLVM_module_optimize_module_passes(a.disqncfg-cgu.0)
time: 0.010; rss: 647MB	LLVM_lto_optimize(a.disqncfg-cgu.2)
time: 0.013; rss: 647MB	LLVM_lto_optimize(a.disqncfg-cgu.0)
time: 0.014; rss: 647MB	LLVM_lto_optimize(a.disqncfg-cgu.1)
time: 0.128; rss: 652MB	LLVM_passes(crate)
time: 0.129; rss: 649MB	free_global_ctxt
time: 0.000; rss: 649MB	join_worker_thread
time: 0.000; rss: 649MB	finish_ongoing_codegen
time: 0.000; rss: 649MB	llvm_dump_timing_file
time: 0.000; rss: 649MB	serialize_work_products
time: 0.000; rss: 649MB	link_binary_check_files_are_writeable
time: 0.476; rss: 650MB	run_linker
time: 0.000; rss: 650MB	link_binary_remove_temps
time: 0.484; rss: 650MB	link_binary
time: 0.484; rss: 650MB	link_crate
time: 0.485; rss: 650MB	link
warning: 5 warnings emitted

time: 231.413; rss: 650MB		total
    Finished release [optimized] target(s) in 3m 52s

@jyn514
Copy link
Member

jyn514 commented Dec 3, 2020

Huh, I guess it's only available on windows and linux :(

// Memory reporting
cfg_if! {
if #[cfg(windows)] {
fn get_resident() -> Option<usize> {
use std::mem::{self, MaybeUninit};
use winapi::shared::minwindef::DWORD;
use winapi::um::processthreadsapi::GetCurrentProcess;
use winapi::um::psapi::{GetProcessMemoryInfo, PROCESS_MEMORY_COUNTERS};
let mut pmc = MaybeUninit::<PROCESS_MEMORY_COUNTERS>::uninit();
match unsafe {
GetProcessMemoryInfo(GetCurrentProcess(), pmc.as_mut_ptr(), mem::size_of_val(&pmc) as DWORD)
} {
0 => None,
_ => {
let pmc = unsafe { pmc.assume_init() };
Some(pmc.WorkingSetSize as usize)
}
}
}
} else if #[cfg(unix)] {
fn get_resident() -> Option<usize> {
let field = 1;
let contents = fs::read("/proc/self/statm").ok()?;
let contents = String::from_utf8(contents).ok()?;
let s = contents.split_whitespace().nth(field)?;
let npages = s.parse::<usize>().ok()?;
Some(npages * 4096)
}
} else {
fn get_resident() -> Option<usize> {
None
}

@yupferris
Copy link
Author

yupferris commented Dec 3, 2020

Huh, I guess it's only available on windows and linux :(

Aha, good to know! Unfortunately, the build kills my windows system and I don't have a linux box, so I'm not sure I can be of much help diagnosing further.

-Z time-passes

This was kindof interesting, mem usage didn't seem to increase much in item_bodies_checking despite spending so much time there (which is itself rather interesting); I suppose the mem usage spike happens later?

@jyn514 jyn514 changed the title item_bodies_checking mem usage and CPU time explode on a generated ~2.5MB .rs file item_bodies_checking CPU time and liveness_and_intrinsic_checking mem usage explode on a generated ~2.5MB .rs file Dec 3, 2020
@jyn514
Copy link
Member

jyn514 commented Dec 3, 2020

I updated the -Z time-passes log, it was liveness_and_intrinsic_checking using a whopping 6 GB (and probably more than that since it set my machine with 8 GB swapping).

@yupferris
Copy link
Author

yupferris commented Dec 3, 2020

Aha, yep, there it is - on my box I observed upwards of 11GB (just watching rustc in the activity monitor), so it's definitely more!

@jyn514
Copy link
Member

jyn514 commented Dec 3, 2020

Adding #[automatically_derived] to the impl takes the memory usage down to less than 1.5 GB (thanks @tm for the suggestion!)

https://rust-lang.zulipchat.com/#narrow/stream/247081-t-compiler.2Fperformance/topic/performance.20on.20generated.20code

yupferris added a commit to yupferris/kaze that referenced this issue Dec 3, 2020
This prevents the compiler from performing expensive and unnecessary lints on the generated code, saving several seconds and, more importantly, several GB(!!) of memory during compilation of large sims.

See rust-lang/rust#79671 (comment) for more info.
@yupferris
Copy link
Author

Indeed, that's a huge help for the memory issue! I'm still a bit curious about compile time and whether or not it can be improved/worked around, but this certainly unblocks the project at least!

@nagisa
Copy link
Member

nagisa commented Dec 4, 2020

Is there a non-dropbox location for the source code?

Some general advice: If you generate large functions, splitting up generated code into smaller ones may help. Generating explicit type annotations may help too.

@jyn514
Copy link
Member

jyn514 commented Dec 4, 2020

Is there a non-dropbox location for the source code?

@nagisa https://github.com/jyn514/rustc-79671-repro

@yupferris
Copy link
Author

yupferris commented Dec 4, 2020

If you generate large functions, splitting up generated code into smaller ones may help.

Good to know, I will see if there's some kind of partitioning I can do, thanks!

Generating explicit type annotations may help too.

Indeed this helped a bit - with the memory workaround in, a full compile takes ~60s on my system. With type annotations on top of that, it drops to ~50s. Hopefully I can come up with a graph partitioning scheme that allows generation of smaller functions to try and work around these scaling issues.

@yupferris
Copy link
Author

FWIW it's actually pretty easy to reproduce with a dumb generator like this:

use std::env;
use std::fs::File;
use std::io::{self, Write};

fn main() -> io::Result<()> {
    let output_file_name = env::args().skip(1).nth(0).expect("Missing output file name arg");
    let mut output = File::create(output_file_name)?;

    writeln!(output, "pub struct Lol {{")?;
    writeln!(output, "pub i: bool,")?;
    writeln!(output, "pub o: bool,")?;
    writeln!(output, "}}")?;

    // Uncomment to ignore `liveness_and_intrinsic_checking` etc
    //writeln!(output, "#[automatically_derived]")?;
    writeln!(output, "impl Lol {{")?;
    writeln!(output, "pub fn prop(&mut self) {{")?;
    // Modify to see mem explosion in `liveness_and_intrinsic_checking` and nonlinear time scaling in `item_bodies_checking`
    let count = 30000;
    let mut last_temp_name = None;
    for i in 0..count {
        let temp_name = format!("temp{}", i);

        writeln!(output, "let {} = !{};", temp_name, last_temp_name.unwrap_or("self.i".into()))?;

        last_temp_name = Some(temp_name);
    }
    writeln!(output, "self.o = {};", last_temp_name.unwrap())?;
    writeln!(output, "}}")?;
    writeln!(output, "}}")?;

    Ok(())
}

This generates a .rs file that can be included as a module in another project and even if it's unused, compilation will scale poorly as in the original provided project(s).

yupferris added a commit to yupferris/kaze that referenced this issue Dec 6, 2020
This is to reduce the amount of (unnecessary) bindings in the generated prop fn, as this has been found to have nonlinear time and mem scaling in the rust compiler currently (see rust-lang/rust#79671 and an initial/related workaround in 7c2ff85), and it's been recommended to reduce these. As expected, this appears to be quite effective!

A side effect of this is that IR expressions can now have unbounded depth, so lowering those also has to be iterative instead of recursive. I've introduced parens in some cases which may be unnecessary (to avoid the complexity of determining whether or not we actually need them), so we now mark the impl item with an attribute to ignore these.

There are a couple cases like Signal::bits which ends up being lowered to a shift and a bitmask in addition to a cast (if necessary). If a user builds a graph with several of these calls on the same Signal, the intermediates between these steps aren't refcounted like normal Signals are (refcounting happens too late for that) - so we won't be able to flatten these to a single temporary. There are a few other such cases as well. I've chosen to simply ignore all of them - they're not practically an issue, and we can always revisit them later if need be (though this will likey require the introduction of yet another IR and perhaps more complex passes such as CSE on it to be effective).

Also rename Node -> Frame for the intermediate types used when traversing the graph iteratively, as this less ambiguously describes what these types represent.
yupferris added a commit to yupferris/kaze that referenced this issue Dec 6, 2020
This is to reduce the amount of (unnecessary) bindings in the generated prop fn, as this has been found to have nonlinear time and mem scaling in the rust compiler currently (see rust-lang/rust#79671 and an initial/related workaround in 7c2ff85), and it's been recommended to reduce these. As expected, this appears to be quite effective!

A side effect of this is that IR expressions can now have unbounded depth, so lowering those also has to be iterative instead of recursive. I've introduced parens in some cases which may be unnecessary (to avoid the complexity of determining whether or not we actually need them), so we now mark the impl item with an attribute to ignore these.

There are a couple cases like Signal::bits which ends up being lowered to a shift and a bitmask in addition to a cast (if necessary). If a user builds a graph with several of these calls on the same Signal, the intermediates between these steps aren't refcounted like normal Signals are (refcounting happens too early for that) - so we won't be able to flatten these to a single temporary. There are a few other such cases as well. I've chosen to simply ignore all of them - they're not practically an issue, and we can always revisit them later if need be (though this will likey require the introduction of yet another IR and perhaps more complex passes such as CSE on it to be effective).

Also rename Node -> Frame for the intermediate types used when traversing the graph iteratively, as this less ambiguously describes what these types represent.
@tmiasko
Copy link
Contributor

tmiasko commented Dec 15, 2020

Changes from #79727 reduced max rss for a project from 12.3 GB to 1.8 GB.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. I-compilemem Issue: Problems and improvements with respect to memory usage during compilation. I-compiletime Issue: Problems and improvements with respect to compile times. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

4 participants