Studying Optimal Spilling in the Light of SSA
Résumé
Recent developments in register allocation, mostly linked to
static single assignment (SSA) form, have shown that it is
possible to decouple the problem in two successive phases: a
first spilling phase places load and store instructions so that
the register pressure at all program points is small enough, a
second assignment and coalescing phase maps the remaining
variables to physical registers and reduces the number of
move instructions among registers. This paper focuses on
the first phase, for which many open questions remain: in
particular, we study the notion of optimal spilling (what can
be expressed?) and the impact of SSA form (does it help?).
To identify the important features for optimal spilling on
load-store architectures, we develop a new integer linear pro-
gramming formulation, more accurate and expressive than
previous approaches. Among other features, we can express
SSA -functions, memory-to-memory copies, and the fact
that a value can be stored simultaneously in a register and
in memory. Based on this formulation, we present a thor-
ough analysis of the results obtained for the SPECINT 2000
and EEMBC 1.1 benchmarks, from which we draw, among
others, the following conclusions: a) rematerialization is ex-
tremely important, b) SSA complicates the formulation of
optimal spilling, especially because of memory coalescing
when the code is not in CSSA, c) micro-architectural fea-
tures are significant and thus have to be accounted for, d)
significant savings can be obtained in terms of static spill
costs, cache miss rates, and dynamic instruction counts.