Vhod: zaporedje strojnih ukazov z začasnimi spremenljivkami + interferenčni graf spemenljivk
Izhod: zaporedje strojnih ukazov z registri
Dodeljevanje registrov ~ barvanje interferenčnega grafa
Faze dodeljevanja registrov (za registrov):
- Build: Gradnja interferenčnega grafa
Neortogonalni registri: “umetna” vozlišča registrov, spremenljivke povežemo s prepovedanimi (da ne morejo biti dodeljena vanje) - Simplify: Umik ne-MOVE vozlišč z < sosedi na sklad (graf čim bolj zmanjšujemo)
- Coalesce: Združitev MOVE vozlišča v en register na sklad (če obstaja / če možno) simplify
- Freeze: Izbris izbrane MOVE povezave (če obstaja) simplify
- Potential spill: Umik vozlišča (npr. z največ povezavami) na sklad z označbo za “morebitni preliv” (skupaj z vozliščem izginejo tudi njegove povezave drugim vozliščem se stopnje znižajo kaka vozlišča imajo lahko spet < sosedov) simplify
- Dodeljevanje registrov: Premik vozlišč s sklada na graf, neoznačena vozlišča se zagotovo da pobarvati, označena le mogoče:
- Vozlišče se da pobarvati barvanje
- Vozlišča se ne da pobarvati barvanje z naključno/transparentno barvo in umestitev med “dejanske prelive”
- popravek strojne kode: shranitev spremenljivke v klicnem zapisu namesto v registru
- ponovitev vseh faz analize aktivnosti registrov in dodeljevanja registrov
Algoritmi združevanja MOVE ukazov
Osnova
Ne upoštevamo MOVE ukazov
Briggs
Vozlišči in (povezani v MOVE ukazu) lahko združimo v , če velja:
- stopnja <
Po združitvi se bo še zmeraj zagotovo dalo pobarvati
George
Vozlišči in (povezani v MOVE ukazu) lahko združimo v , če za vsakega soseda od velja bodisi:
- stopnja < (ali)
- je tudi sosed
Dokaz s primerom
Cel graf , … sosedi vozlišča s stopnjo < :
takoj odstranimo (stopnje < ) ostane graf
- Če in ne združimo: se lahko pobarva s barvami
- Če in združimo: se tudi lahko pobarva s barvami


