Better register allocation
The compiler we currently study in the last part of the Compilers course allocates registers greedily during the instruction selection phase. Even on the ARM, this can lead to unnecessary register-to-register moves, but a variant of the compiler for AMD64 suffers from the problem more severely.
The goal of this project is to implement a better register allocation scheme that operates as a separate pass after instruction selection. The pass will work from an explicit representation of the instruction sequence without assigned registers, and will be able to take into account move instructions marked in the instruction sequence, wherever possible assigning the same register to both the source and target of the move, so that the instruction itself can be eliminated.
Source material for the project can be found in the book, A retargetable C compiler by Fraser and Hanson, and in articles referenced in that book.
The 64-bit variant of the Intel architecture used in PCs. So called because the instruction set extensions to support 64 bits was first introduced on chips designed by Advanced Micro Devices. Also known as x86_64.