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