The Static Single Assignment (SSA) form of programs is a commonly used intermediate representation of programs in optimizing compilers. The key step in converting a program to SSA form is called-placement. Cytron et al used dominance frontiers to design a-placement algorithm whose running time grows quadratically with the size of the control ow graph of the program. Recent eeorts by the compiler community have led to other algorithms whose asymptotic running time grows linearly with program size, although only one of these actually outperforms the quadratic time algorithm in practice. However, the relationship between diierent algorithms and their relative performance has remained unclear. This paper gives a systematic presentation of known properties of the SSA form, and gives a simple framework in which all existing SSA algorithms can be placed and compared. The utility of the framework is demonstrated by the fact that considerations of this framework led us to invent two new-placement algorithms described here which require asymptotically linear running time. Finally, we compare the performance of these algorithms on model problems and on the SPEC benchmarks.
[1]
Keshav Pingali,et al.
APT: a data structure for optimal control dependence computation
,
1995,
PLDI '95.
[2]
Michael Weiss.
The transitive closure of control dependence: the iterated join
,
1992,
LOPL.
[3]
Guang R. Gao,et al.
A linear time algorithm for placing φ-nodes
,
1995,
POPL '95.
[4]
Lori A. Clarke,et al.
A Formal Model of Program Dependences and Its Implications for Software Testing, Debugging, and Maintenance
,
1990,
IEEE Trans. Software Eng..
[5]
Keshav Pingali,et al.
Dependence flow graphs: an algebraic approach to program dependencies
,
1991,
POPL '91.