Closed
Description
This is a metabug to group together a bunch of related issues do with our current generation of LLVM IR.
The IR we produce is very verbose, this causes an inordinate amount of time to be spent during the optimization passes that we could trivially prevent by simply not outputting these sequences.
Instrumentation and testing issues
- Begin testing emitted LLVM IR #5073 : begin testing emitted LLVM
rustc: improve -Z trans-stats to report per-fn LLVM instruction counts and translation timing #7456 : improved trans statsLLVM codegen-equivalence tests #7461 : LLVM codegen equivalence tests
Too many copies of functions issues
(see http://people.mozilla.org/~graydon/symbols-by-name.txt)
rewrite type_use #8651 : rewrite type_usenormalize_for_monomorphization could normalize recursively #2529 : normalize for monomorphization recursivelyIn trans::type_use::mark_for_expr, don't count fields after the chosen field #2537 : type_use should only consider fields before the selected field- Match checking has quadratic average complexity #7462 : match combinatorial codegen problems
- Function body is translated more than once #7349 : multiply-instantiating monomorphic closures within polymorphic functions
- Reuse default methods #8650 : reuse default methods
Too much codegen issues
- Experiment with reusing monomorphized instances across crates #1980 : cross-crate monomorphic instance reuse
- implement "dynamic drop" semantics using flags on the stack rather than zeroing #5016 : move semantics
- use tbaa.struct to inform LLVM about struct/enum padding #6736 : tbaa.struct for skipping padding
- intrinsics for trivial functions #8648 : intrinsics for trivial functions
Incorrect or LLVM-frustrating codegen issues
- Get to LLVM-lint-clean #7463 : LLVM lint-cleanness
- Fast isel dislikes switch, which pattern matching can generate #4353 : fastisel vs. switch
- Invoke instructions kick us off the FastISel path #3551 : fastisel vs. invoke
- Assembly comments affect generated code. #3298 : asm comments
Overall use of LLVM issues
Discover better llvm optimizations for Rust #3519 : better LLVM optimizations