Post Register Allocation Spill Code Optimization
A highly optimized register allocator should provide an efficient
placement of save/restore code for procedures that contain calls.
This paper presents a new approach to placing callee-saved save and
that generalizes Chow's shrink-wrapping technique.
An efficient, profile-guided,
hierarchical spill code placement algorithm is used to analyze the
structure of a procedure
to calculate the minimum dynamic execution count locations
to place callee-saved save and restore code. The algorithm
is implemented in the Gnu Compiler Collection and has been tested on the
Integer Benchmark suite. Results show that the technique
reduces the number of dynamic load and store instructions by
15% compared to saving and restoring at procedure entry and exit while
Chow's shrink-wrapping technique reduces dynamic load and store instructions
by only 1% compared to saving and restoring at procedure entry and exit.
The dynamic number of callee-saved save and restore instructions inserted
with this new approach is never greater than the number produced by
Chow's shrink-wrapping technique or the placement at procedure entry and exit.