x = y
, which simply assigns the value of y
to x
.
From the following code:
y = x
z = 3 + y
Copy propagation would yield:
z = 3 + x
Copy propagation often makes use of reaching definitions, use-def chains and def-use chains when computing which occurrences of the target may be safely replaced. If all upwards exposed uses of the target may be safely modified, the assignment operation may be eliminated.
Copy propagation is a useful "clean up" optimization frequently used after other compiler passes have already been run. Some optimizations—such as classical implementations of elimination of common sub expressions—''require'' that copy propagation be run afterwards in order to achieve an increase in efficiency.
See also
* Copy elision * Constant folding and constant propagationReferences
Further reading
Muchnick, Steven S. ''Advanced Compiler Design and Implementation''. Morgan Kaufmann. 1997. {{Compiler optimizations Compiler optimizations