The register allocator iterates the LIR which has virtual register and annotates them with actual register or stack positions.
The LIRs are annotated with virtual registers and constraints on how these get used. It is the task of the Register Allocator to satisfy these constraints while using the restriction of the current platform. Making sure that every value of a definition can be correctly read at all uses and this as optimally as possible. To read more about register allocation click here.
IonMonkey is setup to be able to work have multiple register allocators. Currently the 'backtracking allocator' is enabled by default: