Closed
Description
At the moment the compiler will re-instantiate generic code in every crate that uses it. That sounds like a lot of duplicated work. However, we don't have any actual numbers on how much duplicated work. There are a few things we could do:
- Instrument the compiler to count how many duplicated functions we have
- Prototype sharing of generic code and see how it affects compile times and binary sizes
- Wait for MIR-only RLIBs to solve the problem naturally.
This could potentially be a big win for compile times but we won't know until we've collected some data.
Side node: Sharing monomorphized instances could negatively affect runtime performance when compiling without any form of LTO or when compiling with ThinLTO just for the current crate (as opposed to doing ThinLTO over the whole crate graph).
Metadata
Metadata
Assignees
Labels
Area: Code generationCategory: A feature request, i.e: not implemented / a PR.Issue: Problems and improvements with respect to memory usage during compilation.Issue: Problems and improvements with respect to compile times.Relevant to the compiler team, which will review and decide on the PR/issue.Working group: Compiler Performance
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
brson commentedon Apr 1, 2019
#47660 indicates a check box next to this task, but it is still open and doesn't indicate progress. Is this done?
michaelwoerister commentedon Apr 2, 2019
This has been implemented in #48779 and is enabled by default for optimization levels <= 2:
rust/src/librustc/session/config.rs
Lines 650 to 664 in f694222
#50861 tested enabling it for optimized builds showed mixed results:
https://perf.rust-lang.org/compare.html?start=fd18d2537ddcffb24b3739393b085ed28dfc340e&end=b60bd5703773a04cd853519fdc2465dc9d45603d&stat=instructions%3Au
brson commentedon Dec 25, 2019
Thanks @michaelwoerister