Compiladores Asignacin de Registros Resumen Qu es asignacin

  • Slides: 104
Download presentation
Compiladores Asignación de Registros

Compiladores Asignación de Registros

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 2

Asignación de Registros • Usar de forma óptima uno de los recursos más críticos

Asignación de Registros • Usar de forma óptima uno de los recursos más críticos del procesador • Asignación de variables (hasta ahora en memoria) a registros de hardware – Pseudo registros: número ilimitado de registros virtuales, es espacio se asigna normalmente en el stack – Registros reales: conjunto de registros disponibles en el procesador 3

Importancia de Asignación de Registros • Sólo hay un número finito y pequeño de

Importancia de Asignación de Registros • Sólo hay un número finito y pequeño de registros disponibles – Usualmente 32 registros enteros y 32 de punto flotante – Algunos de esos registros tienen usos fijos (r 0, ra, sp, fp) • El acceso a registros es mucho más rápido que el acceso a memoria – La diferencia es mucho más grande en procesadores modernos • Menos instrucciones cuándo usamos registros – La mayoría de instrucciones son registro-a-registro – Se necesitan instrucciones adicionales para llevar los datos de memoria a un registro 4

Importancia de Asignación de Registros • Permite otras optimizaciones – CSE asume que las

Importancia de Asignación de Registros • Permite otras optimizaciones – CSE asume que las variables están en registros • Asignación de registros tiene un impacto directo en el rendimiento – Afecta casi todo statement del programa – Elimina instrucciones caras de memoria – El # de instrucciones baja debido a la manipulación directa de registros (no hay necesidad de instrucciones load/store) – ¡Es probablemente la optimización que tiene el mayor impacto! 5

¿Qué se puede poner en un registro? • Variables escalares • Constantes grandes •

¿Qué se puede poner en un registro? • Variables escalares • Constantes grandes • Algunos elementos de arreglos y campos de records • El conjunto de registros depende del tipo de datos – floating-point en registros fp – fixed-point en registros enteros 6

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 7

Un asignador de registros simple “siempre o nunca” • Estimar el beneficio de poner

Un asignador de registros simple “siempre o nunca” • Estimar el beneficio de poner cada variable en un registro para un bloque básico en particular – costo(var, bb) = número de usos y definiciones de la variable. • Estimar el beneficio general – Costo. Total(var) = costo(var, bb)*freq(bb) para todo bb • Assignar las R variables de mayor beneficio a registros 8

Ejemplo def z use z def x def y use x use y use

Ejemplo def z use z def x def y use x use y use z 9

Ejemplo • Costo para bloques básicos – – – – – costo(x, bb 1)

Ejemplo • Costo para bloques básicos – – – – – costo(x, bb 1) = 0 costo(x, bb 2) = 3 costo(x, bb 3) = 0 costo(y, bb 1) = 0 costo(y, bb 2) = 2 costo(y, bb 3) = 0 costo(z, bb 1) = 2 costo(z, bb 2) = 0 costo(z, bb 3) = 1 def z use z def x def y use x use y use z 10

Ejemplo • Costo para bloques básicos – costo(x, bb 1) = 0 • Frecuencia

Ejemplo • Costo para bloques básicos – costo(x, bb 1) = 0 • Frecuencia – – – – costo(x, bb 2) = 3 costo(x, bb 3) = 0 costo(y, bb 1) = 0 costo(y, bb 2) = 2 costo(y, bb 3) = 0 costo(z, bb 1) = 2 costo(z, bb 2) = 0 costo(z, bb 3) = 1 – freq(bb 1) = 1 – freq(bb 2) = 100 – freq(bb 3) = 1 def z use z def x def y use x use y use z 11

Ejemplo • Costo para bloques básicos – costo(x, bb 1) = 0 • Frecuencia

Ejemplo • Costo para bloques básicos – costo(x, bb 1) = 0 • Frecuencia – – – – costo(x, bb 2) = 3 costo(x, bb 3) = 0 costo(y, bb 1) = 0 costo(y, bb 2) = 2 costo(y, bb 3) = 0 costo(z, bb 1) = 2 costo(z, bb 2) = 0 costo(z, bb 3) = 1 – freq(bb 1) = 1 – freq(bb 2) = 100 – freq(bb 3) = 1 • Costo total def z use z def x def y use x use y use z – Costo. Total(x) = 0*1 + 3*100 + 0*1 = 300 – Costo. Total(y) = 0*1 + 2*100 + 0*1 = 200 – Costo. Total(z) = 3*1 + 0*100 + 1*1 = 4 12

Ejemplo • Costo total def z use z – Costo. Total(x) = 300 –

Ejemplo • Costo total def z use z – Costo. Total(x) = 300 – Costo. Total(y) = 200 – Costo. Total(z) = 4 • Asumimos que hay 2 registros disponibles – Asignamos x e y a registros def x def y use x use y use z 13

Problema 1 • Asignación es igual que antes – x e y van en

Problema 1 • Asignación es igual que antes – x e y van en registros, z no • Las variables ocupan el registro incluso cuándo no lo necesitan • Todas (x, y, & z) pueden tener registros def z use z def x def y use x use y def z use z 14

Problema 1 xyz • Asignación es igual que antes – x e y van

Problema 1 xyz • Asignación es igual que antes – x e y van en registros, z no • Las variables ocupan el registro incluso cuándo no lo necesitan • Todas (x, y, & z) pueden tener registros def z use z def x def y use x use y def z use z 15

Problema 1 xyz • Asignación es igual que antes – x e y van

Problema 1 xyz • Asignación es igual que antes – x e y van en registros, z no • Las variables ocupan el registro incluso cuándo no lo necesitan • Todas (x, y, & z) pueden tener registros def z use z r 1 r 2 def x r 1 def y use x use y r 1 def z use z 16

Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros

Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros 17

Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros

Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros { int x; … } { int y; … } 18

Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros

Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros { int x; … } { int y; … } • x e y pueden usar el mismo registro 19

Problema 3 • Diferentes fases del programa se comportan de distinta forma def &

Problema 3 • Diferentes fases del programa se comportan de distinta forma def & use x use & use y • Un registro disponible use & def x – registro para x en el primer loop – registro para y en el segundo loop – no nos importa mucho el resto • Tenemos que “derramar” (spill) – todo o nada no va a funcionar 20 use & def y use x use y

Lo que un asignador inteligente debe hacer • Determinar rangos para cada variable en

Lo que un asignador inteligente debe hacer • Determinar rangos para cada variable en los que haya beneficio al usar un registro (webs) • Determinar cuáles de estos rangos se traslapan (interference) • Encontrar los beneficios de mantener cada variable en un registro (spill cost) • Decidir cuáles webs obtienen un registro (allocation) • Dividir webs si es necesario (spilling and splitting) • Asignar registros reales a webs (assignment) • Generar código incluyendo spills (code generation) 21

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 22

Webs • Lo que debe ser memorizado es el valor • dividir accesos a

Webs • Lo que debe ser memorizado es el valor • dividir accesos a variables en múltiples webs – Todas las definiciones que llegan a un uso en mismo web – Todos los usos que usan el valor definido en mismo web – Dividir la variable en rangos de vida • Implementación: Usar cadenas DU – Una cadena du conecta la definición a todos los usos que alcanza esta definición – Un web combina las cadenas du que contienen un uso común 23

Ejemplo def y def x def y use x use y def x use

Ejemplo def y def x def y use x use y def x use y use x def x use x 24

Ejemplo def y def x def y use x use y def x use

Ejemplo def y def x def y use x use y def x use y use x def x use x 25

Ejemplo def y def x def y use x use y def x use

Ejemplo def y def x def y use x use y def x use y use x def x use x 26

Ejemplo def y def x def y use x use y def x use

Ejemplo def y def x def y use x use y def x use y use x def x use x 27

Ejemplo def y def x def y use x use y def x use

Ejemplo def y def x def y use x use y def x use y use x def x use x 28

Ejemplo def y def x def y use x use y def x use

Ejemplo def y def x def y use x use y def x use y use x def x use x 29

Ejemplo def y def x def y use x use y def x use

Ejemplo def y def x def y use x use y def x use y use x def x use x 30

Ejemplo def y def x def y use x use y s 3 def

Ejemplo def y def x def y use x use y s 3 def x use y s 2 use x def x s 4 use x 31 s 1

Webs • En dos webs de la misma variable: – Ningún uso en un

Webs • En dos webs de la misma variable: – Ningún uso en un web va a usar nunca un valor definido por el otro web – Por lo tanto, ningún valor necesita ser llevado entre webs – Cada web puede ser tratada independientemente • Web es usado como la unidad de asignación de registros – Si se le asigna un registro a un web, todos los usos y definiciones dentro del web no necesitan load ni store de memoria – Diferentes webs pueden ser asignados a diferentes registros o uno a un registro y otro a memoria 32

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 33

Interferencia • Dos webs interfieren si el rango de vida de dos webs se

Interferencia • Dos webs interfieren si el rango de vida de dos webs se traslapa en el tiempo • Webs que no se interfieren pueden ser asignados al mismo registro 34

Ejemplo def y def x def y use x use y s 3 def

Ejemplo def y def x def y use x use y s 3 def x use y s 2 use x def x s 4 use x 35 s 1

Ejemplo def y def x def y use x use y s 3 def

Ejemplo def y def x def y use x use y s 3 def x use y s 2 use x def x s 4 use x 36 s 1

Ejemplo Webs s 1 y s 2 interfieren Webs s 2 y s 3

Ejemplo Webs s 1 y s 2 interfieren Webs s 2 y s 3 interfieren def x def y use x use y s 3 def y def x use y s 2 use x def x s 4 use x 37 s 1

Grafo de Interferencia • Representación de webs y sus interferencias – Nodos son webs

Grafo de Interferencia • Representación de webs y sus interferencias – Nodos son webs – Existe una arista entre nodos si estos interfieren 38 s 1 s 2 s 3 s 4

Ejemplo def y def x def y use x use y s 3 s

Ejemplo def y def x def y use x use y s 3 s 1 def x use y s 2 use x def x s 1 s 2 s 3 s 4 use x 39

Ejemplo Webs s 1 y s 2 interfieren Webs s 2 y s 3

Ejemplo Webs s 1 y s 2 interfieren Webs s 2 y s 3 interfieren def x def y use x use y s 3 def y s 1 def x use y s 2 use x def x s 1 s 2 s 3 s 4 use x 40

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 41

Asignación de Registros usando Graph Coloring • A cada web se le asigna un

Asignación de Registros usando Graph Coloring • A cada web se le asigna un registro – cada nodo obtiene un registro (color) • Si dos webs interfieren no pueden usar el mismo registro – si dos nodos tienen una arista entre ellos, no pueden tener el mismo color 42 s 1 s 2 s 3 s 4

Graph Coloring • ¿Cuál es el número mínimo de colores con el que se

Graph Coloring • ¿Cuál es el número mínimo de colores con el que se pueden colorerar los nodos del grafo tal que cualesquiera nodos conectados mediante una arista no tengan el mismo color? • Problema clásico en teoría de grafos 43

Ejemplo de Graph Coloring 44

Ejemplo de Graph Coloring 44

Ejemplo de Graph Coloring • 1 Color 45

Ejemplo de Graph Coloring • 1 Color 45

Ejemplo de Graph Coloring 46

Ejemplo de Graph Coloring 46

Ejemplo de Graph Coloring • 2 Colores 47

Ejemplo de Graph Coloring • 2 Colores 47

Ejemplo de Graph Coloring 48

Ejemplo de Graph Coloring 48

Ejemplo de Graph Coloring • Todavía 2 Colores 49

Ejemplo de Graph Coloring • Todavía 2 Colores 49

Ejemplo de Graph Coloring 50

Ejemplo de Graph Coloring 50

Ejemplo de Graph Coloring • 3 Colores 51

Ejemplo de Graph Coloring • 3 Colores 51

Heuristicas para Colorear Registros • Coloreando un grafo con N colores • Si grado

Heuristicas para Colorear Registros • Coloreando un grafo con N colores • Si grado < N (grado de un nodo = # de aristas) – Nodo siempre puede ser coloreado – Luego de colorear el resto de los nodos va a quedar al menos un color para colorear el nodo actual • Si grado >= N – Puede que todavía sea coloreable con N colores – Solución exacta es NP complete 52

Heuristicas para Colorear Registros • Eliminar nodos que tengan grado < N – meter

Heuristicas para Colorear Registros • Eliminar nodos que tengan grado < N – meter los nodos eliminados a un stack • Si todos los nodos tienen grado >= N – encontrar un nodo para “spill” (no hay color para ese nodo) – eliminar ese nodo • Cuando esté vacío, comenzamos a colorerar – sacar un nodo del stack – asignarle un color que sea diferente de sus nodos conectados (como el grado < N, debe existir un color) 53

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 54

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 55

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 56

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4 s 3 s 4 57

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2 s 4 s 3 s 4 58

Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3

Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3 s 4 59

Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3

Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3 s 4 60

Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3

Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3 s 4 61

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2 s 4 s 3 s 4 62

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2 s 4 s 3 s 4 63

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4 s 3 s 4 64

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4 s 3 s 4 65

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 66

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 67

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 68

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4

Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 69

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 70

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 71

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 72

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 73

Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s 0 s 3 s 4 74

Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s 0 s 3 s 4 75

Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s 0 s 3 s 4 76

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 77

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 78

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 79

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 80

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 81

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s

Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 82

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 83

Spilling y Splitting • Cuándo el grafo no es N-coloreable • Seleccionamos un web

Spilling y Splitting • Cuándo el grafo no es N-coloreable • Seleccionamos un web para “spill” – Encontrar el web de menor costo de spill – Los usos y definiciones de ese web son leidos y escritos a memoria • Dividir el web (Split) – Dividir un web en múltiples webs para que haya menos interferencias en el grafo volviendolo N-coloreable – Derramar (spill) el valor a memoria y cargarlo de regreso en los puntos donde se dividió el web 84

Ejemplo de Splitting xyz def z use z def x def y use x

Ejemplo de Splitting xyz def z use z def x def y use x use y use z 85

Ejemplo de Splitting xyz def z use z def x def y use x

Ejemplo de Splitting xyz def z use z def x def y use x use y x y z use z 86

Ejemplo de Splitting xyz def z use z def x def y use x

Ejemplo de Splitting xyz def z use z def x def y use x use y x y z use z 87 ¿ 2 -coloreable?

Ejemplo de Splitting xyz def z use z def x def y use x

Ejemplo de Splitting xyz def z use z def x def y use x use y x y z use z ¿ 2 -coloreable? ¡No! 88

Ejemplo de Splitting xyz def z use z def x def y use x

Ejemplo de Splitting xyz def z use z def x def y use x use y use z 89

Ejemplo de Splitting xyz def z use z def x def y use x

Ejemplo de Splitting xyz def z use z def x def y use x use y use z 90

Ejemplo de Splitting xyz def z use z z 1 def x def y

Ejemplo de Splitting xyz def z use z z 1 def x def y use x use y x y z 2 use z 91

Ejemplo de Splitting xyz def z use z z 1 def x def y

Ejemplo de Splitting xyz def z use z z 1 def x def y use x use y x y z 2 use z 92 ¿ 2 -coloreable?

Ejemplo de Splitting xyz def z use z z 1 def x def y

Ejemplo de Splitting xyz def z use z z 1 def x def y use x use y x y z 2 use z ¿ 2 -coloreable? ¡Sí! 93

Ejemplo de Splitting xyz def z use z def x def y use x

Ejemplo de Splitting xyz def z use z def x def y use x use y r 1 r 2 r 1 x r 1 use z z 1 y z 2 ¿ 2 -coloreable? ¡Sí! 94

Ejemplo de Splitting def z use z str z def x def y use

Ejemplo de Splitting def z use z str z def x def y use x use y xyz r 1 r 2 r 1 x r 1 ld z use z 95 z 1 y z 2 ¿ 2 -coloreable? ¡Sí!

Splitting • Identificar un punto en el programa donde el grafo no es R-coloreable

Splitting • Identificar un punto en el programa donde el grafo no es R-coloreable (punto donde # de webs > N) – Elegir un web que no es usado en el bloque envolvente más grande al rededor de ese punto en el programa – Dividir ese web (split) – Rehacer el grafo de interferencia – Tratar de re colorear el grafo 96

Costo y beneficio de splitting • Costo de dividir un nodo – Proporcional al

Costo y beneficio de splitting • Costo de dividir un nodo – Proporcional al número de veces que la arista dividida tenga que ser cruzada dinámicamente – Estimable mediante anidamiento de loops • Beneficios – Aumenta la colorabilidad de los nodos con los que interfiere el web que dividimos – Puede aproximarse por su grado en el grafo de interferencia • Heuristica ambiciosa – Elegir el rango de vida con la mayor razón beneficio/costo para dividir 97

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs

Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 98

Otras Optimizaciones • • Register coalescing Register targeting (pre-coloring) Presplitting of webs Interprocedural register

Otras Optimizaciones • • Register coalescing Register targeting (pre-coloring) Presplitting of webs Interprocedural register allocation 99

Register Coalescing • Encontrar instrucciones de copia de registros como sj = si •

Register Coalescing • Encontrar instrucciones de copia de registros como sj = si • Si sj y si no interfieren, combinar sus webs • Pros – similar a copy propagation – reduce el número de instrucciones • Cons – puede incrementar el grado del nodo combinado – un grafo coloreable se puede volver incoloreable 100

Register Targeting (pre-coloring) • Algunas variables tienen que estar en registros especiales en momentos

Register Targeting (pre-coloring) • Algunas variables tienen que estar en registros especiales en momentos determinados – primeros 4 argumentos de una función – valor de retorno • Pre-colorear esos webs y asociarlos al registro adecuado • Elimina instrucciones de copia innecesarias 101

Pre-splitting de webs • Algunos rangos de vida tienen regiones “muertas” muy grandes –

Pre-splitting de webs • Algunos rangos de vida tienen regiones “muertas” muy grandes – Región grande donde la variable no es usada • Romper los rangos de vida – hay que pagar un pequeño costo de spilling – pero el grafo va ser mucho más fácil de colorear • Podemos encontrar localidades estratégicas para romperlos – en un punto de llamada (hay que hacer spill de todas formas) – al rededor de un loop grande (reservar registros para valores usados dentro del loop) 102

Interprocedural register allocation • Guardar registros en llamdas a procedimientos es caro – especialmente

Interprocedural register allocation • Guardar registros en llamdas a procedimientos es caro – especialmente para programas con muchas funciones pequeñas • Convenciones de llamado son muy generales e ineficientes • Customizar las convenciones de llamado por función mediante asignación de registros interprocedural 103

Lecturas • Ballena – Capítulo 16 104

Lecturas • Ballena – Capítulo 16 104