i965: Make split_virtual_grfs() call compact_virtual_grfs().
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 15 Oct 2016 10:18:36 +0000 (03:18 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 24 Oct 2016 21:33:38 +0000 (14:33 -0700)
commit27715c73ff84349466f62df0023863acd477f262
tree4b36a22b357f11465796860a030d0df3eda49305
parent3728ee000aecb19793dec56d45aff9d6cfce3e5b
i965: Make split_virtual_grfs() call compact_virtual_grfs().

Post-splitting, VGRFs have a maximum size (MAX_VGRF_SIZE).  This is
required by the register allocator, as we have to create classes for
each size of VGRF.

We can (and do) allocate virtual registers larger than MAX_VGRF_SIZE,
but we must ensure that they are splittable.  split_virtual_grfs()
asserts that the post-splitting register size is in range.

Unfortunately, these trip for completely dead registers which are too
large - we only set split points for live registers.  So dead ones are
never split, and if they happened to be too large, they'd trip asserts.

To fix this, call compact_virtual_grfs() to eliminate dead registers
before splitting.

v2: Add a comment written by Iago.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
src/mesa/drivers/dri/i965/brw_fs.cpp