| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
GHC.Cmm.Dataflow
Synopsis
- type C = 'Closed
- type O = 'Open
- data Block n e x
- lastNode :: Block n x C -> n O C
- entryLabel :: NonLocal thing => thing C x -> Label
- foldNodesBwdOO :: (node O O -> f -> f) -> Block node O O -> f -> f
- foldRewriteNodesBwdOO :: forall f node. (node O O -> f -> UniqSM (Block node O O, f)) -> Block node O O -> f -> UniqSM (Block node O O, f)
- data DataflowLattice a = DataflowLattice {}
- newtype OldFact a = OldFact a
- newtype NewFact a = NewFact a
- data JoinedFact a- = Changed !a
- | NotChanged !a
 
- type TransferFun f = CmmBlock -> FactBase f -> FactBase f
- type RewriteFun f = CmmBlock -> FactBase f -> UniqSM (CmmBlock, FactBase f)
- type family Fact (x :: Extensibility) f :: Type
- type FactBase f = LabelMap f
- getFact :: DataflowLattice f -> Label -> FactBase f -> f
- mkFactBase :: DataflowLattice f -> [(Label, f)] -> FactBase f
- analyzeCmmFwd :: NonLocal node => DataflowLattice f -> TransferFun' node f -> GenCmmGraph node -> FactBase f -> FactBase f
- analyzeCmmBwd :: NonLocal node => DataflowLattice f -> TransferFun' node f -> GenCmmGraph node -> FactBase f -> FactBase f
- rewriteCmmBwd :: NonLocal node => DataflowLattice f -> RewriteFun' node f -> GenCmmGraph node -> FactBase f -> UniqSM (GenCmmGraph node, FactBase f)
- changedIf :: Bool -> a -> JoinedFact a
- joinOutFacts :: NonLocal n => DataflowLattice f -> n e C -> FactBase f -> f
- joinFacts :: DataflowLattice f -> [f] -> f
Documentation
A sequence of nodes. May be any of four shapes (OO, OC, CO, CC). Open at the entry means single entry, mutatis mutandis for exit. A closedclosed block is a basic/ block and can't be extended further. Clients should avoid manipulating blocks and should stick to either nodes or graphs.
Instances
| OutputableP Platform (Block CmmNode C C) Source # | |
| OutputableP Platform (Block CmmNode C O) Source # | |
| OutputableP Platform (Block CmmNode O C) Source # | |
| OutputableP Platform (Block CmmNode O O) Source # | |
| OutputableP Platform (Graph CmmNode e x) Source # | |
| NonLocal n => NonLocal (Block n) Source # | |
| Defined in GHC.Cmm.Dataflow.Graph Methods entryLabel :: forall (x :: Extensibility). Block n C x -> Label Source # successors :: forall (e :: Extensibility). Block n e C -> [Label] Source # | |
foldNodesBwdOO :: (node O O -> f -> f) -> Block node O O -> f -> f Source #
Folds backward over all nodes of an open-open block. Strict in the accumulator.
foldRewriteNodesBwdOO :: forall f node. (node O O -> f -> UniqSM (Block node O O, f)) -> Block node O O -> f -> UniqSM (Block node O O, f) Source #
Folds backward over all the nodes of an open-open block and allows
 rewriting them. The accumulator is both the block of nodes and f (usually
 dataflow facts).
 Strict in both accumulated parts.
data DataflowLattice a Source #
Constructors
| DataflowLattice | |
data JoinedFact a Source #
The result of joining OldFact and NewFact.
Constructors
| Changed !a | Result is different than OldFact. | 
| NotChanged !a | Result is the same as OldFact. | 
type RewriteFun f = CmmBlock -> FactBase f -> UniqSM (CmmBlock, FactBase f) Source #
Function for rewrtiting and analysis combined. To be used with
 rewriteCmm.
Currently set to work with UniqSM monad, but we could probably abstract
 that away (if we do that, we might want to specialize the fixpoint algorithms
 to the particular monads through SPECIALIZE).
type family Fact (x :: Extensibility) f :: Type Source #
mkFactBase :: DataflowLattice f -> [(Label, f)] -> FactBase f Source #
Returns the joined facts for each label.
analyzeCmmFwd :: NonLocal node => DataflowLattice f -> TransferFun' node f -> GenCmmGraph node -> FactBase f -> FactBase f Source #
analyzeCmmBwd :: NonLocal node => DataflowLattice f -> TransferFun' node f -> GenCmmGraph node -> FactBase f -> FactBase f Source #
rewriteCmmBwd :: NonLocal node => DataflowLattice f -> RewriteFun' node f -> GenCmmGraph node -> FactBase f -> UniqSM (GenCmmGraph node, FactBase f) Source #
changedIf :: Bool -> a -> JoinedFact a Source #
joinOutFacts :: NonLocal n => DataflowLattice f -> n e C -> FactBase f -> f Source #
Returns the result of joining the facts from all the successors of the provided node or block.
joinFacts :: DataflowLattice f -> [f] -> f Source #