Improve optimisation in the presence of SCCs (fixes #5363)
authorSimon Marlow <marlowsd@gmail.com>
Wed, 7 Dec 2011 15:23:28 +0000 (15:23 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 7 Dec 2011 15:24:29 +0000 (15:24 +0000)
commiteea40328004e3cad1fdd31004337e10e6ae5fc52
treed6547411463a4dfa695e8dcf5fd423dee00af218
parentc4fb520e3be8dc47f3053458412172502c5fcd2c
Improve optimisation in the presence of SCCs (fixes #5363)

We had some special cases to handle things like

  case (scc c (case E of alts)) of alts'

but it only worked when there was a single scc in the way.  This
generalises the optimisation to handle multiple sccs and ticks, so
that we can catch most case-of-case optimisations that would normally
apply in the absence of profiling.

This fixes the example in #5363, and nofib results (with -prof
-fprof-auto) show that allocation universally goes down or stays the
same.
compiler/simplCore/Simplify.lhs