LEGO Building Blocks

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.