Disciplinas envolvidas: Teoria da Computa cao, Compiladores
Autor: Jose de Oliveira Guimar aes Descricao Express oes regulares podem ser utilizadas para fazer otimizacao de c odigo, principalmente as otimizac oes chamadas de peephole, que s ao feitas em pequenos trechos de c odigo. Como exemplo deste tipo de otimizac ao, em linguagem assembler, temos: (a) eliminacao de instruc oes in uteis. Exemplos: pop seguido de push: push AX pop AX Estas duas instru coes podem ser eliminadas; mov x, y mov y, x Pode-se trocar por mov x, y; add AX, 0 mult BX, 1 sub CX, 0 mult DX, 1 In uteis, podem ser todas removidas. (b) troca de instruc oes lentas por rapidas add AX, 1 Pode-se usar inc AX, mais r apida. mov AX, 0 Em geral xor AX, AX e mais rapido. aload 1 aload 1 Assumindo que a instrucao dup da maquina virtual de Java e mais r apida do que aload (que empilha um ponteiro), a segunda instruc ao aload 1 pode ser substituda por dup. mult AX, 2 1 Pode-se usar lshift AX, 1, considerando que esta instrucao faz um deslocamente de um bit para a esquerda (que e o mesmo que multiplicar por 2). mult AX, 0 xor AX, AX O reconhecimento das instrucoes a serem otimizadas pode ser feito por express oes regulares em todos os casos acima. Por exemplo, para detectar push seguido de pop pode-se usar push(\ \t)+AX(\ \r\n\t)+pop(\ \t)+AX Usamos (\ \t)+ para um ou mais espacos em branco. A express ao encontrada deveria ser re- movida do programa.
E necess ario uma expressao regular para cada registrador do processador (em geral, push e pop s o s ao usados com registradores). Outras otimizacoes exigiriam um proces- samento adicional. Por exemplo, mov x, y mov y, x exige-se que se compare os argumentos das duas instru coes, o que n ao pode ser feito por uma express ao regular. 2