Otimizar não é alterar o programa
A transformação só é válida quando preserva o comportamento observável.
FGA0003 - Compiladores 1 | Semana 9 | Aula teórica
O código intermediário torna o programa mais fácil de transformar, comparar e testar.
A transformação só é válida quando preserva o comportamento observável.
Reduzir operações, desvios e acessos custosos.
Diminuir uso de temporários, pilha, heap e caches.
Gerar código menor quando espaço é restrição.
Evitar trabalho desnecessário, especialmente em dispositivos restritos.
Uma otimização de compilador é válida quando:
Otimizações podem atuar em diferentes representações do programa.
Em que fases a otimização pode ocorrer em um compilador?
Qual exemplo descreve uma otimização de baixo nível e dependente de máquina?
O compilador pode transformar o programa como se nada tivesse mudado para o observador externo.
O compilador pode eliminar uma instrução quando:
Muitas otimizações introdutórias podem ser entendidas como padrões locais em TAC ou SSA.
Trocar operação custosa por equivalente mais barata, como multiplicação por soma incremental.
Substituir o uso de uma cópia pelo valor original, quando seguro.
Calcular uma expressão repetida uma vez e reutilizar o resultado.
Em x = a + b; y = a + b;, qual técnica evita recomputar a mesma expressão?
Laços concentram custo porque repetem operações muitas vezes.
Compiladores reais oferecem níveis que equilibram desempenho, tamanho e depuração.
A otimização prematura é a raiz de muitos problemas de engenharia.
Use TAC ou estrutura equivalente que possa ser impressa e testada.
Exemplo: t1 = 2 + 3 vira t1 = 5.
Percorra a lista de instruções e gere uma versão otimizada.
Mostre equivalência e redução de custo quando possível.
Reconhecer o padrão na RI ou no TAC.
Confirmar que a transformação preserva a semântica.
Produzir instruções equivalentes e mais simples.
Comparar saídas e registrar casos de teste.
Na próxima prática: aplicar otimizações simples e testar o impacto sobre o código intermediário.