* Add new operations to register allocator that determine whether
allocation will cause unloading or spilling of registers. Change the
operation `standard-register-reference' to use these operations when
deciding whether or not to refer to a register's home rather than
allocation a new alias for it.
* For an inline-coded procedure (e.g. LET), create an association
between each parameter of that procedure and the FG node that supplies
that parameter's value in the call. This association is used to
optimize the initialization of variables that will be stored in cells:
the cell for such a variable is created during the call rather than
after it. Previously, a stack-allocated parameter was initialized by
pushing its initial value, and then the contents of the stack location
were removed, placed in a new cell, and the cell stored back into the
stack location. Now, the parameter's value is wrapped in a cell
before being pushed.
* RTL output files have been changed to print uninterned symbols by
name.
* The code generated for assignments in value position has been
slightly changed to guarantee the correct order of events.
Previously, the order of the computation of the new value and the
fetching of the old value was indeterminate; now it is guaranteed that
the new value is computed before the old value is fetched.
* The bit-string representation of register sets has been restored.
This has a time penalty for small register sets, but guarantees that
access to the register sets is independent of the number of registers.
Certain programs with large numbers of registers were being
unreasonably penalized by the list-based representation. Also, the
dependencies for the file "rtlbase/regset" were adjusted to reflect
the files that actually refer to it.
* The RTL generated for cached variable assignments has been changed
to precompute the value of the assignment and store it in a pseudo
register. Previously, the code was replicated.
14 files changed: