Diseño del compilador | Detección de un bucle en el código de tres direcciones

Requisito previo: el código de tres direcciones en
la optimización del bucle del compilador es la fase posterior a la generación del código intermedio. La intención principal de esta fase es reducir el número de líneas en un programa. En cualquier programa, la mayoría del tiempo que dedica cualquier programa está realmente dentro del bucle para un programa iterativo. En el caso del programa recursivo, habrá un bloque allí y la mayoría de las veces se presentará dentro del bloque.

Optimización de bucle –

  1. Para aplicar la optimización de bucles, primero debemos detectar los bucles.
  2. Para detectar bucles, usamos Control Flow Analysis (CFA) usando Program Flow Graph (PFG).
  3. Para encontrar el gráfico de flujo del programa, necesitamos encontrar el bloque básico

Bloque básico: un bloque básico es una secuencia de tres instrucciones de dirección donde el control ingresa al principio y sale solo al final sin saltos ni paradas.

Encontrar el bloque básico:
para encontrar los bloques básicos, necesitamos encontrar los líderes en el programa. Luego, un bloque básico comenzará desde un líder hasta el próximo líder, pero no incluirá al próximo líder. Esto significa que si descubre que la línea n. ° 1 es un líder y la línea n. ° 15 es el siguiente líder, entonces la línea del 1 al 14 es un bloque básico, pero no incluye la línea n. ° 15.

Identificando líder en un Bloque Básico –

  1. La primera declaración es siempre un líder.
  2. La declaración que es el objetivo de la declaración condicional o incondicional es un líder
  3. La declaración que sigue inmediatamente a una declaración condicional o incondicional es un líder
fact(x)
{
    int f = 1;
    for (i = 2; i <= x; i++)
        f = f * i;
    return f;
}

Código de tres direcciones del código C anterior:

  1. f = 1;
  2. yo = 2;
  3. si (i > x) pasa a 9
  4. t1 = f * yo;
  5. f = t1;
  6. t2 = yo + 1;
  7. yo = t2;
  8. ir a(3)
  9. ir al programa de llamadas

Líder y Bloque Básico –

Análisis de flujo de control –

Si el control ingresa a B1 no hay otra opción después de B1, tiene que ingresar a B2. Ahora, si el control ingresa a B2, entonces, dependiendo de la condición, el control fluirá, si la condición es verdadera, vamos a la línea 9, lo que significa que 9 no es más que B4. Pero si la condición es falsa el control pasa al siguiente bloque B3. Después de B3, no hay ninguna condición en absoluto, vamos directos a la tercera declaración B2. El gráfico de flujo de control anterior tiene un ciclo entre B2 y B3 que no es más que un bucle.

Publicación traducida automáticamente

Artículo escrito por Samit Mandal 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 *