LEGO is an experimental VLIW/EPIC compiler used to explore the interaction
of the compiler and the microarchitecture and how this symbiotic relationship
can enhance overall processor performance. The building blocks of LEGO are a
set of libraries and executables, all written in C++, which provide the framework
for studying the effects of various backend compiler optimization phases on the
overall performance of prototype EPIC/VLIW processors.
The following table lists the fundamental building blocks of LEGO and their
basic functionality. In addition to these, we are currently working on redefining
the IR we use to represent code within LEGO and developing a frontend for LEGO based
on gcc.
| LEGO Knobs | library | Classes for accessing and maintaining global parameters. |
| LEGO IR | library | The intermediate code representation, with some essential utilities such as reading and writing Rebel. |
| LEGO Utilities | library | Some very useful utilities for performing common tasks to IR structures. |
| LEGO Region Formation | library | Routines for forming code regions like traces and treegions. |
| LEGO DDG | library | The data dependence graph representation. |
| LEGO Analysis | library | Routines for program analysis, such as loop detection and live variable analysis. |
| LEGO Scalar Optimization | library | Routines for enhancing code performance. |
| LEGO Schedule | library | Routines for instruction scheduling. |
| LEGO Machine | library | Support for flexible machine models. |
| LEGO Profile | library,executable | Routines for profiling code. |
| LEGO Register Allocate | library,executable | Routines for register allocation. |
| LEGO Munger | library,executable | Routines for instruction selection. |
| ccom | executable | Functional wrapper for LEGO. |