Optimal spilling for CISC machines with few registers

@inproceedings{Appel2001OptimalSF,
  title={Optimal spilling for CISC machines with few registers},
  author={Andrew W. Appel and Lal George},
  booktitle={PLDI '01},
  year={2001}
}
Many graph-coloring register-allocation algorithms don't work well for machines with few registers. Heuristics for live-range splitting are complex or suboptimal; heuristics for register assignment rarely factor the presence of fancy addressing modes; these problems are more severe the fewer registers there are to work with. We show how to optimally split live ranges and optimally use addressing modes, where the optimality condition measures dynamically weighted loads and stores but not… 

Figures from this paper

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.

A faster optimal register allocator

This paper presents an IP-based optimal register allocator which is much faster than previous work, built into the Gnu C Compiler and evaluated experimentally using the SPEC92INT benchmarks.

Graph-coloring and treescan register allocation using repairing

A decoupled approach that first lowers the register pressure by spilling variables, and then performs live ranges splitting/coalescing /coloring in a separate phase enables the design of simpler, cleaner, and more efficient register allocators.

Register Allocation Algorithms

This paper is aimed to provide a general survey on present register allocation algorithms and analyze the main perplexing issues and their possible solutions.

A progressive register allocator for irregular architectures

  • D. KoesS. Goldstein
  • Computer Science
    International Symposium on Code Generation and Optimization
  • 2005
This paper presents a progressive register allocator which uses a multi-commodity network flow model to elegantly represent the intricacies of irregular architectures and evaluates the allocator as a substitute for gcc 's local register allocation pass.

Live-range Unsplitting for Faster Optimal Coalescing ( extended version )

This report provides all the solutions of the optimal coalescing challenge, including the 3 instances that were previously unsolved, and presents some theoretical properties that give rise to an algorithm for reducing interference graphs, while preserving optimality.

A decoupled non-SSA global register allocation using bipartite liveness graphs

A decoupled non-SSA--based global register allocation algorithm for dynamic compilation is proposed by introducing a Bipartite Liveness Graph (BLG)-based register allocation algorithms that models the spilling phase as an optimization problem on the BLG itself and the assignment phase as a separate optimization problem.

Title omitted for double-blind reasons

This paper presents a new back-end optimization that is to move copy instructions in a register-allocated code from a program point, possibly an edge, to another and permutes register assignments so that a copy can "traverse" all instructions of a basic block, except those with conflicting register constraints.

Parallel copy motion

Experiments show that an SSA-based register allocator can be applied broadly now, even for procedures with non-splittable edges: while those procedures could not be compiled before, with parallel copy motion, all moves could be pushed out of such edges.

Decoupled graph-coloring register allocation with hierarchical aliasing

The semi-elementary form is introduced, a program representation that brings decoupled register allocation to architectures with register aliasing, and reduces the number of copies that traditional allocators insert into assembly programs.
...

References

SHOWING 1-10 OF 28 REFERENCES

Iterated register coalescing

This work shows how to interleave coloring reductions with Briggs's coalescing heuristic, leading to an algorithm that is safe but much more aggressive.

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.

Optimal and near-optimal global register allocations using 0–1 integer programming

This paper presents a fundamentally new approach to global register allocation that optimally allocates registers and optimally places spill code, significantly decreasing spill code overhead

Global Register Allocation Based on Graph Fusion

This paper presents a new coloring-based global register allocation algorithm that addresses all three issues in an integrated way: the algorithm starts with an interference graph for each region of the program, where a region can be a basic block, a loop nest, a superblock, a trace, or another combination of basic blocks.

Integrated Instruction Scheduling and Register Allocation Techniques

It is demonstrated that for integrated algorithms, register reuse dags are more effective than either on-the-fly computation of register pressure or interference graphs and that live range splitting is moreeffective than live range spilling.

The priority-based coloring approach to register allocation

The detailed algorithms for a priority-based coloring approach are presented and are contrasted with the basic graph-coloring algorithm and various extensions to the basic algorithms are also presented.

Precise register allocation for irregular architectures

  • Timothy KongK. Wilken
  • Computer Science
    Proceedings. 31st Annual ACM/IEEE International Symposium on Microarchitecture
  • 1998
Experimental results suggest that IP register allocation is well suited for irregular-register architectures, and extensions to the prior work are proposed that precisely model register irregularities including combined source/destination specifiers, memory operands, and variations in the cost of register usage.

Register allocation in the SPUR Lisp compiler

The allocator successfully assigned most temporaries and local variables to registers in a wide variety of functions and its execution cost is moderate.

Register allocation via graph coloring

The basic idea behind register allocation via graph coloring is to reduce register spillage by globally assigning variables to registers across an entire program module via the five basic steps