Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : cardinality

http://hackage.haskell.org/trac/ghc/changeset/c7b561faf3560a5616558ee66ffc099098a03d4d

>---------------------------------------------------------------

commit c7b561faf3560a5616558ee66ffc099098a03d4d
Author: Ilya Sergey <[email protected]>
Date:   Thu Sep 27 02:06:01 2012 +0100

    a bug with lazy FVs fixed

>---------------------------------------------------------------

 compiler/stranal/DmdAnal.lhs |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/compiler/stranal/DmdAnal.lhs b/compiler/stranal/DmdAnal.lhs
index 4dcf4ce..aaac680 100644
--- a/compiler/stranal/DmdAnal.lhs
+++ b/compiler/stranal/DmdAnal.lhs
@@ -277,7 +277,7 @@ dmdAnal _ env dmd (Let (NonRec id rhs) body)
 
         -- Add lazy free variables
        body_ty2                   = addLazyFVs body_ty1 lazy_fv
-        -- Add  cardinality demands 
+        -- Add unleashed cardinality demands 
         unleashed_fv               = unleash_card_dmds (id, id_dmd)
         body_ty3                   = addLazyFVs body_ty2 unleashed_fv          
            
     in
@@ -730,6 +730,8 @@ is <L,A>).
 -- Unleashing the usage demands on free variables of a binding
 -- basing on the demand from the body
 -- See Note [Aggregated demand for cardinality] 
+
+-- Recursive bindings are automaticaly marked as used
 unleash_card_dmds :: (Var, Demand) -> DmdEnv
 unleash_card_dmds (id, id_dmd)
   | isAbs id_dmd
@@ -737,10 +739,14 @@ unleash_card_dmds (id, id_dmd)
     = emptyDmdEnv
   | otherwise 
     = let StrictSig (DmdType fv _ _) = idStrictness id
-          arity                           = idArity id
+          arity                             = idArity id
           threshold_dmd              = mkThresholdDmd arity 
+          -- we are dealing only with usage, therefore 
+          -- stricntess component in 'fv' should be set to L
+          lazified_fv                = deferEnv fv            
           unleashed_fv               = if id_dmd `pre` threshold_dmd
-                                       then fv else markAsUsedEnv fv
+                                       then lazified_fv
+                                       else markAsUsedEnv lazified_fv
        in unleashed_fv
 
 annotateBndr :: DmdType -> Var -> (DmdType, (Var, Demand))



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to