Você está na página 1de 2

Express oes Regulares e Otimizacao de C odigo

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

Você também pode gostar