La asignación única estática fue presentada en 1988 por Barry K. Rosen, Mark N, Wegman y F. Kenneth Zadeck.
En el diseño del compilador, la asignación única estática (SSA abreviada) es un medio para estructurar la IR (representación intermedia) de modo que a cada variable se le asigna un valor solo una vez y cada variable se define antes de su uso. El uso principal de SSA es que simplifica y mejora los resultados de los algoritmos de optimización del compilador, al mismo tiempo que simplifica las propiedades de las variables. Algunos algoritmos mejorados por la aplicación de SSA –
- Propagación constante:
traducción de cálculos del tiempo de ejecución al tiempo de compilación. Por ejemplo, la instrucción v = 2*7+13 se trata como v = 27 - Propagación del rango de valores:
encontrar el posible rango de valores en el que podría resultar un cálculo. - Eliminación de código muerto:
eliminar el código que no es accesible y no tendrá ningún efecto en los resultados. - Reducción de fuerza:
reemplazo de cálculos computacionalmente costosos por otros económicos. - Asignación de registros:
optimización del uso de registros para cálculos.
Cualquier código se puede convertir a formato SSA simplemente reemplazando la variable de destino de cada segmento de código con una nueva variable y sustituyendo cada uso de una variable con la nueva edición de la variable que llega a ese punto. Las versiones se crean dividiendo las variables originales existentes en IR y se representan por el nombre original con un subíndice, de modo que cada variable tiene su propia versión.
Ejemplo 1:
Convierta el siguiente segmento de código al formulario SSA:
x = y - z s = x + s x = s + p s = z * q s = x * s
Solución:
x = y - z s2 = x + s x2 = s2 + p s3 = z * q s4 = x2 * s3
Aquí x,y,z,s,p,q son variables originales y x 2 , s 2 , s 3 , s 4 son versiones de x y s.
Ejemplo #2:
Convierta el siguiente segmento de código al formulario SSA:
a = s - b q = a * e a = q + d q = b - c q = a * q
Solución:
a = s - b q = a * e a2 = q + d q2 = b - c q3 = a2 * q2
Aquí a,b,c,d,e,q,s son variables originales y a 2 , q 2 , q 3 son versiones de a y q.
Publicación traducida automáticamente
Artículo escrito por vibhutijain99 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA