summaryrefslogtreecommitdiff
path: root/compiler/cmm/Dataflow.hs
diff options
context:
space:
mode:
authorMichael D. Adams <t-madams@microsoft.com>2007-05-16 16:01:24 +0000
committerMichael D. Adams <t-madams@microsoft.com>2007-05-16 16:01:24 +0000
commit4343368be10030e61acaa8fde2cedbb5fb26918c (patch)
tree92f83302388151a0c417380be0b6ea815b178f89 /compiler/cmm/Dataflow.hs
parent8e3b5645e0bab683444c81bbbac87e2df6799959 (diff)
downloadhaskell-4343368be10030e61acaa8fde2cedbb5fb26918c.tar.gz
First complete draft of a CPS algorithm. (Still hackish needs polishing)
Diffstat (limited to 'compiler/cmm/Dataflow.hs')
-rw-r--r--compiler/cmm/Dataflow.hs11
1 files changed, 3 insertions, 8 deletions
diff --git a/compiler/cmm/Dataflow.hs b/compiler/cmm/Dataflow.hs
index 939d67de47..96565c3c58 100644
--- a/compiler/cmm/Dataflow.hs
+++ b/compiler/cmm/Dataflow.hs
@@ -1,4 +1,4 @@
-module Dataflow (mapCmmTop, onBasicBlock, cmmLivenessComment, cmmLiveness) where
+module Dataflow (cmmLivenessComment, cmmLiveness, CmmLive) where
import Cmm
import PprCmm ()
@@ -97,7 +97,7 @@ cmmBlockUpdate ::
-> UniqFM {-BlockId-} CmmLive
-> Maybe (UniqFM {-BlockId-} CmmLive)
cmmBlockUpdate blocks node _ state =
- let old_live = lookupWithDefaultUFM state emptyUniqSet node
+ let old_live = lookupWithDefaultUFM state (panic "unknown block id during liveness analysis") node
block = lookupWithDefaultUFM blocks (panic "unknown block id during liveness analysis") node
new_live = cmmBlockLive state block
in if (sizeUniqSet old_live) == (sizeUniqSet new_live)
@@ -127,7 +127,7 @@ cmmBlockNames blocks = listToUFM $ map block_name blocks where
cmmLiveness :: [CmmBasicBlock] -> UniqFM {-BlockId-} CmmLive
cmmLiveness blocks =
fixedpoint (cmmBlockDependants sources) (cmmBlockUpdate blocks')
- (map blockId blocks) emptyUFM where
+ (map blockId blocks) (listToUFM [(blockId b, emptyUniqSet) | b <- blocks]) where
(sources, targets) = cmmBlockSourcesAndTargets blocks
blocks' = cmmBlockNames blocks
@@ -139,11 +139,6 @@ cmmLivenessComment live (BasicBlock ident stmts) =
stmts' = (CmmComment $ mkFastString $ showSDoc $ ppr $ live'):stmts
live' = map CmmLocal $ uniqSetToList $ lookupWithDefaultUFM live emptyUniqSet ident
-onBasicBlock f (CmmProc ds ident args blocks) = CmmProc ds ident args (f blocks)
-onBasicBlock f x = x
-
-mapCmmTop f (Cmm xs) = Cmm (map f xs)
-
--------------------------------------------------------------------------------
-- Solve a fixed-point of a dataflow problem.