> The best assignment is NP-hard to find, so all practical allocators use heuristics.
That said if you do the register allocation while the program is still in SSA form, it becomes polynomial (interference graph is a chordal graph).
https://compilers.cs.uni-saarland.de/projects/ssara/
Not quite, SSA form makes only the colouring pass polynomial time, optimal choice of spilling and coalescing is still NP-complete. cf. https://hal-lara.archives-ouvertes.fr/hal-02102286v1/documen...
This is a great high level overview of some the techniques and problems encountered with developing a register allocator!
LLVM 's FastRegAlloc also uses linear scan.
> The best assignment is NP-hard to find, so all practical allocators use heuristics.
That said if you do the register allocation while the program is still in SSA form, it becomes polynomial (interference graph is a chordal graph).
https://compilers.cs.uni-saarland.de/projects/ssara/
Not quite, SSA form makes only the colouring pass polynomial time, optimal choice of spilling and coalescing is still NP-complete. cf. https://hal-lara.archives-ouvertes.fr/hal-02102286v1/documen...
This is a great high level overview of some the techniques and problems encountered with developing a register allocator!
LLVM 's FastRegAlloc also uses linear scan.