i965/fs: recognize writes with a subreg_offset > 0 as partial
authorIago Toral Quiroga <itoral@igalia.com>
Thu, 31 Mar 2016 10:05:31 +0000 (12:05 +0200)
committerSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Tue, 10 May 2016 09:25:09 +0000 (11:25 +0200)
commit193cb67a84c1725382f62a2f3aa60564d275c2f8
tree684d40d6020bafd37038b884a1235e2a8fb8afea
parent34ed61b33459c975074df0e83a2161fb76526621
i965/fs: recognize writes with a subreg_offset > 0 as partial

Usually, writes to a subreg_offset > 0 would also have a stride > 1
and we would recognize them as partial, however, there is one case
where this does not happen, that is when we generate code for 64-bit
imemdiates in gen7, where we produce something like this:

mov(8) vgrf10:UD, <low 32-bit>
mov(8) vgrf10+0.4:UD, <high 32-bit>

and then we use the result with a stride of 0, as in:

mov(8) vgrf13:DF, vgrf10<0>:DF

Although we could try to avoid this issue by producing different code
for this by using writes with a stride of 2, that runs into other
problems affecting gen7 and the fact is that any instruction that
writes to a subreg_offset > 0 is a partial write so we should really
recognize them as such.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp