int i; float x; x+i;
Dado el árbol de la expresión PLUS(VAR, VAR)
,
el analizador de tipos introducirá un nodo intermedio
INT2FLOAT
para indicar la necesidad de la conversión
y especificará el tipo de PLUS
que se usa:
PLUSFLOAT(VAR, INT2FLOAT(VAR))
.
Una transformación árbol de optimización que entra en este punto es la conversión de tipo en tiempo de compilación de las constantes. Por ejemplo, dados los dos programas:
float X[N]; int i; for(i=0; i<N; i++) { X[i] = 1; } |
float X[N]; int i; for(i=0; i<N; i++) { X[i] = 1.0; } |
los efectos sobre el rendimiento serán lamentables
si el compilador no realiza la conversión de la constante entera 1
del programa de la izquierda en tiempo de compilación sino que la conversión
se deja a una subrutina de conversión que es llamada en tiempo de ejecución.
En tal caso se obtendrían rendimientos completamente diferentes para los
programas en la izquierda y en la derecha.