DFMonad

ghc-7.0.4: The GHC API

DFMonad

# Documentation

data DataflowLattice a

Constructors

DataflowLattice |
Fields 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

Arguments

:: m f () | Useful for starting a new iteration

factsStatus :: m f ChangeFlag

subAnalysis

Arguments

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

Arguments

:: Outputable f |
=> BlockId |
-> f |
-> m f () | assert fact already at this val

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

Monad m => DataflowAnalysis (DFM' m) |

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

module OptimizationFuel