|Version 51 (modified by 3 years ago) (diff),|
Jan Stolarek's internship notes
Some interesting tickets
- #605 - Optimisation: strict enumerations
- #1498 - Optimisation: eliminate unnecessary heap check in recursive function.
- #1600 - Optimisation: CPR the results of IO
- #2289 - Needless reboxing of values when returning from a tight loop
- #2387 - Optimizer misses unboxing opportunity
- #2450 - Data.Complex.magnitude squares using (2 :: Int), which is slow
- #2731 - Avoid unnecessary evaluation when unpacking constructors
- #2823 - Another arity expansion bug
- #4470 - Loop optimization: identical counters
- #4937 - Remove indirections caused by sum types, such as Maybe
- #5567 - LLVM: Improve alias analysis / performance BackEndNotes page has some discussion of this.
- #7198 - New codegen more than doubles compile time of T3294
- #7574 - Register allocator chokes on certain branches with literals (bug can be triggered with
./inplace/bin/ghc-stage2 -c -no-hs-main -fasm -O2 ./testsuite/tests/llvm/should_compile/T7571.cmm)
- #8048 - Register spilling produces ineffecient/highly contending code
Notes on the wiki
Tickets that I could potentially look into:
- #3070 - floor(0/0) should not be defined
- #3676 - realToFrac doesn't sanely convert between floating types
- #3744 - Comparisons against minBound/maxBound not optimised
- #4101 - Primitive constant unfolding
- #5615 - ghc produces poor code for
divwith constant powers of 2.
- #7116 - Missing optimisation: strength reduction of floating-point multiplication
- #7858 - Fix definitions of abs/signum for Floats/Doubles.
- #8072 - Optimizations change result of div for Word
Some LLVM notes that may be useful: