Split code generation from register allocation