Abstract: The objective of Part II is to describe several program analyses and optimizations that benefit from SSA form. In particular, we illustrate how SSA form makes an analysis more convenient because of its similarity to functional programs. Technically, the def-use chains explicitly expressed through the SSA graph, but also through the static-single information property, are what make SSA so convenient. We also illustrate how SSA form can be used to design sparse analyses that are faster and more efficient than their dense counterparts. This is especially important for just-in-time compilation but also for complex inter-procedural ahead-of-time analysis. Finally, as already mentioned in Chap. 2, SSA form can come in different flavours. The vanilla flavour is strict SSA, or, in equivalent terms, SSA form with the dominance property. The most common SSA construction algorithm exploits this dominance property by two means. First, it serves to compute join sets for phi-placement in a very efficient way using the dominance frontier. Second, it allows variable renaming using a folding scheme along the dominance tree. The notions of dominance and dominance frontier are two structural properties that make SSA form singular for compiler analysis and transformations. This chapter provides a short overview of the chapters that constitute this part.
Loading