Práctica 2 - Análisis dataflow e interpretación abstracta

Anuncio
2do cuatrimestre de 2011
Análisis Automático de Programas
Análisis Automático de Programas
Práctica 2 – Análisis dataflow e interpretación abstracta
Parte 1 – Análisis dataflow
Ejercicio 1
Sea el siguiente programa, donde MASK, IQ, IR e IM son constantes.
public f l o a t f o o ( int p i d ) {
int i , j , h ;
i = p i d ˆ MASK;
int k = i / IQ ;
h = IA ∗ ( i − k ∗ IQ ) − IR ∗ k ;
h = j ˆ MASK;
i f ( h<0)
h = h + IM ;
f l o a t answer = AM ∗ h ;
return answer ∗ p i d / k ;
}
a) Construir su control flow graph.
b) Computar el análisis de variables vivas.
Ejercicio 2
Completar la siguiente tabla para el análisis de reaching definitions.
Sentencia s
t := b + c
if a < b then goto L1 else goto L2 fi
t := f (a, b, c
gen(s)
kill(s)
Ejercicio 3
Computar para cada nodo n del CFG del siguiente programa, los conjuntos in(n) y out(n) del
análisis de reaching definitions:
a :=
c :=
L1: if c
c :=
goto
L2: a :=
c :=
5
1
> a goto L2
c + c
L1
c - a
0
¿Qué definiciones de la variable a llegan a la instrucción etiquetada con L1? ¿Qué optimización
podemos hacer con esta información?
Ejercicio 4
Computar para cada nodo n del CFG del siguiente programa, los conjuntos in(n) y out(n) del
análisis de avalilable expressions:
Página 1 de 5
2do cuatrimestre de 2011
Análisis Automático de Programas
a := 3
i := 0
L1: if i > a goto L2
t := M[i]
M[i] := t
i := i + 1
goto L1
L2: print(M, a)
Ejercicio 5
Completar la siguiente tabla para el análisis de liveness.
Sentencia s
t := b + c
if a < b then goto L1 else goto L2 fi
t := f (a, b, c
gen(s)
kill(s)
{t}
Ejercicio 6
Computar para cada nodo n del CFG del siguiente programa, los conjuntos in(n) y out(n) del
análisis de reaching expressions (very busy expressions):
if a > b
L1: x := b y := a goto L3
L2: y := b x := a L3: print(x,
goto L1 else goto L2
a
b
a
b
y)
Ejercicio 7
Categorizar los análisis dataflow usados.
Forward
Backwards
May
Must
Parte 2 – Interpretación abstracta
Ejercicio 8
Sea hS, vi un orden parcial. Probar que el supremo entre dos elementos es único.
Ejercicio 9
Definir un reticulado usando el orden parcial hZ, ≤i. ¿Existen elementos > y ⊥?
Página 2 de 5
2do cuatrimestre de 2011
Análisis Automático de Programas
Ejercicio 10
S
Definir un reticulado completo sobre el conjunto Z {−∞, ∞}.
Ejercicio 11
Sean las siguientes funciones:
1. Calcular ϕ(tX) para todo X ⊆ S
2. Enumerar todas las cadenas incrementales (increasing chains) en S
3. ¿Es ϕ continua (monótona y upper continuos)?
4. Computar iterativamente el lfp (mı́nimo punto fijo) y el gfp (máximo punto fijo) de ϕ.
Ejercicio 12
Definir una conexión de Galois para los siguientes pares de reticulados:
Ejercicio 13
Sea Cγα A una conexión de Galois. Demostrar que γ es inyectiva si y sólo si α es suryectiva.
Página 3 de 5
2do cuatrimestre de 2011
Análisis Automático de Programas
Ejercicio 14
Mostrar una conexión de Galois Cγα A que cumpla que exista a ∈ A tal que
αγ(a) 6= a
Ejercicio 15
Supongamos que disponemos de un lenguaje imperativo donde los pares de enteros es un tipo
primitivo. La suma entre 2 pares es la suma miembro a miembro mientras que la suma de un par con
un entero es operar esa suma sobre cada componente. Sea el siguiente programa en este lenguaje.
p1 := <-5,-5>
p2 := <1,1>
while (p1 != <0,0>)
p1 := p1 + p2
p2 := p2 + 1
1. Definir una semántica concreta para este lenguaje usando el reticulado completo definido en el
ejercicio 10.
2. Computar el mı́nimo punto fijo usando collecting semantics.
3. Si se desea conocer si ambos componentes del par son iguales, ¿qué reticulado utilizarı́a?
4. Establecer una conexión de Galois entre el reticulado del punto a) y el reticulado del punto c).
Ejercicio 16
Sea el siguiente programa
while (true)
x := y +1
if (y=0)
x := 0
1. Computar las igualdades de la forma x = y. Ayuda: usar el reticulado de conjuntos de pares de
variables.
2. Computar el signo de todas las variables.
Ejercicio 17
Sea el siguiente programa donde string es una cadena de caracteres en Σ = {a, . . . z}. La operación
str1 ++ str2 es la concatenación entre str1 y str2, mientras que ^str es el primer caracter de la
cadena.
string = "a"
while (true)
string = string ++ "b"
if ^string != "a"
break
Página 4 de 5
2do cuatrimestre de 2011
Análisis Automático de Programas
1. Definir una semántica concreta para el lenguaje
que se utiliza en el programa. Utilizar un reS
ticulado completo cuyo dominio es C = Σ∗ {z ω } (el conjunto de cadenas finitas sobre Σ y la
cadena infinita zzz . . . ). Computar el mı́nimo punto fijo usando collecting semantics.
2. Se desea conocer si la sentencia break se puede ejecutar. Definir una semántica abstracta para
este problema. Computar el mı́nimo punto fijo.
3. Definir una conexión de Galois entre ambas semánticas.
Página 5 de 5
Descargar