Iterated register coalescing

@article{George1996IteratedRC,
  title={Iterated register coalescing},
  author={Lal George and Andrew W. Appel},
  journal={ACM Trans. Program. Lang. Syst.},
  year={1996},
  volume={18},
  pages={300-324}
}
An important function of any register allocator is to target registers so as to eliminate copy instructions. Graph-coloring register allocation is an elegant approach to this problem. If the source and destination of a move instruction do not interfere, then their nodes can be coalesced in the interference graph. Chaitin's coalescing heuristic could make a graph uncolorable (i.e., introduce spills); Briggs et al. demonstrated a conservative coalescing heuristic that preserves colorability. But… 

Improvements to Conservative and Optimistic Register Coalescing ?

It is shown that, with a more involved conservative strategy, incremental conservative coalescing can be as e ( cid:14) cient as optimistic coalescing, and a more aggressive optimistic approach with a di (cid:11) erent de-coalescing phase is developed.

Register allocation for programs in SSA form

A novel register allocation architecture for programs in SSA-form is presented which simplifies register allocation significantly and a heuristic methods for spilling and coalescing are compared to an optimal method based on integer linear programming.

Optimistic coalescing for heterogeneous register architectures

A modified algorithm for optimal coalescing is developed that helps a register allocator for an embedded processor to better handle such heterogeneity of the register architecture.

Optimal spilling for CISC machines with few registers

This work shows how to optimally split live ranges and optimally use addressing modes, and shows a variant of Park and Moon's optimistic coalescing algorithm that does a very good (though not provably optimal) job of removing the register-register moves.

Register coalescing techniques for heterogeneous register architecture with copy sifting

It is shown that optimistic coalescing is also useful for an embedded processor to better handle such heterogeneity of the register architecture, and a modified algorithm for optimal coalescing that helps a register allocator is developed.

Advanced conservative and optimistic register coalescing

The results show that optimistic strategies do not outperform conservative ones, and incremental conservative coalescing performs even better than the improved de-coalescing scheme and leads to about 15% improvement compared to the state-of-the-art optimistic coalescing.

Copy elimination on data dependence graphs

This work presents an extension of a local recoloring technique called Parallel Copy Motion that performs code motion on data dependence graphs in order to eliminate useless copies and reorder instructions, while at the same time a valid register assignment is preserved.

On the Complexity of Register Coalescing

This paper is devoted to the complexity of the coalescing phase, in particular in the light of recent developments on the SSA form, and almost completely classify the NP-completeness of these problems, discussing also on the structure of the interference graph.

Parallel Copy Elimination on Data Dependence Graphs

This work presents an extension of a local recoloring technique called Parallel Copy Motion that performs code motion on data dependence graphs in order to eliminate useless copies and reorder instructions, while at the same time a valid register assignment is preserved.

Comparing conservative coalescing criteria

It is shown that for coalescing with precolored nodes, the full George criterion is strictly more powerful than the full Briggs criterion, while offering an equally strong safety guarantee, and a number of theorems characterizing the form of safety that each achieves.
...

References

SHOWING 1-10 OF 19 REFERENCES

Improvements to graph coloring register allocation

This paper describes two improvements to Chaitin-style graph coloring register allocators, and provides a detailed description of optimistic coloring and rematerialization, and presents experimental data to show the performance of several versions of the register allocator on a suite of FORTRAN programs.

Register allocation & spilling via graph coloring

This work has discovered how to extend the graph coloring approach so that it naturally solves the spilling problem, and produces better object code and takes much less compile time.

Minimizing register usage penalty at procedure calls

A one-pass inter-procedural register allocation scheme based on processing the procedures in a depth-first traversal of the call graph and a separate technique uses data flow analysis to optimize the placement of the save/restore code for registers within individual procedures.

Efficiently computing static single assignment form and the control dependence graph

New algorithms that efficiently compute static single assignment form and control dependence graph data structures for arbitrary control flow graphs are presented and it is given that all of these data structures are usually linear in the size of the original program.

Callee-save registers in continuation-passing style

This work examines how CPS expresses the saving and restoring of registers in source-language procedure calls, and explains how to express callee-save registers in Continuation-Passing Style, and gives measurements showing the resulting improvement in execution time.

Compiling with Continuations

This book shows how continuation-passing style is used as an intermediate representation to perform optimizations and program transformations to create practical optimizing compilers for modern languages like ML.

A type-based compiler for standard ML

A new type-based middle end and back end for the Standard ML of New Jersey compiler is implemented to support more efficient data representations and gain more experience about type-directed compilation.

An efficient representation for sparse sets

A representation is described that supports constant-time implementations of clear-set, add-member, and delete-member and supports an efficient forall iterator, allowing enumeration of all the members of a set in time proportional to the cardinality of the set.