Compiladores - Otimização de código Intermediário
-
Upload
edsonmoretti -
Category
Technology
-
view
1.321 -
download
1
description
Transcript of Compiladores - Otimização de código Intermediário
![Page 1: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/1.jpg)
CODE OPTIMIZATIONCODE OPTIMIZATION
Presented By:
Amita das
Jayanti bhattacharya
Jaistha Upadhyay
![Page 2: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/2.jpg)
Designer da compilação
Analise Léxica
Analise Sintática
Analise Semântica
Geração do Código
Otimização de Código
Tabela de Símbolos
Exibição deErros
Código fonte
Código Objeto
Geração do Código Intermediário
![Page 3: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/3.jpg)
O que é otimização?O que é otimização?
Em computação, otimização é o processo de modificar Em computação, otimização é o processo de modificar fazer algum aspecto de um sistema para que trabalhe com fazer algum aspecto de um sistema para que trabalhe com mais eficiência ou utilize menos recursos. mais eficiência ou utilize menos recursos.
Por exemplo, um programa de computador pode ser Por exemplo, um programa de computador pode ser otimizada de modo que ele seja executado mais rápido, ou otimizada de modo que ele seja executado mais rápido, ou seja capaz de operar com o menos armazenamento de seja capaz de operar com o menos armazenamento de memória ou outros recursos, ou consomem menos memória ou outros recursos, ou consomem menos energia. O sistema pode ser um programa único de energia. O sistema pode ser um programa único de computador, um conjunto de computadores ou mesmo computador, um conjunto de computadores ou mesmo toda uma rede como a internet.toda uma rede como a internet.
![Page 4: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/4.jpg)
““Níveis” de otimizaçãoNíveis” de otimizaçãoOtimização pode ocorrer em um número de "níveis":Otimização pode ocorrer em um número de "níveis":
Nível de designNível de design
No nível mais alto, o projeto pode ser otimizado para fazer o No nível mais alto, o projeto pode ser otimizado para fazer o melhor uso dos recursos disponíveis. A implementação deste melhor uso dos recursos disponíveis. A implementação deste projeto irá se beneficiar do uso de algoritmos eficientes e projeto irá se beneficiar do uso de algoritmos eficientes e adequados a implementação destes algoritmos irão beneficiar de adequados a implementação destes algoritmos irão beneficiar de escrever código de boa qualidade. O projeto arquitetônico de escrever código de boa qualidade. O projeto arquitetônico de um sistema predominantemente afeta seu desempenho. A um sistema predominantemente afeta seu desempenho. A escolha do algoritmo afeta a eficiência mais do que qualquer escolha do algoritmo afeta a eficiência mais do que qualquer outro item do projeto.outro item do projeto.
Nível de compilaçãoNível de compilação
O uso de um compilador otimizado tende a assegurar que o O uso de um compilador otimizado tende a assegurar que o programa executável é optimizada, pelo menos tanto quanto o programa executável é optimizada, pelo menos tanto quanto o compilador pode prever.compilador pode prever.
![Page 5: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/5.jpg)
Nível AssemblyNível Assembly
No nível mais baixo, escrevendo código usando uma linguagem de No nível mais baixo, escrevendo código usando uma linguagem de montagem projetado para uma plataforma de hardware específico, montagem projetado para uma plataforma de hardware específico, normalmente, produzem o código mais eficiente, pois o programador normalmente, produzem o código mais eficiente, pois o programador pode aproveitar o repertório completo de instruções de máquina. Os pode aproveitar o repertório completo de instruções de máquina. Os sistemas de operação da maior parte das máquinas tem sido sistemas de operação da maior parte das máquinas tem sido tradicionalmente escrito em código Assembler por esta razão.tradicionalmente escrito em código Assembler por esta razão.
Runtime (tempo de execução)Runtime (tempo de execução)Apenas compiladores e programadores Apenas compiladores e programadores assemblerassembler são capazes de são capazes de realizar a otimização de tempo de execução.realizar a otimização de tempo de execução.
![Page 6: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/6.jpg)
Quando a otimizar?Quando a otimizar?
Optimização é muitas vezes realizada no final do estágio de Optimização é muitas vezes realizada no final do estágio de desenvolvimento, uma vez que:desenvolvimento, uma vez que:
• Reduz a legibilidadeReduz a legibilidade• Adiciona código que é utilizado para melhorar o Adiciona código que é utilizado para melhorar o
desempenhodesempenho
![Page 7: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/7.jpg)
Critérios para a otimização
Uma otimização deve preservar o significado de um programa:
- Não pode alterar a saída produzida para qualquer entrada.
- Não pode introduzir um erro
Deve, em média, acelerar os programas
Transformação deve valer a pena o esforço
![Page 8: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/8.jpg)
As melhorias podem ser feitas em várias fases:
Código Fonte:
- Alterações no algoritmo podem produzir melhorias espetaculares- Criação de perfil pode ser útil para chamar a atenção de um programador no código de suma importância.
Código Intermediário:
- Compilador pode melhorar loops, chamadas de procedimento e cálculos de endereço- Normalmente apenas compiladores otimizando incluir esta fase.
Código Alvo:
- Os compiladores podem usar registros com eficiência.- Transformação Peephole pode ser aplicado
![Page 9: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/9.jpg)
Tipos de OtimizaçãoTipos de Otimização
Remoção de sub-expressão comum.Remoção de sub-expressão comum. Otimização de Códigos MortosOtimização de Códigos Mortos Otimização de Loops.Otimização de Loops.
![Page 10: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/10.jpg)
Remoção de sub-expressão comum.Remoção de sub-expressão comum.
Remoção de sub-expressão comum é uma otimização que procura por ocorrências de expressões idênticas (ou seja, todos eles avaliar o mesmo valor), e as análises se vale a penas em substituir por uma única variável mantendo o valor calculado.
a=b * c + g
d=b * c * d
temp=b * c
a=temp + g
d=temp * d
![Page 11: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/11.jpg)
Eliminação de código morto é uma otimização do compilador que remove código que não afeta um programa. Remoção de tal código
tem duas vantagens encolhe o tamanho do programa, uma consideração importante em alguns contextos. Ele permite que o
programa em execução evitar a execução de operações irrelevantes, o que reduz seu tempo de execução.
Eliminação de código morto é de dois tipos:
- Código Inacessível
- Declaração redundante
Otimização de Código Morto
![Page 12: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/12.jpg)
Código Inacessivel
Em Programação de Computadores, código inacessível ou código morto é o código que existe no código fonte de um programa, mas nunca pode ser executado.
Program Code
If (a>b)
m=a
elseif (a<b)
m=b
elseif (a==b)
m=0
else
m=-1
Optimized Code
If (a>b)
m=a
elseif (a<b)
m=b
else
m=0
![Page 13: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/13.jpg)
Código redundante
Código redundante é o código que é executado mas não tem qualquer efeito sobre a saída a partir de um programa
main(){
int a,b,c,r;
a=5;
b=6;
c=a + b;
r=2;
r++;
printf(“%d”,c);
}
Adicionando complexidade de tempo e espaço
![Page 14: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/14.jpg)
Otimização de LoopOtimização de Loop
Otimização de Loop desempenha um papel importante na melhoria do desempenho do código fonte, reduzindo despesas gerais associadas com loops de execução.
Otimização de loop pode ser feito através da remoção:
- Loop invariante
- Variáveis de indução
![Page 15: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/15.jpg)
Loop InvarianteLoop Invariante
i = 1
s= 0
do{
s= s + i
a =5
i = i + 1
{
while (i < =n)
i = 1
s= 0
a =5
do{
s= s + i
i = i + 1
{
while (i < =n)
Trazendo a = 5
fazer fora do loop while, é chamado movimento de código.
![Page 16: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/16.jpg)
Variáveis de InduçãoVariáveis de Indução
i = 1
s= 0
S1=0
S2=0
while (i < =n)
{
s= s + a[ i ]
t1 = i * 4
s= s + b[ t1 ]
t2 = t1 +2
s2= s2 + c[ t2 ]
i = i + 1
}
i = 1
s= 0
S1=0
S2=0
t2=0
while (i < =n)
{
s= s + a[ i ]
t1 = t1+ 4
s= s + b[ t1 ]
s2= s2 + c[t1 +2 ]
i = i + 1
}
t1, t2 são variáveis de indução. i está induzindo t1 e t1 está induzindo t2
“+” replaced “ * ”, t1 was made independent of i
![Page 17: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/17.jpg)
![Page 18: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/18.jpg)
![Page 19: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/19.jpg)
![Page 20: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/20.jpg)
![Page 21: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/21.jpg)
Common Sub-expression RemovalCommon Sub-expression Removal
It is used to remove redundant computations which usually improves It is used to remove redundant computations which usually improves the execution time of a program.the execution time of a program.
![Page 22: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/22.jpg)
![Page 23: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/23.jpg)
![Page 24: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/24.jpg)
![Page 25: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/25.jpg)
![Page 26: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/26.jpg)
![Page 27: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/27.jpg)
![Page 28: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/28.jpg)
Three Address Code of Quick SortThree Address Code of Quick Sorti = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto (5) < v goto (5)
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto (9) > v goto (9)
if i >= j goto (23)if i >= j goto (23)
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
11
22
33
44
55
66
77
88
99
1010
1111
1212
1313
1414
1515
tt77 = 4 * I = 4 * I
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[ta[t77] = t] = t99
tt1010 = 4 * j = 4 * j
a[ta[t1010] = x] = x
goto (5)goto (5)
tt1111 = 4 * I = 4 * I
x = a[tx = a[t1111]]
tt1212 = 4 * i = 4 * i
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[ta[t1212] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
1616
1717
1818
1919
2020
2121
2222
2323
2424
2525
2626
2727
2828
2929
3030
![Page 29: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/29.jpg)
Find The Basic BlockFind The Basic Blocki = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto (5) < v goto (5)
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto (9) > v goto (9)
if i >= j goto (23)if i >= j goto (23)
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
11
22
33
44
55
66
77
88
99
1010
1111
1212
1313
1414
1515
tt77 = 4 * I = 4 * I
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[ta[t77] = t] = t99
tt1010 = 4 * j = 4 * j
a[ta[t1010] = x] = x
goto (5)goto (5)
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1212 = 4 * i = 4 * i
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[ta[t1212] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
1616
1717
1818
1919
2020
2121
2222
2323
2424
2525
2626
2727
2828
2929
3030
![Page 30: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/30.jpg)
Flow GraphFlow Graphi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt77 = 4 * i = 4 * i
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[ta[t77] = t] = t99
tt1010 = 4 * j = 4 * j
a[ta[t1010] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1212 = 4 * i = 4 * i
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[ta[t1212] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
B1
B2
B3
B4
B5 B6
![Page 31: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/31.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt77 = 4 * i = 4 * i
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[ta[t77] = t] = t99
tt1010 = 4 * j = 4 * j
a[ta[t1010] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1212 = 4 * i = 4 * i
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[ta[t1212] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
B1
B2
B3
B4
B5 B6
![Page 32: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/32.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt66] = t] = t99
tt1010 = 4 * = 4 * jj
a[ta[t1010] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1212 = 4 * i = 4 * i
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[ta[t1212] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
B1
B2
B3
B4
B5 B6
![Page 33: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/33.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt66] = t] = t99
a[a[tt88] = x] = x
goto Bgoto B22
tt1111 = 4 *i = 4 *i
x = a[tx = a[t1111]]
tt1212 = 4 * i = 4 * i
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[ta[t1212] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
B1
B2
B3
B4
B5 B6
![Page 34: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/34.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt66] = t] = t99
a[a[tt88] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1212 = 4 * i = 4 * i
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[ta[t1212] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
B1
B2
B3
B4
B5 B6
![Page 35: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/35.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt66] = t] = t99
a[a[tt88] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[a[tt1111] = t] = t1414
tt1515 = 4 * n = 4 * n
a[ta[t1515] = x] = x
B1
B2
B3
B4
B5 B6
![Page 36: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/36.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt66] = t] = t99
a[a[tt88] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[a[tt1111] = t] = t1414
a[a[tt1313] = x] = x
B1
B2
B3
B4
B5 B6
![Page 37: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/37.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
tt6 6 = 4 * i = 4 * i
x = a[tx = a[t66]]
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt66] = t] = t99
a[a[tt88] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[a[tt1111] = t] = t1414
a[a[tt1313] = x] = x
B1
B2
B3
B4
B5 B6
![Page 38: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/38.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
x = a[x = a[tt22]]
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt22] = t] = t99
a[a[tt88] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[a[tt1111] = t] = t1414
a[a[tt1313] = x] = x
B1
B2
B3
B4
B5 B6
![Page 39: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/39.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
x = tx = t3 3
tt88 = 4 * j = 4 * j
tt99 = a[t = a[t88]]
a[a[tt22] = t] = t99
a[a[tt88] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[a[tt1111] = t] = t1414
a[a[tt1313] = x] = x
B1
B2
B3
B4
B5 B6
![Page 40: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/40.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
x = tx = t3 3
a[a[tt22] = t] = t55
a[a[tt44] = x] = x
goto Bgoto B22
tt1111 = 4 * i = 4 * i
x = a[tx = a[t1111]]
tt1313 = 4 * n = 4 * n
tt1414 = a[t = a[t1313]]
a[a[tt1111] = t] = t1414
a[a[tt1313] = x] = x
B1
B2
B3
B4
B5 B6
![Page 41: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/41.jpg)
Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
x = tx = t3 3
a[a[tt22] = t] = t55
a[a[tt44] = x] = x
goto Bgoto B22
x = tx = t33
tt1414 = a[t = a[t11]]
a[a[tt22] = t] = t1414
a[a[tt11] = x] = x
B1
B2
B3
B4
B5 B6
Similarly for B6
![Page 42: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/42.jpg)
Dead Code EliminationDead Code Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
x = tx = t3 3
a[a[tt22] = t] = t55
a[a[tt44] = x] = x
goto Bgoto B22
x = tx = t33
tt1414 = a[t = a[t11]]
a[a[tt22] = t] = t1414
a[a[tt11] = x] = x
B1
B2
B3
B4
B5 B6
![Page 43: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/43.jpg)
Dead Code EliminationDead Code Eliminationi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
a[a[tt22] = t] = t55
a[a[tt44] = t] = t33
goto Bgoto B22
tt1414 = a[t = a[t11]]
a[a[tt22] = t] = t1414
a[a[tt11] = t] = t33
B1
B2
B3
B4
B5 B6
![Page 44: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/44.jpg)
Reduction in StrengthReduction in Strengthi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
i = i + 1i = i + 1
tt22 = 4 * i = 4 * i
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
j = j – 1j = j – 1
tt44 = 4 * j = 4 * j
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
a[a[tt22] = t] = t55
a[a[tt44] = t] = t33
goto Bgoto B22
tt1414 = a[t = a[t11]]
a[a[tt22] = t] = t1414
a[a[tt11] = t] = t33
B1
B2
B3
B4
B5 B6
![Page 45: Compiladores - Otimização de código Intermediário](https://reader035.fdocumentos.com/reader035/viewer/2022062308/559d16691a28abd1018b480c/html5/thumbnails/45.jpg)
Reduction in StrengthReduction in Strengthi = m - 1i = m - 1
j = nj = n
tt1 1 =4 * n=4 * n
v = a[tv = a[t11]]
tt2 2 = 4 * i= 4 * i
tt44 = 4 * j = 4 * j
tt22 = t = t22 + 4 + 4
tt33 = a[t = a[t22]]
if tif t33 < v goto B < v goto B22
tt44 = t = t44 - 4 - 4
tt55 = a[t = a[t44]]
if tif t55 > v goto B > v goto B33
if i >= j goto B6
a[a[tt22] = t] = t55
a[a[tt44] = t] = t33
goto Bgoto B22
tt1414 = a[t = a[t11]]
a[a[tt22] = t] = t1414
a[a[tt11] = t] = t33
B1
B2
B3
B4
B5 B6