desenho de linguagens de programação e de compiladoresdesousa/dlpc/aula_dlpc14-pp.pdf ·...
TRANSCRIPT
![Page 1: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/1.jpg)
Universidade da Beira Interior
Desenho de Linguagens de Programaçãoe de Compiladores
Simão Melo de Sousa
Aula 14 - Análise de Fluxo de Dados
SMDS DLPC aula 14 1
![Page 2: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/2.jpg)
Agenda
1. catalogação das análises estáticas: May, Must, Forward,Backward
2. analises insensíveis ao fluxo de dados:• analise de vivacidade (liveness analysis)• análise das expressões disponíveis (available expressions analysis)• análise das expressões atarefadas (very busy expressions analysis)• análise do alcance de definições (reaching definitions analysis)• análise da propagação de constantes (constant propagation analysis)
3. técnicas de alargamento e estreitamento e as suas aplicações:• analise de intervalos (interval analysis)• técnica do alargamento na procura de pronto fixo• técnica do estreitamento na procura de pronto fixo
SMDS DLPC aula 14 2
![Page 3: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/3.jpg)
May, Must, Forward, Backward
SMDS DLPC aula 14 3
![Page 4: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/4.jpg)
Várias análises, um padrão
As analises que vamos explorar definem as suas restrições de forma diferente mas
• participam dos mesmos princípios, das mesmas estruturas
• que aplicam de forma diferente
=⇒ todas são instâncias da framework monótona que podemos catalogar combase em duas dimensões
Forward vs. Backward / May vs. Must
SMDS DLPC aula 14 4
![Page 5: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/5.jpg)
Forward vs. Backward
Uma analise prospectiva (forward analysis):• calcula informação num ponto com base nos pontos anteriores (i.e. nocomportamento passado)
• ou seja, caracterizam-se pelo RHS das restrições se referir ao conjuntodos nodos predecessores (o conjunto pred)
• a analise começa no entry node e propaga-se para a frente• exemplos: available expressions, reaching definitions
Uma análise em retrocesso (backward analysis):• calcula informação num ponto com base nos pontos que seguem (i.e.a analise do comportamento futuro determina o presente)
• ou seja, caracterizam-se pelo RHS das restrições se referir ao conjuntodos nodos sucessores (o conjunto succ)
• a análise começa no exit node e propaga-se para trás• exemplos: liveness, very busy expressions
SMDS DLPC aula 14 5
![Page 6: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/6.jpg)
May vs. Must
uma análise may (may analysis):
• descreve informação que é possivelmente verdade• é uma sobre-aproximação• exemplos: liveness, reaching definitions
uma analise must (must analysis):• descreve informação que é sem dúvida verdade• é uma sub-aproximação• exemplos: available expressions, very busy expressions
SMDS DLPC aula 14 6
![Page 7: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/7.jpg)
Resumo da classificação
Forward Backwardexemplo: definições alcançáveis exemplo: vivacidade
May JvK descreve os estados que seguem v JvK descreve os estados antecedem vJoin(v) = tw∈pred(v)JwK = ∪w∈pred(v)JwK Join(v) = tw∈succ(v)JwK = ∪w∈succ(v)JwKexemplo: expressões disponíveis exemplo: expressões atarefadas
Must JvK descreve os estados que seguem v JvK descreve os estados antecedem vJoin(v) = tw∈pred(v)JwK = ∩w∈pred(v)JwK Join(v) = tw∈succ(v)JwK = ∩w∈succ(v)JwK
SMDS DLPC aula 14 7
![Page 8: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/8.jpg)
Análise de vivacidade
SMDS DLPC aula 14 8
![Page 9: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/9.jpg)
Análise de vivacidade
comecemos por redescobrir uma análise conhecida
uma variável está viva num determinado ponto do programa se esta podeser lida de forma segura daí em diante durante a execução do programa
esta propriedade é indecídivel, mas pode ser aproximada por uma analisede vivacidade
consideramos aqui o reticulado das partes do conjunto das variáveis VarsPdo programa P analizado
L = (P(VarsP),⊆)
fala-se de uma analise parametrizada (o reticulado em causa depende de P)
SMDS DLPC aula 14 9
![Page 10: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/10.jpg)
Um reticulado para a vivacidade
vamos exemplificar com base no exemplo seguinte:
var x,y,z;x = input;while (x>1) {
y = x/2;if (y>3) x = x-y;z = x-4;if (z>0) x = x/2;z = z-1;
}output x;
L = (P({x , y , z}),⊆)
SMDS DLPC aula 14 10
![Page 11: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/11.jpg)
o CFG na analise de vivacidade
SMDS DLPC aula 14 11
![Page 12: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/12.jpg)
Definição da analise de vivacidade
para cada vértice v do CFG introduzimos as restrições JvK associadas aeste ponto do CFG.
estas denotam o conjunto das variáveis vivas antes deste ponto
teremos o cuidado de calcular uma analise conservadora, já que o conjuntoem causa terá a tendência em ser demasiado abrangente.
SMDS DLPC aula 14 12
![Page 13: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/13.jpg)
Restrições para a analise de vivacidade
Join(v) =⋃
w∈succ(v)
JwK
admitimos a existência de uma função vars(E ) que devolve o conjunto dasvariáveis que ocorrem em E
para o nodo de entradaJentryK = ∅
para as declarações
Jvar id1, · · · , idnK = Join(v) \ {id1, · · · , idn}
para as condições e output
Jif (E )K = Joutput EK = Join(v) ∪ vars(E )
para as atribuições
Jx = EK = Join(v) \ {x} ∪ vars(E )
para qualquer outro nodo v : JvK = Join(v)SMDS DLPC aula 14 13
![Page 14: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/14.jpg)
Exercício
Mostre que as equações das restrições para a análise de vivacidade sãomonótonas, i.e. definem funções monótonas
SMDS DLPC aula 14 14
![Page 15: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/15.jpg)
Restrições geradas
JentryK = ∅Jvar x , y , zK = Jx = inputK \ {x , y , z}Jx = inputK = Jx > 1K \ {x}Jx > 1K = (Jy = x/2K ∪ Joutput xK) ∪ {x}Jy = x/2K = (Jy > 3K \ {y}) ∪ {x}Jy > 3K = Jx = x − yK ∪ Jz = x − 4K ∪ {y}Jx = x − yK = (Jz = x − 4K \ {x}) ∪ {x , y}Jz = x − 4K = (Jz > 0K \ z) ∪ {x}Jz > 0K = Jx = x/2K ∪ Jz = z − 1K ∪ {z}Jx = x/2K = (Jz = z − 1K \ {x}) ∪ {x}Jz = z − 1K = (Jx > 1K \ {z}) ∪ {z}Joutput xK = JexitK ∪ {x}JexitK = ∅
SMDS DLPC aula 14 15
![Page 16: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/16.jpg)
a solução: o menor ponto fixo
JentryK = ∅Jvar x , y , zK = ∅Jx = inputK = ∅Jx > 1K = {x}Jy = x/2K = {x}Jy > 3K = {x , y}Jx = x − yK = {x , y}Jz = x − 4K = {x}Jz > 0K = {x , z}Jx = x/2K = {x , z}Jz = z − 1K = {x , z}Joutput xK = {x}JexitK = ∅
SMDS DLPC aula 14 16
![Page 17: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/17.jpg)
consequência
constatamos que
• as variáveis y e z nunca estão vivas em simultáneo
• o valor calculado na atribuição z = z − 1 nunca mais é lido (utilizado)
podemos assim durante a compilação realizar a optimização seguinte:
var x,yz;x = input;while (x>1) {
yz = x/2;if (yz>3) x = x-yz;yz = x-4;if (yz>0) x = x/2;
}output x;
SMDS DLPC aula 14 17
![Page 18: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/18.jpg)
Analise de complexidade
façamos uma estimativa na utilização do algoritmo natural apresentado naaula anterior.assunções de base: o CFG tem n vértices e o programa tem k variáveis
o reticulado Pn tem assim uma altura igual a k × n. Esta altura limita oúmero de iterações que podem ser realizadas pelo algoritmocada elemento do reticulado pode ser representado por um bitvector detamanho k × nem cada iteração devemos realizar O(n) intersecções, diferenças ouigualdades sobre conjuntos de tamanho k . O custo destas é assim O(k × n)assim a complexidade temporal global é
O(k2 × n2)
SMDS DLPC aula 14 18
![Page 19: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/19.jpg)
Exercício
Qual é a complexidade no pior caso da análise de vivacidade com oalgoritmo com lista de afazeres
SMDS DLPC aula 14 19
![Page 20: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/20.jpg)
Análise de expressões disponíveis
SMDS DLPC aula 14 20
![Page 21: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/21.jpg)
Análise de expressões disponíveis
uma expressão (não-trivial) está disponível num determinado ponto deprograma se o seu valor actual já foi calculado num ponto anterior daexecução
A aproximação natural em geral incluí muito poucas expressões comestatuto de disponibilidade conhecido.
• a analise só pode reportar disponível se a expressão está totalmentedisponível
• uma expressão disponível pode não ser calculada novamente
SMDS DLPC aula 14 21
![Page 22: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/22.jpg)
Um reticulado para as expressões disponíveis
vamos exemplificar com base no exemplo seguinte:
var x,y,z,a,b;z = a+b;y = a*b;while (y > a+b) {
a = a+1;x = a+b;
}
as 4 sub-expressões não triviais deste programas são:
a + b, a× b, y > a + b, a + 1
o reticulado por considerar é:
L = (P({a + b, a× b, y > a + b, a + 1}),⊇)
o reticulado subconjunto invertido
SMDS DLPC aula 14 22
![Page 23: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/23.jpg)
O reticulado subconjunto invertido
SMDS DLPC aula 14 23
![Page 24: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/24.jpg)
o CFG
SMDS DLPC aula 14 24
![Page 25: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/25.jpg)
definição da análise com base no CFG
para cada nodo V do CFG, temos a variável JvK definida como o conjuntodas variáveis do programa que estão disponíveis no ponto do programa quesegue v
os conjuntos calculados podem ser demasiados pequenos, pode issooptamos por uma análise conservadora que permitirá retirar informaçãorelevante, mesmo nestes casos.
definição do Join:
Join(v) =⋂
w∈pred(v)
JwK
SMDS DLPC aula 14 25
![Page 26: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/26.jpg)
Funções Auxiliares
a função X ↓x remove todas as expressões de X que contêm referênciaspara variável x
a função exps(E ) é definida por recursão estrutural como
exps(E ) =
{E1 op E2} ∪ exps(E1) ∪ exps(E2) se E = E1 op E2sendo a sub-expressãoinput excluída
∅ se E = intconst (∈ N)∅ se E = x (∈ Vars)∅ se E = input
SMDS DLPC aula 14 26
![Page 27: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/27.jpg)
Restrições para a disponibilidade
para o nodo de entradaJentryK = ∅
para as condições e output
Jif (E )K = Joutput EK = Join(v) ∪ exps(E )
para as atribuições
Jx = EK = (Join(v) ∪ exps(E )) ↓x
para qualquer outro nodo v
JvK = Join(v)
Intuição: Uma expressão está disponível em v se está disponível a partirde todas as arestas de entrada ou é calculada precisamente em v . É noentanto preciso tomar em conta que uma atribuição pode alterar esteestado
SMDS DLPC aula 14 27
![Page 28: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/28.jpg)
Exercício: Verifique que as restrições são monótonas
SMDS DLPC aula 14 28
![Page 29: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/29.jpg)
Restrições geradas
JentryK = ∅Jvar x , y , z , a, bK = JentryKJz = a + bK = exps(a + b) ↓zJy = a× bK = (Jz = a + bK ∪ exps(a× b)) ↓yJy > a + bK = (Jy = a× bK ∩ Jx = a + bK) ∪ exps(y > a + b)Ja = a + 1K = (Jy > a + bK ∪ exps(a + 1)) ↓aJx = a + bK = (Ja = a + 1K ∪ exps(a + b)) ↓xJexitK = Jy > a + bK
SMDS DLPC aula 14 29
![Page 30: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/30.jpg)
a menor solução
JentryK = ∅Jvar x , y , z , a, bK = ∅Jz = a + bK = {a + b}Jy = a× bK = {a + b, a× b}Jy > a + bK = {a + b, y > a + b}Ja = a + 1K = ∅Jx = a + bK = {a + b}JexitK = {a + b}
temos várias respostas não triviais
SMDS DLPC aula 14 30
![Page 31: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/31.jpg)
Optimização
notamos em particular que a + b está disponível antes do ciclo
o programa pode assim ser (ligeiramente) optimizado da seguinte forma
var x,y,z,a,b, aplusb;aplusb = a+b;z=aplusb;y = a*b;while (y > aplusb) {
a = a+1;aplusb = a+b;x = aplusb;
}
enquanto garantimos o respeito semântico do programa original
para um CFG com n nodos e k expressões não triviais, o reticulado tem umaaltura de n × k =⇒ limita o numero das iterações.
em cada iteração efectuamos O(n) operações (intersecções, uniões, igualdades)que tomam no global O(k.n), ou seja O(k2.n2)
SMDS DLPC aula 14 31
![Page 32: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/32.jpg)
Análise de expressões atarefadas
SMDS DLPC aula 14 32
![Page 33: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/33.jpg)
Análise de expressões atarefadas
uma expressão (não trivial) é atarefada (very busy) se vai certamente seravaliada novamente antes de ver o seu valor mudar
mais uma vez, temos de nos socorrer de uma aproximação para poderdetectar tais casosas aproximações que consideraremos aqui costumam serem prudente (eassim incluir poucas expressões)• as (eventualmente poucas) respostas “atarefada” devem ser certeiras• as expressões atarefadas podem ser pre-calculada
boa nova: podemos reutilizar o reticulado da análise das expressõesdisponíveis
SMDS DLPC aula 14 33
![Page 34: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/34.jpg)
Configuração
para cada vértice v do CFG temos a restrição JvK que consiste nosubconjunto de variáveis do programa que estão atarefadas no vérticeanterior a v .como a análise é conservadora, o conjunto calculado pode ser de tamanhodiminuto
definition do Join:
Join(v) =⋂
w∈succ(v)
JwK
SMDS DLPC aula 14 34
![Page 35: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/35.jpg)
definições das restrições JvK
no caso do vértice v=exit:JexitK = ∅
para as condicionais (v = if (E ))e a operação output (v = output E ):
Jif (E )K = Joutput EK = Join(v) ∪ exps(E )
no caso das atribuições (v = x = E ):
Jx = EK = Join(v) ↓x ∪exps(E )
para todos os outros nodos:
JvK = Join(v)
SMDS DLPC aula 14 35
![Page 36: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/36.jpg)
Um exemplo
var x,a,b;x = input;a = x-1;b = x-2;while (x>0) {
output a*b-x;x = x-1;
}output a*b;
a analise das expressões atarefadas destaca que a× b está atarefada dentrodo ciclo
SMDS DLPC aula 14 36
![Page 37: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/37.jpg)
Exercício
Desenvolva, à semelhança dos exemplos das análises previamente expostos,• a definição das restrições para o exemplo aqui apresentado e• o calculo do ponto fixo que resulta na solução apresentada (a× b éexpressão atarefada)
SMDS DLPC aula 14 37
![Page 38: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/38.jpg)
Consequências e respectivo aproveitamento
o compilador pode, com base nesta analise, realizar uma optimização(designada de code hoisting): puxar a avaliação da expressões atarefadapara o ponto que antecede o primeiro local onde ficou determinada queestá atarefada.
var x,a,b;x = input;a = x-1;b = x-2;while (x>0) {
output a*b-x;x = x-1;
}output a*b;
=⇒
var x,a,b,atimesb;x = input;a = x-1;b = x-2;atimesb=a*b;while (x>0) {
output atimesb-x;x = x-1;
}output atimesb;
SMDS DLPC aula 14 38
![Page 39: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/39.jpg)
Exercício
Qual é a análise de complexidade no pior caso desta análise estática?
SMDS DLPC aula 14 39
![Page 40: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/40.jpg)
Análise do alcance de definições
SMDS DLPC aula 14 40
![Page 41: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/41.jpg)
Análise do alcance de definições: Princípios
a análise do alcance de definições (reaching definitions analysis) paraum ponto de programa permite saber que atribuições definem neste pontodo programa os valores das variáveis.
o desafio da aproximação conservadora que vamos definir é aqui não falharnenhuma atribuições que possa influenciar os valores das variáveis numdeterminado ponto do programa. Neste sentido, esta analise estática podeter de considerar demasiadas possíveis atribuições.
o reticulado que vamos aqui usar é o reticulado construído sobre oconjunto das partes do conjunto das atribuições do programa emcausa, ordenado pela inclusão.
SMDS DLPC aula 14 41
![Page 42: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/42.jpg)
O reticulado
assim para o programa seguinte:var x,y,z;x = input;while (x>1) {
y = x/2;if (y>3) x = x-y;z = x-4;if (z>0) x = x/2;z = z-1;
}output x;
o reticulado é
L = (P({x = input, y = x/2, x = x−y , z = x−4, x = x/2, z = z−1}),⊆)
SMDS DLPC aula 14 42
![Page 43: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/43.jpg)
As restrições associadas
Join(v) =⋃
w∈pred(v)
JwK
no caso das atribuições
Jx = EK = Join(v) ↓x ∪ {x = E}
para todos os outros nodos
JvK = Join(v)
onde a função X ↓x remove a atribuição x de X
SMDS DLPC aula 14 43
![Page 44: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/44.jpg)
O grafo def-use
desta vez e para esta análise, o grafo que vamos usar é uma variante doCFG: o grafo def-useos vértices são os vértices do CFG
as arestas vão dos vértices de definições para vértices que possivelmente asusam
esta analise forma a base de várias transformações, como aseliminações de código morto, ou code-motion
SMDS DLPC aula 14 44
![Page 45: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/45.jpg)
O grafo def-use, um exemplo
SMDS DLPC aula 14 45
![Page 46: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/46.jpg)
Exercício
• mostre que o grafo def-use é sempre um sub-grafo do fecho transitivodo CFG
• conduza a definição do sistema de restrições e o calculo da menorsolução desta análise sobre o exemplo introduzido
• que proveito podemos retirar da solução (explique o seu uso nas duastransformações citadas no acetato 44)?
SMDS DLPC aula 14 46
![Page 47: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/47.jpg)
Análise das variáveis inicializadas
SMDS DLPC aula 14 47
![Page 48: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/48.jpg)
Análise das variáveis inicializadas
objectivo caracterizar cada variável com a informação seguinte: se foidevidamente inicializada antes da sua leitura
é uma analise must em processo
em cada ponto do programa queremos saber as variáveis que com toda acerteza foram inicializadas antes
o reticulado de suporte é o reticulado inverso das partes do conjunto dasvariáveis do programa
Join(v) = ∩w∈pred(v)JwK
a definição JvK das restrições para cada nodo v é
JentryK = ∅ Jx = EK = Join(v) ∪ {x}JvK = Join(v) para todos os outros nodos v
. SMDS DLPC aula 14 48
![Page 49: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/49.jpg)
Análise da propagação de constantes
SMDS DLPC aula 14 49
![Page 50: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/50.jpg)
Análise da propagação de constantes
objectivo. determinar em cada ponto de programas que variáveis tem umvalor constante
é uma variante da analise de sinal mas sobre um reticulado da forma
m + n , n,m 7→ if (n = ⊥ ∨ m = ⊥) then {⊥} else if (n =? ∨ m =?) then {?} else {n+m}
SMDS DLPC aula 14 50
![Page 51: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/51.jpg)
Exercício
• defina as operações abstractas em falta• defina a função Join(v) para esta análise e para os vértices v de umCFG
• defina a função JvK para cada tipo de nodo v do CFG• verifique que esta função é monótona (relativamente ao reticulado emcausa)
• defina o conjunto das restrições associadas ao exemplo apresentado noacetato 52
• execute o algoritmo de calculo de ponto fixo (escolhe entre asdiferentes variantes apresentadas) e apresente os cálculos intermédios
SMDS DLPC aula 14 51
![Page 52: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/52.jpg)
Exemplo
Com base na solução desta análise, podemos transformar o primeiro programa nosegundo programaPor sua vez, com base numa analise reaching definitions e uma eliminação decódigo morto podemos reduzir o código na forma do terceiro programa
var x,y,z;x = 27;y = input;z = 2*x+y;if (x<0) {y = z-3;}
else {y = 12;}output y;
=⇒
var x,y,z;x = 27;y = input;z = 54+y;if (0) {y = z-3;}
else {y = 12;}output y;
=⇒var y;y = input;output 12;
SMDS DLPC aula 14 52
![Page 53: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/53.jpg)
Análise de intervalo
SMDS DLPC aula 14 53
![Page 54: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/54.jpg)
Análise de intervalo: conceitos
uma análise de intervalo calcula para cada variável o limite superior e olimite inferior dos seus possíveis valores
pode ser útil para optimizaçõesexemplos: se uma variável é usada como índice de vector e o intervalo dosseus valores estarem dentro dos limites do vector, podemos abdicar daverificação sistemática do array bound checking
mas também: numerical overflows, optimizações ligadas à representaçãoóptima de valores numéricos, etc.
SMDS DLPC aula 14 54
![Page 55: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/55.jpg)
o reticulado dos intervalos
o reticulado Linterval dosintervalos define-se por
lift({[l , h] | l , h ∈ N ∧ l ≤ h})
e
[l1, h1] v [l2, h2] , l2 ≤ l1∧h1 ≤ h2
∞ e −∞ são consideradosvalores (não são uma abstração)
o reticulado tem uma alturainfinita!! temos de adaptar oalgoritmo de procura de pontofixo. o reticulado Interval
SMDS DLPC aula 14 55
![Page 56: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/56.jpg)
o reticulado
o reticulado por contemplar para cada ponto do CFG é
L , Vars → Inverval
que associa um intervalo a cada variável inteira
mas (mais uma vez...)
[0, 0] v [0, 1] v [0, 2] · · · [0, n] · · ·
SMDS DLPC aula 14 56
![Page 57: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/57.jpg)
Restrições associadas
Join(v) = tw∈pred(v)JwK
para o nodo de entradaJentryK = λx .⊥
para as atribuições
Jx = EK = Join(b)[x → eval(Join(v),E )]
para os nodos restantes
JvK = Join(v) = tw∈pred(v)JwK
SMDS DLPC aula 14 57
![Page 58: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/58.jpg)
Avaliar intervalos
a função eval(ρ,E ) é definida da seguinte forma:
eval(ρ,E ) ,
ρ(x) se E = x , x ∈ Vars[i,i] se E = i , i ∈ N
op(eval(ρ,E1), eval(ρ,E2)) se E = E1 opE2
onde
op([l1, h1], [l2, h2]) = [(minx∈[l1,h1],y∈[l2,h2]x op y), (maxx∈[l1,h1],y∈[l2,h2]x op y)]
exemplo+([1, 10], [−7, 7]) = [1− 5, 10+ 7] = [−4, 17]
SMDS DLPC aula 14 58
![Page 59: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/59.jpg)
Problemas...
como anunciado, o algoritmo de procura de ponto fixo tem de ser adaptadoaos casos dos reticulados de altura infinitaporque em Ln, a sequência de aproximações Fi (⊥,⊥, . . . ,⊥) pode nãoconverger
restringir a representação dos inteiros a 32 bits não é uma solução prática
SMDS DLPC aula 14 59
![Page 60: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/60.jpg)
Exercício
1. mostre que estas definições definam operadores monótonos sobre oreticulado dos intervalos
2. mostre que os operadores abstractos de comparação podem serdefinidos de uma forma mais precisa sem romper as propriedadesesperadas deles
3. dê um exemplo de programa sobre o qual, em Ln, a sequência deaproximações Fi (⊥,⊥, . . . ,⊥) não converge
SMDS DLPC aula 14 60
![Page 61: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/61.jpg)
As técnicas de widening e de narrowing
SMDS DLPC aula 14 61
![Page 62: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/62.jpg)
Widening - Alargamento
esta técnica permite contornar em parte a dificuldade apontada
introduzimos para esse efeito uma funçãode alargamento (widening function)ω : Ln → Ln tal que
(ω ◦ F )i (⊥,⊥,⊥, · · · ,⊥)
convirja para um ponto fixo que é umaaproximação segura (safe) de cadaF i (⊥,⊥,⊥, · · · ,⊥)
ou seja, a função ω exagera a informaçãoque manipula de forma suficiente paragarantir terminação
iterações em modo Turbo
SMDS DLPC aula 14 62
![Page 63: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/63.jpg)
Alargamento para os intervalos
a função ω é definida ponto a ponto sobre Ln
é parametrizada com um subconjunto B finito fixo de N (i.e. B ⊂ N)este deve conter ∞ e −∞ (para poder contar com >)tipicamente este conjunto é definido com base em todas as constantes queocorrem no programa analizado (outras heurísticas existam)
ideia: encontrar o intervalo envolvente mais justo/apertado permitidoneste caso dos intervalos:
ω(I ) =
{[max{i ∈ B | i ≤ a}, min{i ∈ B | b ≤ i}] se I = [a, b]⊥ se I = ⊥
SMDS DLPC aula 14 63
![Page 64: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/64.jpg)
Exercício
mostre que ω é uma função extensiva e monótona
mostre que ω(Interval) é um reticulado de altura finita
tendo em conta as propriedades anteriores de ω, mostre que a técnica dealargamento funciona garantidamente (na procura de um ponto fixo que éuma aproximação safe)
SMDS DLPC aula 14 64
![Page 65: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/65.jpg)
Correção do alargamento
vamos em parte responder ao exercício anterior.a correcção da técnica do alargamento depende fortemente de• ω é uma função extensiva e monótona (w.r.t o reticulado em causa)• ω(Interval) é um reticulado de altura finita
assim, safety:
∀i ,F i (⊥,⊥,⊥, ·,⊥) v (ω ◦ F )i (⊥,⊥,⊥, ·,⊥)
visto F ser monótono e ω ser extensiva
assim ω ◦ F é uma função monótona de ω(interval)→ ω(Interval), logo oponto fixo existe.
basta aplicar ω nas arestas de retorno (back-edge) do CFG
SMDS DLPC aula 14 65
![Page 66: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/66.jpg)
Estreitamento - Narrowinga técnica de alargamento em geral encontra umasolução demasiada aproximada (aponta demasiadopara cima).
a técnica do estreitamento tenta minorar este efeito
se definirmos fix e fixω como
fix , tF i (⊥,⊥, · · · ,⊥)
fixω , t(ω ◦ F )i (⊥,⊥, · · · ,⊥)
então fix v fixωmas temos também fix v F (fixω) v fixω
assim, aplicar F repetidamente melhora o resultado(que permanece safe)
podemos iterar as vezes que quisermos. Podedivergir, mas é seguro parar em qualquer altura
Dar marcha à ré
SMDS DLPC aula 14 66
![Page 67: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/67.jpg)
Exercício
mostre que ∀i , fix v F i+1(fixω) v F i (fixω) v fixω
SMDS DLPC aula 14 67
![Page 68: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/68.jpg)
Correcção de um estreitamento repetido
tendo em conta que ω é expansivo temos
F (fixω) v ω(F (fixω)) = (ω ◦ F )(fixω) = fixω
• por indução temos que para cada i F i+1(fixω) v F i (fixω) v fixω
• i.e. F i+1(fixω) é pelo menos tão preciso quanto F i (fixω)
fix v fixω consequentemente F (fix) = fix v F (fixω), por monotonia de F
• por indução sobre i temos igualmente fix v F i (fixω)
• i.e. F i (fixω) é uma aproximação segura de fix
SMDS DLPC aula 14 68
![Page 69: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/69.jpg)
Divergência em ação
y = 0;x = 7;x = x+1;while (input) {
x = 7;x = x+1;y = y+1;
} // Neste ponto do programa
[x → ⊥ , y → ⊥][x → [8, 8] , y → [0, 1]][x → [8, 8] , y → [0, 2]][x → [8, 8] , y → [0, 3]]· · ·
SMDS DLPC aula 14 69
![Page 70: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/70.jpg)
Alargamento em ação
y = 0;x = 7;x = x+1;while (input) {
x = 7;x = x+1;y = y+1;
} // Neste ponto do programa
[x → ⊥ , y → ⊥][x → [7,∞] , y → [0, 1]][x → [7,∞] , y → [0, 7]][x → [7,∞] , y → [0,∞]]· · ·
com B = {−∞, 0, 1, 7,∞}
SMDS DLPC aula 14 70
![Page 71: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/71.jpg)
Estreitamento em acção
y = 0;x = 7;x = x+1;while (input) {
x = 7;x = x+1;y = y+1;
} // Neste ponto do programa
[x → ⊥ , y → ⊥][x → [7,∞] , y → [0, 1]][x → [7,∞] , y → [0, 7]]
[x → [8, 8] , y → [0,∞]]
com B = {−∞, 0, 1, 7,∞}
SMDS DLPC aula 14 71
![Page 72: Desenho de Linguagens de Programação e de Compiladoresdesousa/DLPC/aula_dlpc14-pp.pdf · 2018-11-05 · UniversidadedaBeiraInterior Desenho de Linguagens de Programação e de Compiladores](https://reader033.vdocuments.net/reader033/viewer/2022050408/5f84eadaea945b1d870a734e/html5/thumbnails/72.jpg)
Leitura
As aulas de Análise Estáticas de Programas desta UC baseam-se em duas fontesessenciais:
• Anders Møller and Michael I. Schwartzbach. StaticProgram Analysis (acetatos e sebenta).
• Flemming Nielson, Hanne R. Nielson, and Chris L.Hankin. Principles of Program Analysis (um mustread !).
SMDS DLPC aula 14 72