Documentation
data DataflowLattice a Source
DataflowLattice | |
|
class DataflowAnalysis m whereSource
:: m f () | Useful for starting a new iteration |
factsStatus :: m f ChangeFlagSource
:: m f a | |
-> m f a | Do a new analysis and then throw away all the related state. |
getFact :: BlockId -> m f fSource
setFact :: Outputable f => BlockId -> f -> m f ()Source
getExitFact :: m f fSource
setExitFact :: Outputable f => f -> m f ()Source
:: Outputable f | |
=> BlockId | |
-> f | |
-> m f () | assert fact already at this val |
forgetFact :: BlockId -> m f ()Source
addLastOutFact :: (BlockId, f) -> m f ()Source
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)]Source
forgetLastOutFacts :: m f ()Source
getAllFacts :: m f (BlockEnv f)Source
setAllFacts :: BlockEnv f -> m f ()Source
Monad m => DataflowAnalysis (DFM' m) |
runDFM :: Monad m => DataflowLattice f -> DFM' m f a -> m aSource
markGraphRewritten :: Monad m => DFM' m f ()Source
module OptimizationFuel