The performance of modern processors depends on their ability to
execute multiple instructions per cycle, requiring increasing levels
of instruction-level parallelism (ILP) to be exposed in programs. One
of the major challenges to increasing available ILP is overcoming the
limitations imposed by branch instructions. One paradigm presented to
help overcome problems with branches both at run time and at compile
time is predication. Predication allows the elimination of
branch instructions by providing an alternate means of controlling the
condition of execution for individual instructions. Effective use of
hardware support for predication requires advanced compiler support.
Many existing techniques for compilation using predication make
approximations or use heuristics, the inaccuracy of which reduces
achievable performance. In some cases, these techniques realize a
performance loss compared to codes without predication. This
dissertation proposes and investigates a systematic approach to
compiling for predication which consistently generates efficient
predicated code.
The four key compiler technologies presented here work
synergistically to realize the potential of predication. The
Partial Reverse If-Conversion Framework provides the first compilation
framework to accurately balance control and predication, while
providing other compiler components with complete access to the
predicated code for further optimization. Though the full potential of
the Partial Reverse If-Conversion Framework remains unexplored,
current compiler technology justifies its worth.
To operate on predicated code, the optimizer, scheduler, and register
allocator require accurate information regarding the relationships
among predicates. The Predicate Analysis System is the first
efficient predicate relationship database to provide an
approximation-free representation.
Optimization, scheduling, and register allocation also require
accurate knowledge of the flow of information in the predicated code.
Using the Predicate Analysis System, the Predicate Dataflow Graph is
built to provide dataflow information. The Predicate Dataflow Graph
was developed to provide accurate dataflow information in the presence
of predication without requiring a change in the dataflow analysis
equations.
In the context of the Partial Reverse If-Conversion Framework, some
otherwise unnecessarily complex optimizations become feasible. One
example is the Program Decision Logic Optimizer, which uses predicated
code and the Predicate Analysis System to represent program decision
logic as Boolean expressions. These expressions are minimized,
factored, and reformulated to create programs with optimized decision
components. Within the given compilation framework, the PDLO has been
demonstrated to break many performance bottlenecks due to program
decision.
The Partial Reverse If-Conversion Framework, the Predicate Analysis
System, the Predicate Dataflow Graph, and the Program Decision Logic
Optimizer are demonstrated to work synergistically in the compiler to
generate efficient code for nonnumeric programs. Using predication,
these techniques effectively optimize codes in the presence of complex
branch control flow.