Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data C :: *
- data O :: *
- data Block (n :: * -> * -> *) e x :: (* -> * -> *) -> * -> * -> *
- lastNode :: Block n x C -> n O C
- entryLabel :: NonLocal thing => forall x. thing C x -> Label
- foldNodesBwdOO :: (CmmNode O O -> f -> f) -> Block CmmNode O O -> f -> 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 family Fact x f :: *
- type FactBase f = LabelMap f
- getFact :: DataflowLattice f -> Label -> FactBase f -> f
- mkFactBase :: DataflowLattice f -> [(Label, f)] -> FactBase f
- analyzeCmmFwd :: DataflowLattice f -> TransferFun f -> CmmGraph -> FactBase f -> FactBase f
- analyzeCmmBwd :: DataflowLattice f -> TransferFun f -> CmmGraph -> FactBase f -> FactBase f
- changedIf :: Bool -> a -> JoinedFact a
- joinOutFacts :: NonLocal n => DataflowLattice f -> n e C -> FactBase f -> f
Documentation
Used at the type level to indicate a "closed" structure which supports control transfer only through the use of named labels---no "fallthrough" is permitted. The number of control-flow edges is unconstrained.
Used at the type level to indicate an "open" structure with a unique, unnamed control-flow edge flowing in or out. Fallthrough and concatenation are permitted at an open point.
data Block (n :: * -> * -> *) e x :: (* -> * -> *) -> * -> * -> * Source #
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.
foldNodesBwdOO :: (CmmNode O O -> f -> f) -> Block CmmNode O O -> f -> f Source #
Folds backward over all nodes of an open-open block. Strict in the accumulator.
data JoinedFact a Source #
The result of joining OldFact and NewFact.
Changed !a | Result is different than OldFact. |
NotChanged !a | Result is the same as OldFact. |
mkFactBase :: DataflowLattice f -> [(Label, f)] -> FactBase f Source #
Returns the joined facts for each label.
analyzeCmmFwd :: DataflowLattice f -> TransferFun f -> CmmGraph -> FactBase f -> FactBase f Source #
analyzeCmmBwd :: DataflowLattice f -> TransferFun f -> CmmGraph -> FactBase f -> 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.