Ensure register:value appears first or last in block.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 30 Dec 2018 21:01:58 +0000 (21:01 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Tue, 13 Aug 2019 14:37:02 +0000 (14:37 +0000)
commit29b733f1ec1cdafae05e9b99bb11a7caa7b7ac01
tree6df7e58bc39b2e66de8f7f84730cff6621c3dc30
parent836e0a4bb317d7244c99b4dba135bd69511f22ef
Ensure register:value appears first or last in block.

Either it is the first register referenced, or the last register
assigned.  This will enable us to use a machine register that is
normally available for register allocation, without having to worry
that it may be an alias for a live pseudo-register.

- In continuations that receive a value through register:value,
  create a temporary register and make the first instruction be an
  assignment of register:value to the temporary register, before we
  the pop-extra.

  The RTL optimizer avoids propagating this alias so the assignment
  will stay in place, but later on, the LAP generator will take
  advantage of the alias to avoid generating additional unnecessary
  code.

- In returns that store a value in register:value, create a temporary
  register and assign it where we used to assign to register:value,
  and then store the temporary in register:value as the very last
  instruction before pop-return after any frame-popping which might
  involve temporaries.
src/compiler/rtlgen/opncod.scm
src/compiler/rtlgen/rgretn.scm
src/compiler/rtlgen/rtlgen.scm