summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-08-08 16:05:11 +0100
committerSimon Marlow <marlowsd@gmail.com>2012-08-09 09:08:58 +0100
commit3a5788c7e09fd6fe3986e731efe71a0cbca24b1d (patch)
tree751273f11b3629bb87344bad5598bd050bbb8546 /compiler
parent50f5016a67060538a5272cd5fa6f4532d0396ef2 (diff)
downloadhaskell-3a5788c7e09fd6fe3986e731efe71a0cbca24b1d.tar.gz
a couple of small optimisations
Diffstat (limited to 'compiler')
-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
-----------------------------------------------------------------------------
--