ra: Disable round-robin strategy for optimistically colorable nodes.
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 16 Feb 2015 11:38:39 +0000 (13:38 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Mon, 23 Feb 2015 18:55:40 +0000 (20:55 +0200)
commitf80af89d48f2c9045c7e0438a1b35d09be3e84d5
tree761fbb6143f5d77e3389517741a0372842fe1475
parent34c93fd7f119fa824062e05377de849b8a2da0e6
ra: Disable round-robin strategy for optimistically colorable nodes.

The round-robin allocation strategy is expected to decrease the amount
of false dependencies created by the register allocator and give the
post-RA scheduling pass more freedom to move instructions around.  On
the other hand it has the disadvantage of increasing fragmentation and
decreasing the number of equally-colored nearby nodes, what increases
the likelihood of failure in presence of optimistically colorable
nodes.

This patch disables the round-robin strategy for optimistically
colorable nodes.  These typically arise in situations of high register
pressure or for registers with large live intervals, in both cases the
task of the instruction scheduler shouldn't be constrained excessively
by the dense packing of those nodes, and a spill (or on Intel hardware
a fall-back to SIMD8 mode) is invariably worse than a slightly less
optimal scheduling.

Shader-db results on the i965 driver:

total instructions in shared programs: 5488539 -> 5488489 (-0.00%)
instructions in affected programs:     1121 -> 1071 (-4.46%)
helped:                                1
HURT:                                  0
GAINED:                                49
LOST:                                  5

v2: Re-enable round-robin already for the lowest one of the nodes
    pushed optimistically onto the sack (Connor).
v3: Use UINT_MAX instead of ~0, open-code MIN2 (Jason, Connor).

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/util/register_allocate.c