After cprop is carried out, expressions that really can be calculated at compiletime will be, and are replaced by their values. That is, known functions of known constants are constants, and are recognised as such.
Constant propagation is also able to change conditional branches to unconditional ones. The following code in C can be simplified using cprop:
int a(){ int b; int c; b=3; c=b*4; if(c>10){ c=c-10; } return c;}
A good compiler will reduce this to:
int a(){ return 2; }Easily be implemented on SSA form as published by Wegman and Zadeck in 1991.
Constant propagation is not to be confused with constant folding, which is implemented in the front-end.
See also: Control flow graph, Compiler optimization