VI Optimizao de cdigo Blocos bsicos Optimizao de
VI – Optimização de código • Blocos básicos • Optimização de ciclos • Bibliografia aconselhada: – Apontamentos Jorge Morais LFA 1999/2000 -
Blocos básicos • Início dum bloco básico – A primeira instrução do programa – Instrução com um rótulo (label) – Instruções a seguir a um ramo • A partir deste bloco consideramos todas as instruções até ao início dum novo bloco ou até ao fim do programa Jorge Morais LFA 1999/2000 -
Exemplo i = 17 s=0 ---------l 1: ifz i goto l 2 ---------- Jorge Morais s=s+i i=i– 1 goto l 1 ---------l 2: . . . ---------- LFA 1999/2000 - 3
Exemplo i = 17 s=0 l 1: ifz i goto l 2 s=s+1 i=i– 1 goto l 1 Jorge Morais l 2: . . . LFA 1999/2000 -
Optimizações • • Eliminação de sub-expressões comuns Propagação de código Eliminação de código morto Transformações aritméticas – Cálculo de constantes – Transformações algébricas – Redução de força • Empacotamento de temporários Jorge Morais LFA 1999/2000 -
Exemplo • • b=4– 2 t 1 = b / 2 t 2 = a * t 1 t 3 = t 2 * b t 4 = t 3 + c t 5 = t 2 * b t 6 = t 5 + c d = t 4 * t 6 Jorge Morais LFA 1999/2000 -
Optimização de ciclos • Identificação de ciclos – Dominadores – Back edges – Cabeçalho do ciclo – Pré-cabeçalho • Elevação de código • Variáveis de indução Jorge Morais LFA 1999/2000 -
Exemplo i = 42 l 1: ifz i goto l 2 s=0 i=i– 1 j=i*4 goto l 1 l 2: . . . Jorge Morais i = 42 l 1: ifz i goto l 2 s=0 i=i– 1 j=i*4 goto l 1 l 2: . . . LFA 1999/2000 -
- Slides: 8