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