ToMachine is a translation pass from the RSSA IntermediateLanguage to the Machine IntermediateLanguage.
Description
It uses AllocateVariables, Chunkify, and ParallelMove.
Implementation
Details and Notes
Because the MLton runtime system is shared by all codegens, it is most convenient to decide on stack layout before any codegen takes over. In particular, we compute all the stack frame info for each RSSA function, including stack size, garbage collector masks for each frame, etc. To do so, the Machine IntermediateLanguage imagines an abstract machine with an infinite number of temporaries of every size. A liveness analysis determines, for each variable, whether or not it is live across a point where the runtime system might take over (for example, any garbage collection point) or a non-tail call to another RSSA function. Those that are live go on the stack, while those that aren’t live go into temporaries. From this information, we know all we need to about each stack frame. On the downside, nothing further on is allowed to change this stack info; it is set in stone.