\section{Annotations}

\subsection{Overview}
A compiler front-end has to be propagate information to
the back-end.  An optimization phase may have to leave behind information
at various places of the IR so that other phases can reuse such information.
MLRISC uses the \newdef{annotations}
mechanism for these functions.  
Individual instructions, basic blocks, and flow graph edges, 
can be attached one or more annotations.  

The basic MLRISC system understands many annotations.  Some examples are:
\begin{description}
   \item[COMMENT] 
         these can be used to attach comments.  If attached to
         an instruction, the assemblers will output 
         them as part of their assembly output.
   \item[BRANCH\_PROB]
          these can be attached to a branch instruction to indicate
          the probability in which is it taken.
   \item[EXECUTION\_FREQ]
          these can be attached to a basic block to indicate 
          its expected execution frequency 
\end{description}

\subsection{Details}
The primitive annotations datatype is defined
to have this \mlrischref{library/annotations.sig}{signature}.
In addition, MLRISC predefined a few primitive annotations that are
recognized by the core system.  This signature is
\mlrischref{instructions/mlriscAnnotations.sig}{MLRISC\_ANNOTATIONS}.
More detailed documentation can be found in this 
\href{http://cm.bell-labs.com/cm/cs/what/smlnj/compiler-notes/annotations.ps}{paper}.
