The increasing amount of instruction-level parallelism (ILP)
required to fully utilize high issue-rate processors has forced the
compiler to perform more aggressive analysis, optimization,
parallelization and scheduling on the input programs. Yet, the
compiler designer must scale back the use of aggressive
transformations in order to contain compile time and memory usage.
The root of the problem lies in the function-oriented framework
assumed in conventional compilers. Traditionally the compilation
process has been built using the function as a compilation unit,
because the function provides a convenient partition of the program.
However, the size and contents of a function may not provide the
best environment for aggressive analysis and optimization. This
dissertation presents a technique in which the compiler is allowed
to repartition the program into more desirable compilation units,
called regions. Placing the compiler in control of the size and
contents of the compilation unit reduces the importance of the
algorithmic complexity of the applied transformations, allowing
more aggressive transformations to be applied while reducing
compilation time.
The region concept has been traditionally applied within an
ILP compiler only in the context of code scheduling. This
dissertation proposes extending the concept of region partitioning
to the entire compilation process. The implications of region-based
compilation to the design of an ILP compiler will be assessed in
the context of classical, ILP optimization and register allocation.
A quantitative analysis is performed to determine the quality of
the code produced by a region-based ILP compiler as compared to a
function-based ILP compiler, as well as the compilation time and
memory usage benefits afforded by region-based compilation units.