stringtranslate.com

Propagación constante condicional dispersa

En informática , la propagación constante condicional dispersa (SCCP) es una optimización que se aplica con frecuencia en los compiladores después de la conversión a la forma de asignación única estática (SSA). Propaga constantes , que es el cálculo de valores estáticos que se pueden calcular en tiempo de compilación. Además, puede encontrar más valores constantes y, por lo tanto, más oportunidades de mejora que la aplicación por separado de la eliminación de código muerto y la propagación constante en cualquier orden o cualquier número de repeticiones. [1] [2]

El algoritmo funciona realizando una interpretación abstracta del código en forma de SSA. Durante la interpretación abstracta, normalmente utiliza una red plana de constantes para los valores y un entorno global que asigna las variables de SSA a los valores de esta red. El quid del algoritmo radica en cómo maneja la interpretación de las instrucciones de bifurcación . Cuando se encuentra, la condición para una bifurcación se evalúa de la mejor manera posible dada la precisión de los valores abstractos vinculados a las variables en la condición. Puede darse el caso de que los valores sean perfectamente precisos (ni superiores ni inferiores) y, por lo tanto, la ejecución abstracta puede decidir en qué dirección bifurcar. Si los valores no son constantes, o una variable en la condición no está definida, entonces se deben tomar ambas direcciones de bifurcación para seguir siendo conservadores.

Una vez finalizada la interpretación abstracta, las instrucciones a las que nunca se llegó se marcan como código inactivo. Las variables SSA que tengan valores constantes se pueden incluir en línea (propagar hasta) su punto de uso. [ se necesita un ejemplo ]

Notas

  1. ^ Wegman, Mark N. y Zadeck, F. Kenneth. "Propagación constante con ramas condicionales". ACM Transactions on Programming Languages ​​and Systems , 13(2), abril de 1991, páginas 181-210.
  2. ^ Click, Clifford y Cooper, Keith. "Combinación de análisis, combinación de optimizaciones", ACM Transactions on Programming Languages ​​and Systems , 17(2), marzo de 1995, páginas 181-196

Referencias