summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/cmm/CmmContFlowOpt.hs13
1 files changed, 6 insertions, 7 deletions
diff --git a/compiler/cmm/CmmContFlowOpt.hs b/compiler/cmm/CmmContFlowOpt.hs
index abbaa63336..aa2925fe53 100644
--- a/compiler/cmm/CmmContFlowOpt.hs
+++ b/compiler/cmm/CmmContFlowOpt.hs
@@ -151,8 +151,8 @@ blockConcat splitting_procs g@CmmGraph { g_entry = entry_id }
_otherwise -> l
shouldConcatWith b block
- | num_preds b == 1 = True -- only one predecessor: go for it
| okToDuplicate block = True -- short enough to duplicate
+ | num_preds b == 1 = True -- only one predecessor: go for it
| otherwise = False
where num_preds bid = mapLookup bid backEdges `orElse` 0
@@ -166,7 +166,7 @@ blockConcat splitting_procs g@CmmGraph { g_entry = entry_id }
backEdges :: BlockEnv Int -- number of predecessors for each block
backEdges = mapInsertWith (+) entry_id 1 $ -- add 1 for the entry id
- mapMap setSize $ predMap blocks
+ predMap blocks
splice :: Block CmmNode C O -> CmmBlock -> CmmBlock
splice head rest = head `blockAppend` snd (blockSplitHead rest)
@@ -253,12 +253,11 @@ mkCmmCondBranch p t f = if t == f then CmmBranch t else CmmCondBranch p t f
----------------------------------------------------------------
-- Build a map from a block to its set of predecessors. Very useful.
-predMap :: [CmmBlock] -> BlockEnv BlockSet
+predMap :: [CmmBlock] -> BlockEnv Int
predMap blocks = foldr add_preds mapEmpty blocks -- find the back edges
- where add_preds block env = foldl (add (entryLabel block)) env (successors block)
- add bid env b' =
- mapInsert b' (setInsert bid (mapLookup b' env `orElse` setEmpty)) env
-
+ where
+ add_preds block env = foldr add env (successors block)
+ where add lbl env = mapInsertWith (+) lbl 1 env
-----------------------------------------------------------------------------
--