nv50/ir/ra: enforce max register requirement, and change spill order
authorIlia Mirkin <imirkin@alum.mit.edu>
Sun, 11 Nov 2018 20:52:33 +0000 (15:52 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sat, 17 Nov 2018 03:43:52 +0000 (22:43 -0500)
commitbeb66d374724583e56430992a8458188f07802b8
tree0d6fbd643dc619b64503e3392c7824401972fa68
parent799e021894a0e23e3017bf0cbb8780190f3e5646
nv50/ir/ra: enforce max register requirement, and change spill order

On nv50, certain operations must happen on regs below 64, due to
encoding requirements. First of all, we add infrastructure to enforce
this. Secondly we change the spill order to first spill RIG nodes that
are unconstrained, followed by ones that are.

This makes the gamecube logo shadertoy compile properly. Curiously, if
we adjust the spill order so that we first spill the constrained RIG
nodes instead, the RA also succeeds. However it seems more logical to
first spill the unconstrained ones.

While we're at it, drop the nv50 max register to reserve r127 as the
zero register of last resort (r63 is preferred).

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Acked-by: Karol Herbst <kherbst@redhat.com>
src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_target_nv50.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_util.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_util.h