Aula 23: Otimização de Código: Peephole e Local
Objetivos
- Aplicar otimizações locais (dentro de blocos básicos).
- Peephole Optimization.
Motivação
Em Engenharia de Computação, pequenas otimizações locais se acumulam para gerar ganhos significativos em:
- Tempo de execução (menos instruções, melhor uso de registradores).
- Consumo de energia (especialmente em loops críticos).
- Tamanho de código (importante para firmwares embarcados).
Conteúdo
Otimizar é reescrever o programa (na IR ou no código gerado) para torná-lo mais rápido ou menor sem alterar o comportamento observável. Otimizações locais atuam dentro de um bloco básico (sequência sem desvios); peephole atua sobre uma janela pequena de instruções (ex.: assembly).
flowchart LR
Bloco[Bloco básico] --> Const[Constant folding]
Bloco --> Alg[Simplificação algébrica]
Bloco --> CSE[CSE local]
Const --> Saída[Código melhorado]
Alg --> Saída
CSE --> Saída
Otimizações Locais
Fáceis de implementar pois olham apenas um Bloco Básico (sequência sem desvios). 1. Constant Folding: Avaliar constantes em tempo de compilação. - x = 2 + 3 \(\to\) x = 5. 2. Algebraic Simplification: Usar identidades matemáticas. - x = y + 0 \(\to\) x = y. - x = y * 1 \(\to\) x = y. - x = y * 2 \(\to\) x = y << 1 (Shift é mais barato que Mul). 3. Local CSE (Common Subexpression Elimination): - a = b + c; ... d = b + c \(\to\) a = b + c; ... d = a.
Peephole Optimization (“Buraco de Fechadura”)
Olha para o código Assembly gerado através de uma janela móvel de 2 ou 3 instruções. - Eliminação de Redundância: asm MOV R1, R0 MOV R0, R1 ; Inútil, R0 já tem o valor - Redução de Fluxo: asm JMP L1 ... L1: JMP L2 ; Substitui o primeiro por JMP L2
Resumo
- Locais: constant folding, simplificação algébrica, CSE dentro do bloco. Peephole: janela de 2–3 instruções no código gerado; eliminar redundâncias e saltos desnecessários.
- Essas otimizações são baratas e aplicadas em praticamente todos os compiladores.
Referências
- Aho et al. (2006); Cooper & Torczon (2011).
Materiais da aula
Última atualização: 08/03/2026