Cluster
A cluster
represents a compilation unit in linearized form,
and contains information about the control flow, global annotations,
block and edge execution frequencies, and live-in/live-out information.
Its signature is:
signature FLOWGRAPH = sig
structure C : CELLS
structure I : INSTRUCTIONS
structure P : PSEUDO_OPS
structure W : FREQ
sharing I.C = C
datatype block =
PSEUDO of P.pseudo_op
| LABEL of Label.label
| BBLOCK of
{ blknum : int,
freq : W.freq ref,
annotations : Annotations.annotations ref,
liveIn : C.cellset ref,
liveOut : C.cellset ref,
succ : edge list ref,
pred : edge list ref,
insns : I.instruction list ref
}
| ENTRY of
{blknum : int, freq : W.freq ref, succ : edge list ref}
| EXIT of
{blknum : int, freq : W.freq ref, pred : edge list ref}
withtype edge = block * W.freq ref
datatype cluster =
CLUSTER of {
blocks: block list,
entry : block,
exit : block,
regmap: C.regmap,
blkCounter : int ref,
annotations : Annotations.annotations ref
}
end
Clusters are used in
span dependency resolution,
delay slot filling,
assembly,
and machine code
output, since these phases require the code laid out in linearized form.
|
|
Generated by
mltex2html
|
Last modified: Mon Jun 8 14:18:05 UTC 2009 by buildd@vernadsky
|
|