Live-Range Unsplitting for Faster Optimal Coalescing (extended version)
Résumé
Register allocation is often a two-phase approach: spilling of registers to
memory, followed by coalescing of registers. Extreme live-range splitting (\ie
live-range splitting after each statement) enables optimal solutions based on
ILP, for both spilling and coalescing. However, while the solutions are easily
found for spilling, for coalescing they are more elusive. This difficulty stems
from the huge size of interference graphs resulting from live-range splitting.
This report focuses on optimal coalescing in the context of extreme live-range
splitting. We present some theoretical properties that give rise to an
algorithm for reducing interference graphs, while preserving optimality. This
reduction consists mainly in finding and removing useless splitting points. It
is followed by a graph decomposition based on clique separators. The last optimization
consists in two preprocessing rules. Any coalescing technique can be applied
after these optimizations.
Our optimizations have been tested on a standard benchmark, the optimal coalescing
challenge. For this benchmark, the cutting-plane algorithm for optimal
coalescing (the only optimal algorithm for coalescing) runs 300 times faster
when combined with our optimizations. Moreover, we provide all the solutions of the
optimal coalescing challenge, including the 3 instances that were previously unsolved.