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.