Allow careful use of available machine registers in RTL.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 30 Dec 2018 21:01:00 +0000 (21:01 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Tue, 13 Aug 2019 14:37:02 +0000 (14:37 +0000)
commit1bcf72d6b57c87e750c14554cd1642a2a5488020
tree1cbfdcc96e6ee5a80e0d65328f67924abf7785bb
parent29b733f1ec1cdafae05e9b99bb11a7caa7b7ac01
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.
src/compiler/back/lapgn1.scm
src/compiler/back/lapgn2.scm
src/compiler/back/regmap.scm
src/compiler/machines/i386/rulflo.scm
src/compiler/rtlopt/rcompr.scm
src/compiler/rtlopt/rcse2.scm