Asignación única estática (con ejemplos relevantes)

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 – 

  1. 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
  2. Propagación del rango de valores: 
    encontrar el posible rango de valores en el que podría resultar un cálculo.
  3. Eliminación de código muerto:
    eliminar el código que no es accesible y no tendrá ningún efecto en los resultados.
  4. Reducción de fuerza:
    reemplazo de cálculos computacionalmente costosos por otros económicos.
  5. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *