The Static Single Assignment Form and its Computation

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.