diff options
author | Michael D. Adams <t-madams@microsoft.com> | 2007-05-16 16:01:24 +0000 |
---|---|---|
committer | Michael D. Adams <t-madams@microsoft.com> | 2007-05-16 16:01:24 +0000 |
commit | 4343368be10030e61acaa8fde2cedbb5fb26918c (patch) | |
tree | 92f83302388151a0c417380be0b6ea815b178f89 /compiler/cmm/Dataflow.hs | |
parent | 8e3b5645e0bab683444c81bbbac87e2df6799959 (diff) | |
download | haskell-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.hs | 11 |
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. |