// ZeroExtend32BitOutputs applies the rule that "32-bit operands generate a // 32-bit result, zero-extended to a 64-bit result in the destination // general-purpose register" (Intel Software Developer’s Manual, Volume 1, // 3.4.1.1). func ZeroExtend32BitOutputs(i *ir.Instruction) error { … } // Liveness computes register liveness. func Liveness(fn *ir.Function) error { … } // AllocateRegisters performs register allocation. func AllocateRegisters(fn *ir.Function) error { … } // BindRegisters applies the result of register allocation, replacing all virtual registers with their assigned physical registers. func BindRegisters(fn *ir.Function) error { … } // VerifyAllocation performs sanity checks following register allocation. func VerifyAllocation(fn *ir.Function) error { … } // EnsureBasePointerCalleeSaved ensures that the base pointer register will be // saved and restored if it has been clobbered by the function. func EnsureBasePointerCalleeSaved(fn *ir.Function) error { … }