Spill code minimization via interference region spilling

  title={Spill code minimization via interference region spilling},
  author={Peter Bergner and Peter Dahl and David R. Engebretsen and Matthew T. O'Keefe},
  booktitle={ACM-SIGPLAN Symposium on Programming Language Design and Implementation},
Many optimizing compilers perform global register allocation using a Chaitin-style graph coloring algorithm. Live ranges that cannot be allocated to registers are spilled to memory. The amount of code required to spill the live range depends on the spilling heuristic used. Chaitin's spilling heuristic offers some guidance in reducing the amount of spill code produced. However, this heuristic does not allow the partial spilling of live ranges and the reduction in spill code is limited to a local… 

Spill code minimization by spill code motion

The experimental results show the approach, called spill code motion, yields up to a 10% performance increase compared to the latest spill code minimization technique in the case of using small number of registers.

Global Reduction of Spill Code by Live Range Splitting

The research done for this thesis shows that up to 25% of dynamic loads can be reduced with an up to 20% reduction in execution time and an average 2.3% increase register allocation time.

A Framework for Enhancing Code Quality in Limited Register Set Embedded Processors

A framework for better generation and placement of spill code for RISC-style embedded processors is presented and improvement over a Briggs-style allocator in reducing code size upto 3:5% and upto 8:2% in reducing static loads in some cases for a register set of size 8.

Register allocation and spilling using the expected distance heuristic

This work presents a register allocator that can adapt to improved profiling information, using branch probabilities to compute an Expected Distance to Next Use for making spill decisions and block frequency information to optimize post‐allocation spill instruction placement.

Spill code minimization techniques for graph coloring register allocators

This thesis presents several new global techniques which can be used in conjunction with the heuristics developed by Chaitin etal.

Color Flipping

This work presents a new technique to reduce spill code, called color flipping, which prevents all load/store instructions insertion when avoiding spill.

Fine-Grain Register Allocation Based on a Global Spill Costs Analysis

A new register allocation technique is proposed that improves the efficiency by using information about the flow of variable references of a program by performing register allocation at every reference of a variable in the order of the variable reference flow.

Register allocation and spill complexity under SSA

This first advanced study on the complexity of the spill problem under SSA greatly helps to the understanding and gives directions for polynomial approximations.

Achieving spilling-friendly register file assignment for highly distributed register files

To reduce spilling in the phase of register file assignment, the SPIlling-FRiendly (SPIFR) method is proposed, which attempts to improve spilling by estimating the spilling cost from two aspects: assignment and spilling.


A dynamic programming algorithm to generate spill code, which tries to simultaneously reallocate spilled variables into two type of holes left by the register allocator: intervals between live ranges, and low-density live ranges (called live-holes).



Spill code minimization techniques for optimizing compliers

This paper presents a new coherent set of heuristic methods for reducing the amount of spill code generated, which results in more efficient (and shorter) compiled code.

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.

Register allocation via graph coloring

This thesis describes a series of improvements and extensions to the Yorktown allocator, describing many implementation details and including further measurements designed to provide an accurate intuition about the time and space requirements of coloring allocators.

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.

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