From a515009d89b62d6bc4fc34844db37edb5d4ef6ac Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Fri, 10 Nov 2006 13:10:36 +0000 Subject: [PATCH] Comments and cosmetics only --- compiler/stranal/DmdAnal.lhs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/compiler/stranal/DmdAnal.lhs b/compiler/stranal/DmdAnal.lhs index 309cd29..4c5de96 100644 --- a/compiler/stranal/DmdAnal.lhs +++ b/compiler/stranal/DmdAnal.lhs @@ -262,8 +262,8 @@ dmdAnal sigs dmd (Case scrut case_bndr ty [alt@(DataAlt dc,bndrs,rhs)]) -- The insight is, of course, that a demand on y is a demand on the -- scrutinee, so we need to `both` it with the scrut demand - scrut_dmd = Eval (Prod [idNewDemandInfo b | b <- bndrs', isId b]) - `both` + alt_dmd = Eval (Prod [idNewDemandInfo b | b <- bndrs', isId b]) + scrut_dmd = alt_dmd `both` idNewDemandInfo case_bndr' (scrut_ty, scrut') = dmdAnal sigs scrut_dmd scrut @@ -489,7 +489,12 @@ If we marked r as having the CPR property, then we'd w/w into in ... But now r is a thunk, which won't be inlined, so we are no further ahead. +But consider + f x = let r = case expensive of (a,b) -> (b,a) + in if foo r then r else (x,x) + +Does f have the CPR property? Well, no. However, if the strictness analyser has figured out (in a previous iteration) that it's strict, then we DON'T need to forget the CPR info. @@ -986,7 +991,7 @@ lub d1@(Eval _) d2 = d2 `lub` d1 -- Bot,Abs,Top,Call,Defer lub (Box d1) (Box d2) = box (d1 `lub` d2) lub d1@(Box _) d2 = d2 `lub` d1 -lubs = zipWithDmds lub +lubs ds1 ds2 = zipWithDmds lub ds1 ds2 --------------------- -- box is the smart constructor for Box @@ -1093,7 +1098,7 @@ both d1@(Eval ds1) d2 = d2 `both` d1 both (Defer ds1) (Defer ds2) = deferEval (ds1 `boths` ds2) both d1@(Defer ds1) d2 = d2 `both` d1 -boths = zipWithDmds both +boths ds1 ds2 = zipWithDmds both ds1 ds2 \end{code} -- 1.7.10.4