\section{Low Level Virtual Machine}
\label{LLVM}
The Low Level Virtual Machine project (LLVM, \cite{LLVM}, \cite{Lattner:MSThesis02})
is a framework for compiler construction. It provides its own intermediate
representation, the LLVM IR. This is a simple language that can be used to
expres any program in a static single assignment (SSA) form that is easy to
reason with and transform.

Additionally, LLVM provides a host of libraries to work with this IR. There is
code for:
\begin{itemize}
\item reading, writing, generating and manipulating LLVM IR.
\item transformation (optimization) of LLVM IR.
\item codegeneration for various architectures.
\item just-in-time codegeneration.
\end{itemize}

In addition, the LLVM project provides two frontends for generating LLVM IR:
llvm-gcc, which uses gcc to compile a lot of languages with a LLVM backend (from
the gcc point of view) and clang, which is a completely new project designed to
parse and emit LLVM IR for all c-like languages (C, ObjC, C++).
