Constant Propagation
- like initialization, but keeps the value to which it is initialized
\bot, C, potentially non-constant
int a, b, step, i; boolean c; a = 0; b = a + 10; step = -1; if (step > 0) { i = a; } else { i = b; } c = true; while (c) { print(i); i = i + step; // can emit decrement if (step > 0) { c = (i < b); } else { c = (i > a); // can emit better instruction here // put here (a = a + step), redo analysis } }
Correctness of Constant Propagation
- concretization function
- comparison of N-th step of data-flow iteration and N-th step of state exploration