Quad form is used for most analysis and transformation in the compiler. It maintains strong typing, and tries to be minimal. There are three main variants, and an additional variant which is occasionally useful as an intermediate:
QuadWithTry
, which contains HANDLER
quads to handle thrown exceptions, and does implicit safety-checking.
QuadNoSSA
which handles all exceptions explicitly.
QuadSSI
which is the same as the above, except it is
in SSI form.
QuadRSSx
is a relaxed version of
QuadSSA
/QuadSSI
; during program
transformations it is sometimes easier to break the phi/sigma
constraints of SSA/SSI form without doing a full translation to/from
QuadNoSSA
. Relaxed-SSx (RSSx) form is what we call this
"SSA/SSI form with broken constraints".
For lower-level transformations involving explicit pointer arithmetic,
LowQuad
form must be used.