NVPTX, SPIRV, and WebAssembly pass virtual registers to this function since they don't perform register allocation. We need to use Register to avoid a virtual register being converted to MCRegister by the caller.
To-do ----- * Instruction encodings * Tailcalls * Investigate loop alignment * Add builtins