Continuing to propagate yields the following (which would likely be further optimized by dead code elimination of both x and y.) .
Constant propagation is implemented in compilers using reaching definition analysis results.