|
|
|
|
| Synopsis |
|
|
|
| Documentation |
|
| data DataflowLattice a |
| Constructors | | DataflowLattice | | | fact_name :: String | | | fact_bot :: a | | | fact_add_to :: a -> a -> TxRes a | compute join of two args; something changed iff join is greater than 2nd arg
| | fact_do_logging :: Bool | |
|
|
|
|
| class DataflowAnalysis m where |
| | Methods | | 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) |
| | Instances | |
|
|
| markFactsUnchanged |
|
|
| factsStatus :: DataflowAnalysis m => m f ChangeFlag |
|
| getFact :: DataflowAnalysis m => BlockId -> m f f |
|
| setFact :: (DataflowAnalysis m, Outputable f) => BlockId -> f -> m f () |
|
| getExitFact :: DataflowAnalysis m => m f f |
|
| setExitFact :: (DataflowAnalysis m, Outputable f) => f -> m f () |
|
| forgetFact :: DataflowAnalysis m => BlockId -> m f () |
|
| botFact :: DataflowAnalysis m => m f f |
|
| setAllFacts :: DataflowAnalysis m => BlockEnv f -> m f () |
|
| getAllFacts :: DataflowAnalysis m => m f (BlockEnv f) |
|
| factsEnv :: (DataflowAnalysis m, Monad (m f)) => m f (BlockId -> f) |
|
| addLastOutFact :: DataflowAnalysis m => (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 :: DataflowAnalysis m => m f [(BlockId, f)] |
|
| forgetLastOutFacts :: DataflowAnalysis m => m f () |
|
| checkFactMatch |
|
|
| subAnalysis |
| :: DataflowAnalysis m | | | => m f a | | | -> m f a | Do a new analysis and then throw away
all the related state.
|
|
|
| type DFM fact a = DFM' FuelMonad fact a |
|
| runDFM :: Monad m => DataflowLattice f -> DFM' m f a -> m a |
|
| liftToDFM :: FuelMonad x -> DFM f x |
|
| markGraphRewritten :: Monad m => DFM' m f () |
|
| graphWasRewritten :: DFM f ChangeFlag |
|
| freshBlockId :: String -> DFM f BlockId |
|
| module OptimizationFuel |
|
| Produced by Haddock version 2.3.0 |