X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2FsimplCore%2FCoreMonad.lhs;h=f83f1bc6fcdd23356a83c06cc14478ca900be204;hb=02c988e586dedff6d252ef59ef487dd4a8f567aa;hp=f9ff5e75d132d6507f577bac3bcccf919915b100;hpb=d4f4391a030e683572eee01291cc8bc6203dbf5d;p=ghc-hetmet.git diff --git a/compiler/simplCore/CoreMonad.lhs b/compiler/simplCore/CoreMonad.lhs index f9ff5e7..f83f1bc 100644 --- a/compiler/simplCore/CoreMonad.lhs +++ b/compiler/simplCore/CoreMonad.lhs @@ -78,7 +78,7 @@ import qualified ErrUtils as Err import Bag import Maybes import UniqSupply -import LazyUniqFM ( UniqFM, mapUFM, filterUFM ) +import UniqFM ( UniqFM, mapUFM, filterUFM ) import FiniteMap import Util ( split ) @@ -381,17 +381,11 @@ getCoreToDo dflags -- initial simplify: mk specialiser happy: minimum effort please simpl_gently = CoreDoSimplify (SimplGently { sm_rules = True, sm_inline = False }) + -- See Note [Gentle mode] and + -- Note [RULEs enabled in SimplGently] in SimplUtils max_iter [ - -- Simplify "gently" - -- 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 - -- Similarly, don't apply any rules until after full - -- laziness. Notably, list fusion can prevent floating. + NoCaseOfCase -- Don't do case-of-case transformations. -- This makes full laziness work better