|
|
|
|
| Synopsis |
|
| class (Outputable m, Outputable l, LastNode l, Outputable (LGraph m l)) => DebugNodes m l | | | | | newtype LastOutFacts a = LastOutFacts [(BlockId, a)] | | | zdfSolveFrom :: (DataflowSolverDirection transfers fixedpt, DebugNodes m l, Outputable a) => BlockEnv a -> PassName -> DataflowLattice a -> transfers m l a -> a -> Graph m l -> FuelMonad (fixedpt m l a ()) | | | zdfRewriteFrom :: (DataflowDirection transfers fixedpt rewrites, DebugNodes m l, Outputable a) => RewritingDepth -> BlockEnv a -> PassName -> DataflowLattice a -> transfers m l a -> rewrites m l a -> a -> Graph m l -> FuelMonad (fixedpt m l a (Graph m l)) | | | zdfSolveFromL :: (DataflowSolverDirection transfers fixedpt, DebugNodes m l, Outputable a) => BlockEnv a -> PassName -> DataflowLattice a -> transfers m l a -> a -> LGraph m l -> FuelMonad (fixedpt m l a ()) | | | data ForwardTransfers middle last a = ForwardTransfers {} | | | data BackwardTransfers middle last a = BackwardTransfers {} | | | data ForwardRewrites middle last a = ForwardRewrites {} | | | data BackwardRewrites middle last a = BackwardRewrites {} | | | data ForwardFixedPoint m l fact a | | | type BackwardFixedPoint = CommonFixedPoint | | | zdfFpFacts :: FixedPoint fp => fp m l fact a -> BlockEnv fact | | | zdfFpOutputFact :: FixedPoint fp => fp m l fact a -> fact | | | zdfGraphChanged :: FixedPoint fp => fp m l fact a -> ChangeFlag | | | zdfDecoratedGraph :: FixedPoint fp => fp m l fact a -> Graph (fact, m) (fact, l) | | | zdfFpContents :: FixedPoint fp => fp m l fact a -> a | | | zdfFpLastOuts :: ForwardFixedPoint m l fact a -> LastOutFacts fact | | | zdfBRewriteFromL :: (DebugNodes m l, Outputable a) => RewritingDepth -> BlockEnv a -> PassName -> DataflowLattice a -> BackwardTransfers m l a -> BackwardRewrites m l a -> a -> LGraph m l -> FuelMonad (BackwardFixedPoint m l a (LGraph m l)) | | | zdfFRewriteFromL :: (DebugNodes m l, Outputable a) => RewritingDepth -> BlockEnv a -> PassName -> DataflowLattice a -> ForwardTransfers m l a -> ForwardRewrites m l a -> a -> LGraph m l -> FuelMonad (ForwardFixedPoint m l a (LGraph m l)) |
|
|
| Documentation |
|
| class (Outputable m, Outputable l, LastNode l, Outputable (LGraph m l)) => DebugNodes m l |
| Instances | |
|
|
| data RewritingDepth |
| Constructors | | RewriteShallow | | | RewriteDeep | |
|
|
|
| newtype LastOutFacts a |
| Constructors | | LastOutFacts [(BlockId, a)] | These are facts flowing out of a last node to the node's successors.
They are either to be set (if they pertain to the graph currently
under analysis) or propagated out of a sub-analysis
|
|
|
|
| zdfSolveFrom |
| :: (DataflowSolverDirection transfers fixedpt, DebugNodes m l, Outputable a) | | | => BlockEnv a | Initial facts (unbound == bottom)
| | -> PassName | | | -> DataflowLattice a | Lattice
| | -> transfers m l a | Dataflow transfer functions
| | -> a | Fact flowing in (at entry or exit)
| | -> Graph m l | Graph to be analyzed
| | -> FuelMonad (fixedpt m l a ()) | Answers
|
|
|
| zdfRewriteFrom :: (DataflowDirection transfers fixedpt rewrites, DebugNodes m l, Outputable a) => RewritingDepth -> BlockEnv a -> PassName -> DataflowLattice a -> transfers m l a -> rewrites m l a -> a -> Graph m l -> FuelMonad (fixedpt m l a (Graph m l)) |
|
| zdfSolveFromL :: (DataflowSolverDirection transfers fixedpt, DebugNodes m l, Outputable a) => BlockEnv a -> PassName -> DataflowLattice a -> transfers m l a -> a -> LGraph m l -> FuelMonad (fixedpt m l a ()) |
|
| data ForwardTransfers middle last a |
| For a forward transfer, you're given the fact on a node's
inedge and you compute the fact on the outedge. Because a last node
may have multiple outedges, each pointing to a labelled
block, so instead of a fact it produces a list of (BlockId, fact) pairs.
| | Constructors | | ForwardTransfers | | | ft_first_out :: BlockId -> a -> a | | | ft_middle_out :: middle -> a -> a | | | ft_last_outs :: last -> a -> LastOutFacts a | | | ft_exit_out :: a -> a | |
|
| Instances | |
|
|
| data BackwardTransfers middle last a |
| For a backward transfer, you're given the fact on a node's
outedge and you compute the fact on the inedge. Facts have type a.
A last node may have multiple outedges, each pointing to a labelled
block, so instead of a fact it is given a mapping from BlockId to fact.
| | Constructors | | BackwardTransfers | | | bt_first_in :: BlockId -> a -> a | | | bt_middle_in :: middle -> a -> a | | | bt_last_in :: last -> (BlockId -> a) -> a | |
|
| Instances | |
|
|
| data ForwardRewrites middle last a |
| A forward rewrite takes the same inputs as a forward transfer,
but instead of producing a fact, it produces a replacement graph or Nothing.
| | Constructors | | Instances | |
|
|
| data BackwardRewrites middle last a |
| A backward rewrite takes the same inputs as a backward transfer,
but instead of producing a fact, it produces a replacement graph or Nothing.
| | Constructors | | Instances | |
|
|
| data ForwardFixedPoint m l fact a |
| A forward problem needs the common fields, plus the facts on the outedges.
| Instances | |
|
|
| type BackwardFixedPoint = CommonFixedPoint |
| The common fixed point is sufficient for a backward problem.
|
|
| zdfFpFacts :: FixedPoint fp => fp m l fact a -> BlockEnv fact |
|
| zdfFpOutputFact :: FixedPoint fp => fp m l fact a -> fact |
|
| zdfGraphChanged :: FixedPoint fp => fp m l fact a -> ChangeFlag |
|
| zdfDecoratedGraph :: FixedPoint fp => fp m l fact a -> Graph (fact, m) (fact, l) |
|
| zdfFpContents :: FixedPoint fp => fp m l fact a -> a |
|
| zdfFpLastOuts :: ForwardFixedPoint m l fact a -> LastOutFacts fact |
|
| zdfBRewriteFromL :: (DebugNodes m l, Outputable a) => RewritingDepth -> BlockEnv a -> PassName -> DataflowLattice a -> BackwardTransfers m l a -> BackwardRewrites m l a -> a -> LGraph m l -> FuelMonad (BackwardFixedPoint m l a (LGraph m l)) |
|
| zdfFRewriteFromL :: (DebugNodes m l, Outputable a) => RewritingDepth -> BlockEnv a -> PassName -> DataflowLattice a -> ForwardTransfers m l a -> ForwardRewrites m l a -> a -> LGraph m l -> FuelMonad (ForwardFixedPoint m l a (LGraph m l)) |
|
| Produced by Haddock version 2.7.2 |