X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmmLiveZ.hs;h=4dc0874eb7c1c1e41920062df23113493a12672c;hb=0f5e104c36b1dc3d8deeec5fef3d65e7b3a1b5ad;hp=501d852095fb6dd8b8bec0090c30ff6f7bbd1021;hpb=ba60dc74fdb18fe655cfac605130cf6480116e47;p=ghc-hetmet.git diff --git a/compiler/cmm/CmmLiveZ.hs b/compiler/cmm/CmmLiveZ.hs index 501d852..4dc0874 100644 --- a/compiler/cmm/CmmLiveZ.hs +++ b/compiler/cmm/CmmLiveZ.hs @@ -7,13 +7,15 @@ module CmmLiveZ ) where -import Cmm +import BlockId import CmmExpr import CmmTx import DFMonad +import Monad import PprCmm() import PprCmmZ() -import ZipDataflow0 +import ZipCfg +import ZipDataflow import ZipCfgCmmRep import Maybes @@ -39,14 +41,14 @@ type BlockEntryLiveness = BlockEnv CmmLive ----------------------------------------------------------------------------- -- | Calculated liveness info for a CmmGraph ----------------------------------------------------------------------------- -cmmLivenessZ :: CmmGraph -> BlockEntryLiveness -cmmLivenessZ g = env - where env = runDFA liveLattice $ do { run_b_anal transfer g; getAllFacts } - transfer = BComp "liveness analysis" exit last middle first - exit = emptyUniqSet - first live _ = live - middle = flip middleLiveness - last = flip lastLiveness +cmmLivenessZ :: CmmGraph -> FuelMonad BlockEntryLiveness +cmmLivenessZ g = liftM zdfFpFacts $ (res :: FuelMonad (CmmBackwardFixedPoint CmmLive)) + where res = zdfSolveFrom emptyBlockEnv "liveness analysis" liveLattice transfers + emptyUniqSet (graphOfLGraph g) + transfers = BackwardTransfers first middle last + first live _ = live + middle = flip middleLiveness + last = flip lastLiveness -- | The transfer equations use the traditional 'gen' and 'kill' -- notations, which should be familiar from the dragon book.