summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Breitner <mail@joachim-breitner.de>2013-12-04 16:55:18 +0000
committerJoachim Breitner <mail@joachim-breitner.de>2014-02-04 11:05:02 +0000
commit9343ce5c71da6672e056245505ba8ec659aa144d (patch)
tree8fa959e445ff58aac8b4a11f4088a9aff02ee242
parent24fa001912799578d1a658e7d09343a0bd97e748 (diff)
downloadhaskell-9343ce5c71da6672e056245505ba8ec659aa144d.tar.gz
In deferType, return convRes = Converges NoCPR
because this is the right-identity to `bothDmdResult`, and this is the right thing to do in a lazy context.
-rw-r--r--compiler/basicTypes/Demand.lhs7
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/basicTypes/Demand.lhs b/compiler/basicTypes/Demand.lhs
index 5c31a28ba0..b2e762be90 100644
--- a/compiler/basicTypes/Demand.lhs
+++ b/compiler/basicTypes/Demand.lhs
@@ -781,8 +781,9 @@ seqCPRResult RetProd = ()
-- [cprRes] lets us switch off CPR analysis
-- by making sure that everything uses TopRes
-topRes, botRes :: DmdResult
+topRes, convRes, botRes :: DmdResult
topRes = Dunno NoCPR
+convRes = Converges NoCPR
botRes = Diverges
cprSumRes :: ConTag -> DmdResult
@@ -1213,9 +1214,9 @@ postProcessUnsat (True, One) ty = deferType ty
postProcessUnsat (False, One) ty = ty
deferType, reuseType, deferReuse :: DmdType -> DmdType
-deferType (DmdType fv ds _) = DmdType (deferEnv fv) (map deferDmd ds) topRes
+deferType (DmdType fv ds _) = DmdType (deferEnv fv) (map deferDmd ds) convRes
reuseType (DmdType fv ds res_ty) = DmdType (reuseEnv fv) (map reuseDmd ds) res_ty
-deferReuse (DmdType fv ds _) = DmdType (deferReuseEnv fv) (map deferReuseDmd ds) topRes
+deferReuse (DmdType fv ds _) = DmdType (deferReuseEnv fv) (map deferReuseDmd ds) convRes
deferEnv, reuseEnv, deferReuseEnv :: DmdEnv -> DmdEnv
deferEnv fv = mapVarEnv deferDmd fv