VI – Optimização de código Blocos básicos Optimização de ciclos Bibliografia aconselhada: –Apontamentos LFA 1999/ Jorge Morais
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 LFA 1999/ Jorge Morais
Exemplo i = 17 s = l1: ifz i goto l s = s + i i = i – 1 goto l l2: LFA 1999/ Jorge Morais
Exemplo LFA 1999/ Jorge Morais i = 17 s = 0 l1: ifz i goto l2 s = s + 1 i = i – 1 goto l1 l2:...
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 LFA 1999/ Jorge Morais
Exemplo b = 4 – 2 t1 = b / 2 t2 = a * t1 t3 = t2 * b t4 = t3 + c t5 = t2 * b t6 = t5 + c d = t4 * t6 LFA 1999/ Jorge Morais
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 LFA 1999/ Jorge Morais
Exemplo i = 42 l1: ifz i goto l2 s = 0 i = i – 1 j = i * 4 goto l1 l2:... LFA 1999/ Jorge Morais i = 42 l1: ifz i goto l2 s = 0 i = i – 1 j = i * 4 goto l1 l2:...