|=> m f ()||Useful for starting a new iteration
|factsStatus :: m f ChangeFlag|
|=> 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 ()|
|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)|