i965: Don't consider null dst instructions as matching non-null dst.
authorMatt Turner <mattst88@gmail.com>
Mon, 12 Jan 2015 21:58:06 +0000 (13:58 -0800)
committerMatt Turner <mattst88@gmail.com>
Thu, 15 Jan 2015 18:11:42 +0000 (10:11 -0800)
commitf0aec4ee1e364927f3003cabafa644035bcd803c
tree0de1c015c486c904367aae0a8faeba7b2b23c6cc
parent41d9f232b6a7f53086b9c428cca30e45905abd48
i965: Don't consider null dst instructions as matching non-null dst.

When performing common subexpression elimination on instructions with
non-null destinations we emit a MOV to copy the result to a new
register that must have no other uses. In the case of:

   cmp.g.f0.0(8) null:D, vgrf43:F, 0.500000f
   ...
   cmp.g.f0.0(8) vgrf113:D, vgrf43:F, 0.500000f

we put the first instruction in the AEB and decided that we could reuse
its result when we found the second. Unfortunately, that meant that we'd
emit a MOV from the first's destination, which is null.

Don't do anything if the entry's destination is null and the
instruction's destination is non-null.

Tested-by: Tapani Pälli <tapani.palli@intel.com>
src/mesa/drivers/dri/i965/brw_fs_cse.cpp
src/mesa/drivers/dri/i965/brw_vec4_cse.cpp