Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : cardinality
http://hackage.haskell.org/trac/ghc/changeset/c6c2149e4d1552f0a9929eb22136eadd8d50deda >--------------------------------------------------------------- commit c6c2149e4d1552f0a9929eb22136eadd8d50deda Author: Ilya Sergey <[email protected]> Date: Wed Sep 26 19:45:08 2012 +0100 defaulta demand for seq changed >--------------------------------------------------------------- compiler/basicTypes/Demand.lhs | 10 +++++++--- compiler/prelude/primops.txt.pp | 2 +- compiler/stranal/DmdAnal.lhs | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/compiler/basicTypes/Demand.lhs b/compiler/basicTypes/Demand.lhs index 8e27004..c56f0c6 100644 --- a/compiler/basicTypes/Demand.lhs +++ b/compiler/basicTypes/Demand.lhs @@ -24,7 +24,7 @@ module Demand ( seqStrDmd, seqStrDmdList, seqAbsDmd, seqAbsDmdList, seqDemand, seqDemandList, seqDmdType, seqStrictSig, - evalDmd, onceEvalDmd, mkRhsDmd, isStrictDmd, splitCallDmd, splitDmdTy, + evalDmd, headDmd, onceEvalDmd, mkRhsDmd, isStrictDmd, splitCallDmd, splitDmdTy, someCompUsed, isUsed, isUsedDmd, defer, use, deferType, deferEnv, modifyEnv, isProdDmd, isPolyDmd, replicateDmd, splitProdDmd, peelCallDmd, mkCallDmd, @@ -489,10 +489,14 @@ someCompUsed (UProd _ _) = True someCompUsed _ = False -- Evaluation demands -evalDmd :: JointDmd +evalDmd :: Demand evalDmd = mkJointDmd strStr top -onceEvalDmd :: JointDmd +-- A special demand for `seq` +headDmd :: Demand +headDmd = mkJointDmd strStr (UHead One) + +onceEvalDmd :: Demand onceEvalDmd = mkJointDmd strStr (Used One) defer :: Demand -> Demand diff --git a/compiler/prelude/primops.txt.pp b/compiler/prelude/primops.txt.pp index 8446c20..8478177 100644 --- a/compiler/prelude/primops.txt.pp +++ b/compiler/prelude/primops.txt.pp @@ -2002,7 +2002,7 @@ section "Tag to enum stuff" primop DataToTagOp "dataToTag#" GenPrimOp a -> Int# with - strictness = { \ _arity -> mkStrictSig (mkTopDmdType [evalDmd] topRes) } + strictness = { \ _arity -> mkStrictSig (mkTopDmdType [headDmd] topRes) } -- dataToTag# must have an evaluated argument diff --git a/compiler/stranal/DmdAnal.lhs b/compiler/stranal/DmdAnal.lhs index 4dcf4ce..a237163 100644 --- a/compiler/stranal/DmdAnal.lhs +++ b/compiler/stranal/DmdAnal.lhs @@ -380,7 +380,7 @@ aggregating approach exhibits worse results because of the nature of |both| operation for strictness. Consider the example: f y c = - let h x = y |seq| x + let h x = y `seq` x in case of True -> h True False -> y _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
