ghc-7.0.1: The GHC API

DFMonad

Documentation

data DataflowLattice a Source

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 whereSource

Methods

markFactsUnchangedSource

Arguments

:: m f ()

Useful for starting a new iteration

factsStatus :: m f ChangeFlagSource

subAnalysisSource

Arguments

:: m f a 
-> m f a

Do a new analysis and then throw away all the related state.

getFact :: BlockId -> m f fSource

setFact :: Outputable f => BlockId -> f -> m f ()Source

getExitFact :: m f fSource

setExitFact :: Outputable f => f -> m f ()Source

checkFactMatchSource

Arguments

:: Outputable f 
=> BlockId 
-> f 
-> m f ()

assert fact already at this val

botFact :: m f fSource

forgetFact :: BlockId -> m f ()Source

addLastOutFact :: (BlockId, f) -> m f ()Source

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

forgetLastOutFacts :: m f ()Source

getAllFacts :: m f (BlockEnv f)Source

setAllFacts :: BlockEnv f -> m f ()Source

factsEnv :: Monad (m f) => m f (BlockId -> f)Source

Instances

Monad m => DataflowAnalysis (DFM' m) 

type DFM fact a = DFM' FuelMonad fact aSource

runDFM :: Monad m => DataflowLattice f -> DFM' m f a -> m aSource

markGraphRewritten :: Monad m => DFM' m f ()Source