Eliminating Scope and Selection Restrictions in Compiler Optimizations [abstract] (PDF)
Spyridon Triantafyllis
Ph.D. Thesis, Department of Computer Science,
Princeton University, September 2006.
To meet the challenges presented by the performance requirements of modern architectures,
compilers have been augmented with a rich set of aggressive optimizing transformations.
However, the overall compilation model within which these transformations operate has
remained fundamentally unchanged. This model imposes restrictions on these transformationsÂ
application, limiting their effectiveness.
First, procedure-based compilation limits code transformations within a single procedureÂs
boundaries, which may not present an ideal optimization scope. Although aggressive
inlining and interprocedural optimization can alleviate this problem, code growth and
compile time considerations limit their applicability.
Second, by applying a uniform optimization process on all codes, compilers cannot
meet the particular optimization needs of each code segment. Although the optimization
process is tailored by heuristics that attempt to a priori judge the effect of each transformation
on final code quality, the unpredictability of modern optimization routines and the
complexity of the target architectures severely limit the accuracy of such predictions.
This thesis focuses on removing these restrictions through two novel compilation framework
modifications, Procedure Boundary Elimination (PBE) and Optimization-Space Exploration
(OSE).
PBE forms compilation units independent of the original procedures. This is achieved
by unifying the entire application into a whole-program control-flow graph, allowing the
compiler to repartition this graph into free-form regions, making analysis and optimization
routines able to operate on these generalized compilation units. Targeted code duplication
techniques can then recover the performance benefits of inlining while limiting code
growth. Thus PBE offers a superset of the benefits of inlining and interprocedural optimization,
while avoiding both excessive code growth and overly long compile times.
OSE, on the other hand, explores many optimization options for each code segment and
selects the best one a posteriori. OSE trims the space of options explored through limited
use of heuristics, further limits the search space during compiler tuning, and exploits feedback
to prune the remaining optimization configurations at compile time. The resulting
optimization outcomes are compared through a fast and effective static performance estimator.
As a result, OSE is the first iterative compilation technique fast enough and general
enough for general-purpose compilation.