Aalborg den 15.04.2003

Kompilerkonstruktion: Liveness Analysis

Der er i de foregående to breve lavet den antagelse, at vi har uendelige mange registre tilgængelig i CPUen. Dette er selvfølgeligt urealistisk, da der er et endeligt antal registre tilgængeligt, et typiske tal er 32. Det liveness analysis bruges til er at finde ud af, hvordan de tilgængelig registre bruges bedst muligt. Med bedst muligt forstås at så mange værdier som muligt, der anvendes i et program, kan hente fra en register og ikke fra hukommelse (RAM). Et program der hente sine værdier fra registre kører meget hurtigere end et program der henter mange værdier fra RAM. Liveness analysis kan altså ses som et første skridt af optimering.

Litteratur

Appel kapitel 10

Læsevejledning

I sektion 10.0 introduceres problemstillingen vha. programmet i Graph 10.1 på side 204. Brug tid på at forstå hvad problemstillingen er. Bemærk at c variablen ikke er initialiseret og at liveness analysis også kan bruges til at finde sådanne programfejl med.

I sektion 10.1 kommer der en hel del opsætning for at kunne lave liveness analysis. Algoritmen for dette vises øverst på side 206. Brug tid på at forstå denne algoritme. Der gives lav prioritet til afsnittet "Representation of Sets" på side 208. På side 210 til 212 kommer der to beviser og et korrollar. I skal forstå indholdet af disse, men ikke hvordan de vises. Bid mærke i de "inference graphs" der beskrives på side 212 til 214, dette bruges i det efterfølgende afsnit.

I sektion 10.2 beskrives hvorledes liveness analysis lave i MiniJava. Der lægges ud med et meget generelt graf og knude interface i program 10.10 på side 214. Disse bruges til at bygge både kontrol-flow grafer og liveness analysis.

Opgaver

(A) Opgave 10.1

Venlig hilsen

Kristian Torp
torp (at) cs (dot) auc (dot) dk