11.07.2015 Views

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capítulo 7Otimização de CódigoTrata-se do problema da geração de código eficiente: uso racional da memória e rapidezna execução do código fonte. Porém, muitas vezes esses aspectos são conflitantes, ou seja,apela-se para um maior tempo de execução para se conseguir um ganho no consumo dememória e vice-versa.<strong>Compiladores</strong> que aplicam transformações de melhorias no código gerado são denominadoscompiladores otimizantes.Normalmente este processo é feito em duas fases: otimizações do código intermediárioe otimizações do código objeto. No código intermediário pode-se eliminar atribuiçõesredundantes, sub-expressões comuns, temporários desnecessários, etc., no intuito de diminuio código intermediário, enquanto que no código objeto é feita uma substituição deinstruções por equivalentes mais rápidos que permitem melhor uso dos registradores.7.1 Otimização PeepholeUma técnica simples para melhorar localmente o código gerado é a otimização peephole,que trabalha substituindo seqüências de instruções (peepholes) por outras mais eficientes.As principais ações da otimização peephole são:• eliminação de instruções redundantes• otimizações de fluxo de controle• simplificações algébricasEliminação de Instruções RedundantesUma seqüência de instruções do tipo a = b e b = a, pode ser substituído somente por a= b, pois o resultado lógico é o mesmo.Otimização de Fluxo de ControleOs algoritmos de geração de código intermediário freqüentemente produzem: (1) desviospara desvios, (2) desvios para desvios condicionais ou (3) desvios condicionais para desvios.Uma otimização peephole pode remover tais instruções redundantes:Exemplo 1:67

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!