There is no commentSelect some text and then click Comment, or simply add a comment to this page from below to start a discussion.
Revisions CCMP2
Middle End
Traduction vers le langage Tree
Lineariser le code
etape de linearisation: casser l'arborescence
faire remonter les expressions et instructions qui sont imbriquees jusqu'a la racine
on doit conserver la semantique de notre programme
si on remonte quelque chose trop haut il peut ecraser d'autres instructions
Traduction vers des Block de Bases
commence par un label, fini par un JUMP ou CJUMP
necessaire car: les microprocesseurs actuels n'ont pas des if then else, ils connaissent les CJUMP, condition, label
on tronconne le code
si on a un block qui commence sans labe => on rajoute un label
si on a un block qui fini sans jump => on rajoute un jump
permet d'avoir des BB qui peuvent etre "bouges" a volonte
Back End
Finir la linearisation
Choisir un microprocesseur et regarder son jeu d'instruction
Instruction Selection pour trouver la meilleure instruction en supposant qu'on a un nombre de registres illimite
Couvrir l'AST par le jeu d'instructions
code non generique => diverge en fonction des microprocesseurs
Analyse de vivacite
construire un controle flow graph
calculer live in et live out (duree de vie de nos variables)
deduit le graphe d'interference => variable a et b vivent simultanement (peuvent pas etre dans le meme registre)
Allocation des registres
input : AST linearise + graphe d'interference
on va travailler sur le graphe d'interference
une fois le registre pour une variable trouve on va propager les modification dans l'AST (a = registre 1, b = registre 2, etc.)
probleme quand on decremente le nombre de registres
mettre des variables dans le meme registre
si pas assez de registres: faire un spill, mettre des variables sur la pile
Faire une coloration
Si on n'y arrive pas: faire un spill
Recacul graphe de flow control
Reproduire du in et out
Reproduire un graphe d'interference
Partiel
On reprend le code et on regarde toutes les utilisations de a. Une premiere idee serait de faire des utilisations directement avec le stack pointer. Le probleme c'est que les architectures actuelles n'ont pas un double acces de memoire