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 |
|
|
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) |