24 lines
800 B
Standard ML
24 lines
800 B
Standard ML
|
|
structure Flow =
|
||
|
|
struct
|
||
|
|
datatype flowgraph = FGRAPH of {control: Graph.graph,
|
||
|
|
def: Temp.temp list Graph.Table.table,
|
||
|
|
use: Temp.temp list Graph.Table.table,
|
||
|
|
ismove: bool Graph.Table.table}
|
||
|
|
|
||
|
|
(* Note: any "use" within the block is assumed to be BEFORE a "def"
|
||
|
|
of the same variable. If there is a def(x) followed by use(x)
|
||
|
|
in the same block, do not mention the use in this data structure,
|
||
|
|
mention only the def.
|
||
|
|
|
||
|
|
More generally:
|
||
|
|
If there are any nonzero number of defs, mention def(x).
|
||
|
|
If there are any nonzero number of uses BEFORE THE FIRST DEF,
|
||
|
|
mention use(x).
|
||
|
|
|
||
|
|
For any node in the graph,
|
||
|
|
Graph.Table.look(def,node) = SOME(def-list)
|
||
|
|
Graph.Table.look(use,node) = SOME(use-list)
|
||
|
|
*)
|
||
|
|
|
||
|
|
end
|