Programming Languages and Compilers

The Formal Languages and Compilers group has been involved in Compiler Construction projects, funded by the European Commission and by STMicroelectronics, for more than 10 years.

The current focus is on compiler support for many-core heterogeneous platforms.

A Compiler Toolchain for OpenCL

The goal of this project is to build an effective compiler toolchain for the OpenCL API and language, targeting both NUMA x86 multicore systems and STMicroelectronics novel heterogeneous many-core architecture, STHORM. The project is currently composed of the following tools:

  • OpenCLang: compiler front-end for OpenCL, developed by Alberto Magni and Ettore Speziale.
  • OpenCRun: OpenCL runtime support for NUMA x86 architectures, developed by Ettore Speziale and further extended by Giulio Sichel (x86) and Marco Bonacina (STHORM).
  • LLVM backend for STHORM, developed by Michele Scandale.
  • LLVM backend for OpenRISC, developed by Michele Scandale, Michele Beretta and Alessandro Di Federico.

We are currently working on completing OpenCRun and on supporting new features of the OR10n/PULP OpenRISC core from ETH Zurich and University of Bologna.

Past Projects

Within the Programming Languages and Compilers area, we have run several projects that resulted in the implementation of four different virtual execution environments.


The application fields of bytecode virtual machines and VLIW processors overlap in the area of embedded and mobile systems, and these two technologies offer different benefits, namely high code portability and low power consumption and hardware costs. The adoption of dynamic compilation makes it possible to bridge the gap between the two technologies, but special attention must be paid to the need for software instruction scheduling that characterizes the VLIW architectures.

This project aims at exploring the possibilities of applying JIT translation of Java Bytecode and CIL (and related virtual machine instructions) on highly parallel architectures, such as VLIWs and multiprocessors.

ILDJIT: design and implementation of a Common Language Runtime (a.k.a. .Net) Virtual Execution System. ILDJIT started building up from the Portable.Net platform, but is currently mostly independent from it – it only uses instruction selection, register allocation and the mscorelib from that project.

ILDJIT was our main development effort for several years, with a team of developers including a PhD student (Simone Campanoni, lead developer), a couple of Master students and two undergraduate students doing their thesis work on the system and several graduate students working on smaller scale projects such as garbage collectors, dataflow optimization, and class library implementation.

ILDJIT development was pursued within the FP7 STREP European project Open Media Platform, started in January 2008 and concluded in January 2010.

JIST Project

Design and implementation of a Java JIT compiler

  • JIST1-4: optimized register allocation, alias analysis and local operation scheduling;
  • JIST5 Superblock Scheduler: extends JIST with a global operation scheduler algorithm;


SeleKaffe is a virtual machine that implements selective dynamic compilation, showcasing advanced method selection techniques based on runtime profiling and fast static analysis.

It extends Kaffe/i386 to support two execution engines at the same time (intrp and jit3) and to perform runtime profiling and engine selection.


Jelatine: design and implementation of a Java VM (from scratches!) based on the CLDC Micro Edition specs.

While the machine is now fairly stable, we are still looking for further developments as well as potential applications (porting and packaging for specific embedded devices as well as testing applications on those devices).

Jelatine's strength lies in its extremely reduced memory requirements vs. its ability to support a fairly complex set of features (CLDC 1.0).


A prototype of a domain specific language aiming at cryptography, published at FDL2007. While the development itself is minimal, the field is open for further development – if you're looking for a Laurea specialistica thesis in programming languages design, I'd be interested in further exploring the field.


Current Team Members

  • Prof. Stefano Crespi Reghizzi
  • Michele Scandale: LLVM STHORM backend developer; lead developer of the OpenCL toolchain for STHORM
  • Michele Beretta: OpenRISC backend developer
  • Alessandro Di Federico: OpenRISC backend developer
  • Marco Bonacina: STHORM runtime support developer
  • Giulio Sichel: OpenCRun developer

Past Team Members

  • Simone Campanoni: ILDJIT lead developer
  • Andrea Di Biagio: task-data affinity
  • Dario Domizioli: JIST5 developer
  • Gerlando Falauto: JIST1-4 developer
  • Alberto Magni: OpenCLang developer
  • Paolo Palumbo: Selekaffe developer
  • Ettore Speziale: OpenCLang/OpenCRun developer
  • Gabriele Svelto: Jelatine developer
  • Martino Sykora: JIST1-4 developer
research/flc.txt · Last modified: 2014/10/20 19:54 by agosta
Recent changes RSS feed Creative Commons License Donate Driven by DokuWiki