\section{Results}
Now we've seen the challenges encountered during the internship, what results
were actually achieved?

\subsection{LLVM improvements}
During the entire internship, both small and big improvements have been made to
the LLVM codebase. Most of these changes are directly useful for the MontiumC
compiler, some only indirectly. Examples of these improvements include better
support for struct types, better documentation of the testing framework and a
lot of small fixes and changes to make LLVM more flexible and extendable.

\subsection{MontiumC improvements}
Improvements made to the MontiumC language are mostly limited to making the
langauge better specified. Things which had limited support now either have full
support, or were removed from the language.

Usage of global variables, struct variables, arguments and returns values and
constant arguments is now possible in most cases, where it only was possible in
some specific cases before.

Additionally, there has been some experimenting with new MontiumC features, such
as C style memory access and loops. So far, these features have not received
enough work in both the frontend as the backend to be supported in the language
yet.

\subsection{Frontend improvements}
The MontiumC frontend has seen a lot of improvements.

Part of these improvements are to make the language more stable. This was mostly
done by completely reviewing the set of LLVM transformation passes and selecting
a subset that fits the MontiumC language. Addtionally, some transformation
passes were added, which also make the backend simpler (for example,
reducing variable lifetimes, global variable removal, function specialization).

Other improvements cause the frontend to become more usable as a program. These
include improved error handling, extra configurability through commandline
options and support for linking multiple files together.
