Articulo de referencia

Controlar la dependencia

La dependencia de control es una situación en la que una instrucción de un programa se ejecuta si la instrucción anterior se evalúa de manera que permita su ejecución. Una instr...

La dependencia de control es una situación en la que una instrucción de un programa se ejecuta si la instrucción anterior se evalúa de manera que permita su ejecución.

Una instrucción B tiene una dependencia de control de una instrucción precedente A si el resultado de A determina si B debe ejecutarse o no. En el siguiente ejemplo, la instrucciónS2{\displaystyle S_{2}}tiene una dependencia de control de la instrucciónS1{\displaystyle S_{1}}. Sin embargo,S3{\displaystyle S_{3}}no depende deS1{\displaystyle S_{1}}porqueS3{\displaystyle S_{3}}siempre se ejecuta independientemente del resultado deS1{\displaystyle S_{1}}.

S1. si (a == b) S2. a = a + b S3. b = a + b

Intuitivamente, existe una dependencia de control entre dos enunciados A y B si

  • B podría ejecutarse después de A.
  • El resultado de la ejecución de A determinará si B se ejecutará o no.

Un ejemplo típico es que existen dependencias de control entre la parte condicional de una instrucción if y las instrucciones en sus cuerpos verdadero/falso.

Una definición formal de dependencia de control puede presentarse de la siguiente manera:

Una declaraciónS2{\displaystyle S_{2}}Se dice que el control depende de otra declaración.S1{\displaystyle S_{1}}si y solo si

  • existe un caminoPAG{\displaystyle P}deS1{\displaystyle S_{1}}aS2{\displaystyle S_{2}}de tal manera que cada declaraciónSi{\displaystyle S_{i}}S1{\displaystyle S_{1}}dentroPAG{\displaystyle P}será seguido porS2{\displaystyle S_{2}}en cada posible ruta hacia el final del programa y
  • S1{\displaystyle S_{1}}no necesariamente será seguido porS2{\displaystyle S_{2}}, es decir, existe una ruta de ejecución desdeS1{\displaystyle S_{1}}hasta el final del programa que no pasaS2{\displaystyle S_{2}}.

Expresadas con la ayuda de la (post)dominancia, las dos condiciones son equivalentes a

  • S2{\displaystyle S_{2}}La post-domina todoSi{\displaystyle S_{i}}
  • S2{\displaystyle S_{2}}no postdominaS1{\displaystyle S_{1}}

Construcción de dependencias de control

Las dependencias de control son esencialmente la frontera de dominancia en el grafo inverso del grafo de flujo de control (GFC). [ 1 ] Por lo tanto, una forma de construirlas sería construir la frontera de post-dominancia del GFC y luego invertirla para obtener un grafo de dependencia de control.

A continuación se presenta un pseudocódigo para construir la frontera de post-dominancia:

Para cada X en un recorrido ascendente del árbol postdominador, haga lo siguiente : PostDominanceFrontier(X) ← ∅ para cada Y ∈ Predecesores(X) hacer : si Postdominador inmediato(Y) ≠ X: entonces PostfronteraDominancia(X) ← PostfronteraDominancia(X) ∪ {Y} hecho para cada Z ∈ Hijos(X) hacer : para cada Y ∈ PostfronteraDominancia(Z) hacer : si Postdominador inmediato(Y) ≠ X: entonces PostfronteraDominancia(X) ← PostfronteraDominancia(X) ∪ {Y} hecho hecho hecho hecho

Aquí, Children(X) es el conjunto de nodos en la CFG que son inmediatamente postdominados por X , y Predecessors(X) es el conjunto de nodos en la CFG que preceden directamente a X en la CFG. Cabe destacar que el nodo X se procesará solo después de que todos sus Hijos hayan sido procesados. Una vez calculado el mapa de frontera de postdominancia, al invertirlo se obtendrá un mapa de los nodos en la CFG a los nodos que tienen una dependencia de control sobre ellos.

Véase también

Referencias

  1. Cytron, R.; Ferrante, J.; Rosen, BK; Wegman, MN; Zadeck, FK (1989-01-01). "Un método eficiente para calcular la forma de asignación única estática". Actas del 16.º simposio ACM SIGPLAN-SIGACT sobre principios de lenguajes de programación - POPL '89 . Nueva York, NY, EE. UU.: ACM. págs. 25–35 . doi : 10.1145/75277.75280 . ISBN  0897912942. S2CID 8301431 .