- '-finline-phase1', # Don't inline rule Ids till specialisation has bitten
-
-# APR 99: the stuff in this comment is now
-# handled by -finline-phase1
-#
-# I don't understand why we want -fessential-unfoldings-only here
-# If we have it, the following nasty thing happens:
-# f = E
-# g* = f
-# ...g...
-# where "*" means exported.
-# In the essential-unfoldings pass we still substitute f for g
-# but we don't substitute E for f first. So we get
-# f = E
-# g* = f
-# ...f...
-# The g=f will get reverse-substituted later, but it's untidy. --SLPJ
-#
-# SDM: Here's why it's necessary.
-#
-# If we unfold in the first pass before the specialiser is run
-# we miss opportunities for specialisation because eg. wrappers
-# have been inlined for specialisable functions.
-#
-# This shows up in PrelArr.lhs - the specialised instance for newArray
-# calls the generic rangeSize, because rangeSize is strict and is
-# replaced by its wrapper by the simplifier.
-# '-fessential-unfoldings-only',
-# '-fsimpl-uf-use-threshold0',
-
- '-fmax-simplifier-iterations2',
+ '-finline-phase0', # Don't inline anything till full laziness has bitten
+ # In particular, inlining wrappers inhibits floating
+ # e.g. ...(case f x of ...)...
+ # ==> ...(case (case x of I# x# -> fw x#) of ...)...
+ # ==> ...(case x of I# x# -> case fw x# of ...)...
+ # and now the redex (f x) isn't floatable any more
+ '-fmax-simplifier-iterations2',