| ghc-6.10.4: The GHC API | Contents | Index

DFMonad

Documentation
data DataflowLattice a

Constructors

DataflowLattice |

fact_name :: String |
fact_bot :: a |
fact_add_to :: a -> a -> TxRes a | compute join of two args; something changed iff join is greater than 2nd arg
fact_do_logging :: Bool |

class DataflowAnalysis m where

Methods

markFactsUnchanged

:: |
=> m f () | Useful for starting a new iteration

factsStatus :: m f ChangeFlag
subAnalysis

:: |
=> m f a |
-> m f a | Do a new analysis and then throw away all the related state.

getFact :: BlockId -> m f f
setFact :: Outputable f => BlockId -> f -> m f ()
getExitFact :: m f f
setExitFact :: Outputable f => f -> m f ()
checkFactMatch

:: Outputable f |
=> BlockId |
-> f |
-> m f () | assert fact already at this val

botFact :: m f f
forgetFact :: BlockId -> m f ()
addLastOutFact :: (BlockId, f) -> m f ()

It might be surprising these next two are needed in a pure analysis, but for some problems we do a shallow rewriting in which a rewritten graph is not itself considered for further rewriting but merely undergoes an analysis. In this case the results of a forward analysis might produce new facts that go on BlockId's that reside outside the graph being analyzed. Thus these lastOutFacts need to be available even in a pure analysis.

bareLastOutFacts :: m f [(BlockId, f)]
forgetLastOutFacts :: m f ()
getAllFacts :: m f (BlockEnv f)
setAllFacts :: BlockEnv f -> m f ()
factsEnv :: Monad (m f) => m f (BlockId -> f)

Instances

Monad m => DataflowAnalysis (DFM' m)

type DFM fact a = DFM' FuelMonad fact a
runDFM :: Monad m => DataflowLattice f -> DFM' m f a -> m a
liftToDFM :: FuelMonad x -> DFM f x
markGraphRewritten :: Monad m => DFM' m f ()
graphWasRewritten :: DFM f ChangeFlag
freshBlockId :: String -> DFM f BlockId
module OptimizationFuel
Produced by Haddock version 2.4.2