DFMonad
Documentation
data DataflowLattice a
Constructors
| DataflowLattice | |
Fields
| |
class DataflowAnalysis m where
Methods
Arguments
| :: m f () | Useful for starting a new iteration |
factsStatus :: m f ChangeFlag
Arguments
| :: m f a | |
| -> m f a | Do a new analysis and then throw away all the related state. |
setFact :: Outputable f => BlockId -> f -> m f ()
getExitFact :: m f f
setExitFact :: Outputable f => f -> m f ()
Arguments
| :: 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 ()
Instances
| Monad m => DataflowAnalysis (DFM' m) |
runDFM :: Monad m => DataflowLattice f -> DFM' m f a -> m a
markGraphRewritten :: Monad m => DFM' m f ()
module OptimizationFuel