vc4: Interleave register allocation from regfile A and B.
authorEric Anholt <eric@anholt.net>
Sat, 6 Dec 2014 01:08:28 +0000 (17:08 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 9 Dec 2014 00:08:13 +0000 (16:08 -0800)
commit70dd3df344ddeb4b6d0f2e990dd1afaf4e46e39f
tree5634c137fd5fbeab613080ca8de8a7206c446f16
parent46741c1b872e47a76c152b0c36064f465da6e001
vc4: Interleave register allocation from regfile A and B.

The register allocator prefers low-index registers from vc4_regs[] in the
configuration we're using, which is good because it means we prioritize
allocating the accumulators (which are faster).  On the other hand, it was
causing raddr conflicts because everything beyond r0-r2 ended up in
regfile A until you got massive register pressure.  By interleaving, we
end up getting more instruction pairing from getting non-conflicting
raddrs and QPU_WSes.

total instructions in shared programs: 55957 -> 52719 (-5.79%)
instructions in affected programs:     46855 -> 43617 (-6.91%)
src/gallium/drivers/vc4/vc4_register_allocate.c