Kill varEnvElts in seqDmdEnv
authorBartosz Nitka <niteria@gmail.com>
Fri, 1 Jul 2016 13:50:55 +0000 (06:50 -0700)
committerBartosz Nitka <niteria@gmail.com>
Fri, 1 Jul 2016 15:26:01 +0000 (08:26 -0700)
GHC Trac: #4012

compiler/basicTypes/Demand.hs
compiler/utils/UniqFM.hs

index 9165782..8dc7f3b 100644 (file)
@@ -1306,8 +1306,7 @@ seqDmdType (DmdType env ds res) =
   seqDmdEnv env `seq` seqDemandList ds `seq` seqDmdResult res `seq` ()
 
 seqDmdEnv :: DmdEnv -> ()
-seqDmdEnv env = seqDemandList (varEnvElts env)
-
+seqDmdEnv env = seqEltsUFM seqDemandList env
 
 splitDmdTy :: DmdType -> (Demand, DmdType)
 -- Split off one function argument
index 261dd1c..bb9d95c 100644 (file)
@@ -54,7 +54,7 @@ module UniqFM (
         intersectUFM_C,
         disjointUFM,
         nonDetFoldUFM, foldUFM, nonDetFoldUFM_Directly,
-        anyUFM, allUFM,
+        anyUFM, allUFM, seqEltsUFM,
         mapUFM, mapUFM_Directly,
         elemUFM, elemUFM_Directly,
         filterUFM, filterUFM_Directly, partitionUFM,
@@ -292,6 +292,12 @@ anyUFM p (UFM m) = M.fold ((||) . p) False m
 allUFM :: (elt -> Bool) -> UniqFM elt -> Bool
 allUFM p (UFM m) = M.fold ((&&) . p) True m
 
+seqEltsUFM :: ([elt] -> ()) -> UniqFM elt -> ()
+seqEltsUFM seqList = seqList . nonDetEltsUFM
+  -- It's OK to use nonDetEltsUFM here because the type guarantees that
+  -- the only interesting thing this function can do is to force the
+  -- elements.
+
 -- See Note [Deterministic UniqFM] to learn about nondeterminism.
 -- If you use this please provide a justification why it doesn't introduce
 -- nondeterminism.