Aula 23: Otimização de Código: Peephole e Local

Objetivos

  • Aplicar otimizações locais (dentro de blocos básicos).
  • Peephole Optimization.

Conteúdo

Otimizar é a arte de reescrever código para torná-lo mais eficiente sem alterar seu resultado observável.

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

Referências

  • Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools.
  • Cooper, K., & Torczon, L. (2011). Engineering a Compiler.
Back to top