[Mesa-dev] [PATCH] register_allocate: don't consider trivially colorable registers for spilling.
Kenneth Graunke
kenneth at whitecape.org
Thu Oct 4 16:13:57 PDT 2012
On 10/01/2012 03:43 PM, Paul Berry wrote:
> Previously, we considered all registers as candidates for spilling.
> This was counterproductive--for any registers that have already been
> removed from the interference graph, there is no benefit to spilling
> them, since they don't contribute to register pressure.
>
> This patch ensures that we will only try to spill registers that are
> still in the interference graph after register allocation has failed.
>
> This is consistent with the recommendations of the paper "Retargetable
> Graph-Coloring Register Allocation for Irregular Architectures", on
> which our register allocator is based.
> ---
>
> Note: I haven't found a shader whose performance is significantly
> improved by this patch (it seems that usually, our heuristics happen
> to select registers that are still in the interference graph), but it
> still seems justified on theoretical grounds.
>
> src/mesa/program/register_allocate.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/src/mesa/program/register_allocate.c b/src/mesa/program/register_allocate.c
> index 97d4e33..88793db 100644
> --- a/src/mesa/program/register_allocate.c
> +++ b/src/mesa/program/register_allocate.c
> @@ -555,6 +555,13 @@ ra_get_best_spill_node(struct ra_graph *g)
> if (cost <= 0.0)
> continue;
>
> + /* Only consider registers for spilling if they are still in the
> + * interference graph (those on the stack have already been proven to be
> + * allocatable without spilling).
> + */
> + if (g->nodes[n].in_stack)
> + continue;
> +
> benefit = ra_get_spill_benefit(g, n);
>
> if (benefit / cost > best_benefit) {
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
More information about the mesa-dev
mailing list