En la teoría del compilador , la propagación de copias es el proceso de reemplazar las ocurrencias de los objetivos de las asignaciones directas con sus valores. [1] Una asignación directa es una instrucción de la forma x = y
, que simplemente asigna el valor de y
a x
.
Del siguiente código:
y = xz = 3 + y
La propagación de copias produciría:
z = 3 + x
La propagación de copias a menudo utiliza definiciones de alcance , cadenas de uso-def y cadenas de uso-def al calcular qué ocurrencias del objetivo pueden reemplazarse de manera segura. Si todos los usos del objetivo expuestos hacia arriba pueden modificarse de manera segura, la operación de asignación puede eliminarse.
La propagación de copias es una optimización de "limpieza" útil que se utiliza con frecuencia después de que ya se hayan ejecutado otros pasos del compilador. Algunas optimizaciones (como las implementaciones clásicas de eliminación de subexpresiones comunes [1] ) requieren que la propagación de copias se ejecute después para lograr un aumento en la eficiencia.
Muchnick, Steven S. Diseño e implementación de compiladores avanzados . Morgan Kaufmann. 1997.