ghc-7.0.3: The GHC API

ZipDataflow

Synopsis

- class (Outputable m, Outputable l, LastNode l, Outputable (LGraph m l)) => DebugNodes m l
- data RewritingDepth
  - = RewriteShallow
  - | RewriteDeep
- 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 {
  - ft_first_out :: BlockId -> a -> a
  - ft_middle_out :: middle -> a -> a
  - ft_last_outs :: last -> a -> LastOutFacts a
  - ft_exit_out :: a -> a
  }
- data BackwardTransfers middle last a = BackwardTransfers {
  - bt_first_in :: BlockId -> a -> a
  - bt_middle_in :: middle -> a -> a
  - bt_last_in :: last -> (BlockId -> a) -> a
  }
- data ForwardRewrites middle last a = ForwardRewrites {
  - fr_first :: BlockId -> a -> Maybe (AGraph middle last)
  - fr_middle :: middle -> a -> Maybe (AGraph middle last)
  - fr_last :: last -> a -> Maybe (AGraph middle last)
  - fr_exit :: a -> Maybe (AGraph middle last)
  }
- data BackwardRewrites middle last a = BackwardRewrites {
  - br_first :: BlockId -> a -> Maybe (AGraph middle last)
  - br_middle :: middle -> a -> Maybe (AGraph middle last)
  - br_last :: last -> (BlockId -> a) -> Maybe (AGraph middle last)
  - br_exit :: Maybe (AGraph middle last)
  }
- 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

DebugNodes Middle Last |

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

Arguments

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

Fields

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

DataflowSolverDirection ForwardTransfers ForwardFixedPoint |
DataflowDirection ForwardTransfers ForwardFixedPoint ForwardRewrites |

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 |

Fields

bt_first_in :: BlockId -> a -> a
bt_middle_in :: middle -> a -> a
bt_last_in :: last -> (BlockId -> a) -> a

Instances

DataflowSolverDirection BackwardTransfers BackwardFixedPoint |
DataflowDirection BackwardTransfers BackwardFixedPoint BackwardRewrites |

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

ForwardRewrites |

Fields

fr_first :: BlockId -> a -> Maybe (AGraph middle last)
fr_middle :: middle -> a -> Maybe (AGraph middle last)
fr_last :: last -> a -> Maybe (AGraph middle last)
fr_exit :: a -> Maybe (AGraph middle last)

Instances

DataflowDirection ForwardTransfers ForwardFixedPoint ForwardRewrites |

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

BackwardRewrites |

Fields

br_first :: BlockId -> a -> Maybe (AGraph middle last)
br_middle :: middle -> a -> Maybe (AGraph middle last)
br_last :: last -> (BlockId -> a) -> Maybe (AGraph middle last)
br_exit :: Maybe (AGraph middle last)

Instances

DataflowDirection BackwardTransfers BackwardFixedPoint BackwardRewrites |

data ForwardFixedPoint m l fact a

A forward problem needs the common fields, plus the facts on the outedges.

Instances

FixedPoint ForwardFixedPoint |
DataflowSolverDirection ForwardTransfers ForwardFixedPoint |
DataflowDirection ForwardTransfers ForwardFixedPoint ForwardRewrites |

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