Content deleted Content added
No edit summary |
|||
Line 3:
SSA was developed by researchers at [[International Business Machines|IBM]] in the 80's.
The primary usefulness of SSA comes from how it simultaneously simplifies and improves the results of a variety of [[compiler optimization]]s, by simplifying the properties of variables. For example, consider this piece of code:
Line 25:
*[[register allocation]]
Converting ordinary code into SSA form is primarily a simple matter of replacing the target of each assignment with a new variable, and replacing each use of a variable with the "version" of the variable [[reaching definition|reaching]] that point. For example, consider the following [[control flow graph]]:
Line 53:
A more general question along the same lines is, given an arbitrary control flow graph, how can I tell where to insert φ functions, and for what variables? This is a difficult question, but one that has an efficient solution that can be computed using a concept called <i>dominance frontiers</i>.
First, we need the concept of a ''dominator'': we say that a node A ''strictly dominates'' a different node B in the control flow graph if it's impossible to reach B without passing through A first. This is useful, because if we ever reach B we know that any code in A has run. We say that A ''dominates'' B if either A strictly dominates B or A = B.
Line 71:
(Cambridge University Press, 2002). See the paper for more details.
<i>Simple copy insertion, algorithms to reduce copies, etc. If overlapping lifetimes are allowed (which is critical to SSA form) simply dropping the subscripts doesn't work. Pure SSA form doesn't really use subscripts anyway.</i>
<i>Many possible extensions to talk about. Probably the most important are ones involving memory, gated SSA form, and array SSA form.</i>
SSA form is a relatively recent development in the compiler community. As such, many older compilers only use SSA form for some part of compilation or optimization process, but most do not rely on it. Examples of compilers that rely heavily on SSA form include:
Line 93:
* Although not a compiler, [http://boomerang.sourceforge.net/ Boomerang] (a [[decompiler]]) uses SSA form in its internal representation. Applicability of various SSA algorithms to [[decompilation]] is an active area of SSA research.
* [[Compiler optimization]]
|