2 Recore Systems is working on the Montium architecture, which is a coarse grained
3 reconfigurable architecture, aiming at high flexibility, paired with low power
4 usage and high performance. For programming the Montium, a flavour of C was
5 developed, called MontiumC. MontiumC is a subset of standard C, providing a
6 library of builtin functions to access the extra features of the Montium.
8 The assignment of this internship focusses on improving the MontiumC compiler.
9 The main goal is to make the compiler consistently support all valid MontiumC
10 programs, instead of giving unexpected compilation errors when some (seemingly)
11 valid constructs are used in certain combinations.
13 As a first subtask, a specification of MontiumC was created. This specification
14 is still conservative, limited to the constructs that the compiler can
15 consistently support. The specification is not yet automatically checked, so
16 input that is outside of the specification might or might not work and will not
17 give the best error messages yet.
19 The MontiumC compiler heavily relies on the LLVM (Low Level Virtual Machine)
20 project, which provides libraries and code for compiler development. This
21 greatly simplifies the maintainance work for the compiler, but at the cost of
22 extra integration effort. Since the LLVM project mainly focusses on "regular"
23 architectures, its code is not always directly usable. This is mostly solvable
24 by adding extra extension hooks to the LLVM code, but sometimes local changes to
25 LLVM are still in use.
27 Outside of the original assignment, there was also some work on the new hardware
28 design, for the next generation Montium. Issues here centered around software
29 pipelining and code compression, and finding the balance between various
30 tradeoffs between flexibility, performance, complexity/area, code size). This
31 work was not finished within the internship, but provided a good learning
34 Currently, the MontiumC compiler is still far from perfect. There are plenty of
35 areas for improvement, including: Checking of specifications and improved error
36 messages, debug info (or line number) propagation to the backend, integrating
37 the (currently separate) backend codegenerator.