Escolar Documentos
Profissional Documentos
Cultura Documentos
GCC130 – Compiladores
Contexto
• As etapas de Geração de Código Intermediário e de Geração de
Código realizam traduções considerando instruções individuais.
• Podem existir ineficiências: custos de tempo e armazenamento
• O Otimizador aplica um conjunto de heurísticas para identificar
padrões ineficientes na estrutura do código que podem ser alvo de
TRANSFORMAÇÕES.
• Estas transformações são chamadas de OTIMIZAÇÕES, muito embora
não seja possível garantir que tragam, de fato, melhorias de
desempenho.
Tipos de Otimizadores
• Dependentes de Máquina
• Realizadas sobre o resultado do Gerador de Código
• Conhecem detalhes sobre os conjuntos de instruções das máquinas-alvo
• Específicos
• Independentes de Máquina
• Realizadas sobre o resultado do Gerador de Código Intermediário
• Desconhecem detalhes sobre os conjuntos de instruções das máquinas-alvo
• Genéricos
Tipos de Otimizadores
• Dependentes de Máquina
• Realizadas sobre o resultado do Gerador de Código
• Conhecem detalhes sobre os conjuntos de instruções das máquinas-alvo
• Específicos
• Independentes de Máquina
• Realizadas sobre o resultado do Gerador de Código Intermediário
• Desconhecem detalhes sobre os conjuntos de instruções das máquinas-alvo
• Genéricos
else {
for (i=2, i <=m, i++) { B3 7: return f2 8: L2: f2 f0 + f1
9: f0 f1
f2=f0+f1;
B4 10: f1 f2
f0=f1; 11: i i+1
f1 =f2;} 12: goto L1
return f2; }
}
SAÍDA
Análise de Fluxo de dados
• Analisa a definição e uso de dados em um programa.
B0 X= 2
B1 T1 = 4 + X
B2 T2 = 1 + d[T1] B3 T3 = 4 + X
Análise de Fluxo de dados
• Analisa a definição e uso de dados em um programa.
DEFINIÇÃO
B0 X= 2
PONTO DE
B1 T1 = 4 + X AVALIAÇÃO
PONTO DE PONTO DE
B2 T2 = T1 REFERÊNCIA B3 T3 = 4 + X AVALIAÇÃO
Otimizações
• Conjunto de heurísticas que buscam padrões conhecidos que
representam oportunidades de melhorias
• Podem ser globais ou locais
• Locais: Resultante de análise em blocos individuais
• Globais: Resultante de análise em dois ou mais blocos
Exemplos de Otimizações Independentes de
Máquina
• Eliminação de Subexpressões Comuns
• Eliminação de Propagação de Cópias
• Eliminação de Código Morto
• Movimentação de Código
Eliminação de Subexpressões Comuns
• Uma instrução E é dita uma subexpressão comum se o valor de E já
foi previamente computado e seu valor não foi alterado. Assim, E
pode ser removido sem prejuízo ao código.
...
(2) w:= u (2) w:= v
Código Morto
• Instruções inacessíveis
• Resultados que não são utilizados
T=0
Inst
Inst (1) u:= v
IF (T>0) GOTO B3
...
(2) w:= v
Movimentação de Código
• Consiste em identificar laços que possuam operações que podem ser
movidas para fora do laço.