ghc-8.4.1: The GHC API

Safe HaskellNone
LanguageHaskell2010

Hoopl.Graph

Synopsis

Documentation

type Body n = LabelMap (Block n C C) Source #

A (possibly empty) collection of closed/closed blocks

type Graph = Graph' Block Source #

A control-flow graph, which may take any of four shapes (O/O, OC, CO, C/C). A graph open at the entry has a single, distinguished, anonymous entry point; if a graph is closed at the entry, its entry point(s) are supplied by a context.

data Graph' block (n :: * -> * -> *) e x where Source #

Graph' is abstracted over the block type, so that we can build graphs of annotated blocks for example (Compiler.Hoopl.Dataflow needs this).

Constructors

GNil :: Graph' block n O O 
GUnit :: block n O O -> Graph' block n O O 
GMany :: MaybeO e (block n O C) -> Body' block n -> MaybeO x (block n C O) -> Graph' block n e x 
Instances
Outputable (Graph CmmNode e x) Source # 
Instance details

class NonLocal thing where Source #

Gives access to the anchor points for nonlocal edges as well as the edges themselves

Minimal complete definition

entryLabel, successors

Methods

entryLabel Source #

Arguments

:: thing C x 
-> Label

The label of a first node or block

successors Source #

Arguments

:: thing e C 
-> [Label]

Gives control-flow successors

Instances
NonLocal CmmNode Source # 
Instance details
NonLocal n => NonLocal (Block n) Source # 
Instance details

Methods

entryLabel :: Block n C x -> Label Source #

successors :: Block n e C -> [Label] Source #

addBlock :: NonLocal thing => thing C C -> LabelMap (thing C C) -> LabelMap (thing C C) Source #

bodyList :: Body' block n -> [(Label, block n C C)] Source #

emptyBody :: Body' block n Source #

labelsDefined :: forall block n e x. NonLocal (block n) => Graph' block n e x -> LabelSet Source #

mapGraph :: (forall e x. n e x -> n' e x) -> Graph n e x -> Graph n' e x Source #

Maps over all nodes in a graph.

mapGraphBlocks :: forall block n block' n' e x. (forall e x. block n e x -> block' n' e x) -> Graph' block n e x -> Graph' block' n' e x Source #

Function mapGraphBlocks enables a change of representation of blocks, nodes, or both. It lifts a polymorphic block transform into a polymorphic graph transform. When the block representation stabilizes, a similar function should be provided for blocks.

postorder_dfs_from :: (NonLocal block, LabelsPtr b) => LabelMap (block C C) -> b -> [block C C] Source #