Compiler Optimization
Motivation for SSA Form
Many optimizations can be simplified by using SSA form. Consider this counterexample with the presented algorithms.
// 1.
x = 10;
if(...) {
// 2.
x = 20;
y = x;
} else {
// 3.
y = x;
}
// 4.1. Constant Folding
Algorithm:
Create a map where is a variable. Initialize to undefined.
For each statement, if it is of form:
x = csetM[x] = cx = ysetM[x] = M[y]Replace y with M[y] if defined
v = Op x ysetM[v] = Op(M[x], M[y])where Op(...) may return undefinedReplace
Op x ywith Op(M[x], M[y]) if definedOtherwise replace x with M[x] if defined and y with M[y] if defined
This only works with SSA. Consider the above snippet as the counterexample.
2. Copy Propagation
Algorithm:
Create a map . Initialize
M[x]=xFor each statement, if it is of form:
x = ysetM[x] = M[y]v = Op x yreplace withv = Op M[x] M[y]
Again, this only works with SSA.
3. Dead Code Elimination
Algorithm:
Last updated
Was this helpful?