You are on page 1of 3

Optimizacin de cdigo

La optimizacin de cdigo puede realizarse durante la propia generacin o como paso


adicional, ya sea intercalado entre el anlisis semntico y la generacin de cdigo (se
optimizan las cudruplas) o situado despus de sta (se optimiza a posteriori el cdigo
generado).
Hay teoremas que demuestran que la optimizacin perfecta es indecidible. Por tanto, las
optimizaciones de cdigo en realidad proporcionan meoras, pero no aseguran el !ito
total.
"lasificacin de optimizaciones#
$. %ependientes de la mquina.
o &signacin de registros
o 'nstrucciones especiales ((idioms().
o )eordenacin del cdigo.
*. 'ndependientes de la mquina.
o +ecucin en tiempo de compilacin.
o +liminacin de redundancias.
o "ambio de orden.
o )educcin de potencias.
,ptimizacin y depuracin suelen ser incompatibles. Por eemplo, si se elimina
totalmente una instruccin, puede ser imposible poner una parada en ella para
depuracin. +emplo#
x = x;
Asignacin de registros
+l buen uso de los registros es la caracter-stica ms importante de un cdigo
eficiente.Las instrucciones que in.olucran registros son ms rpidasque las que
in.olucran operandos en memoria. /e utiliza la informacin recolectada en anlisis de
.ariables .i.as 0 se usan tcnicas de coloreo de grafos para saber que .ariable asignar a
cada registro.
Planificacin de instrucciones
La planificacin de instrucciones es una optimizacin importante para los procesadores
modernos segmentados, lo que e.ita paradas o burbuas en el pipeline por instrucciones
de agrupamiento sin dependencias untas, teniendo cuidado de preser.ar la semntica
original.
Reordenamiento de bloques de cdigo
+l reordenamiento de bloques de cdigo altera el orden de los bloques bsicos en un
programa con el fin de reducir los saltos condicionales y meorar la cercan-a de
referencias.
Reduccin de potencias
Se busca sustituir operaciones costosas por otras ms simples. Por
ejemplo: sustituir productos por sumas, eitar la operacin
append, sustituir productos entre ariables inductias e
inariantes de bucle por sumas.
!ompilacion en tiempo de ejecucion
"a compilacin en tiempo de eecucin #tambi$n conocida por sus siglas
inglesas, 1'2, just-in-time%, tambi$n conocida como traduccin
dinmica, es una t$cnica para mejorar el rendimiento de
sistemas de programacin que compilan a bytecode, consistente
en traducir el bytecode a cdigo mquina natio en tiempo de
ejecucin.
&'('RA!)*( +' !*+)&O )(,'R-'+)O..........
3%espus de los anlisis sintcticos y semnticos, algunos compiladores generan una
representacin intermedia e!plicita del programa fuente. /e puede considerar esta
representacin intermedia como un programa para una maquina abstracta. +sta
representacin intermedia debe tener dos propiedades importantes, debe ser fcil de
producir y fcil de traducir al programa obeto.
3+l cdigo intermedi es particularmente utilizado cuando el obeti.o de compilador es
producir cdigo muy eficiente, ya que para 4acerlo as- se requiere una cantidad
importante del anlisis de las propiedades del cdigo obeti.o, y esto se facilita
mediante el uso del cdigo intermedio.
3+l cdigo intermedio tambin puede ser 5til al 4acer que un compilador sea mas
fcilmente re dirigible# si el cdigo intermedio es 4asta cierto punto independiente de la
maquina obeti.o, entonces genera cdigo para una maquina obeti.o diferente solo
requiere .ol.er a escribir el traductor de cdigo intermedio a cdigo obeti.o, y por lo
regular esto es mas fcil que .ol.er a escribir todo un generador de cdigo.
3La representacin intermedia puede tener di.ersas formas, se trata una forma
intermedia llamada ("6%'7, %+ 2)+/ %'))+""',8+/( y el ("6%'7, P(
3+l cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de
las cuales tiene como m!imo tres operadores.
temp$ #9 entareal(:;)
temp* #9 id< 3 temp$
temp< #9 id* = temp*
id$ #9 temp<
+sta representacin intermedia tiene .arias propiedades.
> primera, cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la
asignacin. Por tanto, cuando genera esas instrucciones, el compilador tienes de decidir
el orden en que deben efectuarse las operaciones? la multiplicacin precede a la adiccin
en el programa fuente.
> segunda, el compilador debe generar un nombre temporal para guardar los .alores
calculados por cada instruccin.
> tercera, algunas instrucciones de (tres direcciones( tiene menos de tres operadores, por
eemplo, la primera y la ultima instruccin.

You might also like