Allow careful use of available machine registers in RTL.
This will enable us to put fixed machine registers such as the value
register carefully into the RTL even if they are ordinarily available
as pseudo-register aliases for machine register allocation.
- CGEN-RINST calls TARGET-MACHINE-REGISTER! if the target of an RTL
instruction is a machine register that is ordinarily available for
register allocation.
- REGISTER-ALIAS declines to return any aliases reserved by
TARGET-MACHINE-REGISTER!, until...
- DELETE-DEAD-REGISTERS! makes the target machine registers available
again for REGISTER-ALIAS so that they can be chosen as targets.
(However, they still won't be chosen as temporaries.)
- MOVE-TO-ALIAS-REGISTER! -- which may be used only after all other
source registers have been chosen -- also allows the machine target
to be used as a source alias in order to avoid unnecessary register
motion.
- Don't propagate RTL references to available machine registers in
common subexpression elimination or in code compression.
Since the machine register might be allocated as an alias for another
register, it can't be moved around. The RTL generator ensures these
references appear only at the beginning or end of a block where the
machine register cannot be an alias for any live pseudo-register.