X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FdeSugar%2FDsExpr.lhs;h=b823437e27349f1b917613d6f3e7930cde7b3e5d;hb=51873bdac451ee4a7e4b2ebc26a8706c08eab8e1;hp=0633717d09538b9f0f1077a42729eb7efa4e3731;hpb=6febb616f1ff46942434e9df39c6e4977b07cc6f;p=ghc-hetmet.git diff --git a/compiler/deSugar/DsExpr.lhs b/compiler/deSugar/DsExpr.lhs index 0633717..b823437 100644 --- a/compiler/deSugar/DsExpr.lhs +++ b/compiler/deSugar/DsExpr.lhs @@ -505,10 +505,8 @@ dsExpr (HsBinTick ixT ixF e) = do \begin{code} -#ifdef DEBUG -- HsSyn constructs that just shouldn't be here: dsExpr (ExprWithTySig _ _) = panic "dsExpr:ExprWithTySig" -#endif findField :: [HsRecField Id arg] -> Name -> [arg] @@ -541,13 +539,18 @@ fruitless allocations. Essentially, whenever we see a list literal If fusion fails to occur then build will get inlined and (since we defined a RULE for foldr (:) []) we will get back exactly the - normal desugaring for an explicit list! However, if it does occur - then we can potentially save quite a bit of allocation (up to 25\% - of the total in some nofib programs!) + normal desugaring for an explicit list. + +This optimisation can be worth a lot: up to 25% of the total +allocation in some nofib programs. Specifically + + Program Size Allocs Runtime CompTime + rewrite +0.0% -26.3% 0.02 -1.8% + ansi -0.3% -13.8% 0.00 +0.0% + lift +0.0% -8.7% 0.00 -2.3% Of course, if rules aren't turned on then there is pretty much no point doing this fancy stuff, and it may even be harmful. - \begin{code} dsExplicitList :: PostTcType -> [LHsExpr Id] -> DsM CoreExpr