1 \section{Low Level Virtual Machine}
3 The Low Level Virtual Machine project (LLVM, \cite{LLVM}, \cite{Lattner:MSThesis02})
4 is a framework for compiler construction. It provides its own intermediate
5 representation, the LLVM IR. This is a simple language that can be used to
6 express any program in a static single assignment (SSA) form that is easy to
7 reason with and apply transformations to.
9 Additionally, LLVM provides a host of libraries to work with this IR. There is
12 \item reading, writing, generating and manipulating LLVM IR.
13 \item transformation (optimization) of LLVM IR.
14 \item codegeneration for various architectures.
15 \item just-in-time codegeneration.
18 In addition, the LLVM project provides two frontends for generating LLVM IR:
19 llvm-gcc, which uses gcc to compile a lot of languages with an LLVM backend (from
20 the gcc point of view) and Clang, which is a completely new project designed to
21 parse and emit LLVM IR for all c-like languages (C, ObjC, C++).
23 From the LLVM project, we use a number of parts. In section \ref{MontiumC}, we
24 saw that Clang frontend is used directly in the Montium frontend. Also, a lot of
25 transformations from the LLVM project are used. Lastly, a number of small
26 library functions and components are used in the frontend.