A general repository for optimisation ideas for MLWorks compilers.
Optimisations can occur at many levels, I've split them into four:-

1. Source level transformations (some of our uncurrying is done like
this)

2. Lambda level optimisations

3. Mir level optimisations

4. Back end level optimisations
  a) SPARC

  b) MIPS

  c) Intel

Suggestions:-

Loop invariant lifting (lambda or possibly mir level)

Strength reduction (lambda or mir level)

Constant propagation (mir level)

Range test removal (lambda level)

Cross module register argument passing (lambda, mir level)

Inlining of match defaults without duplication (lambda or mir level)

Leaf case analysis (Back end level)

Loop unrolling (lambda level)

Improved compilation of logical relations (lambda and harp level)

Floating point argument passing in registers (harp level and back end level)

Structured results in registers (lambda, harp and back end level)
