intel/fs: Handle flag read/write aliasing in needs_src_copy
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 7 Sep 2017 01:33:38 +0000 (18:33 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 25 Oct 2017 23:14:09 +0000 (16:14 -0700)
commitfa6e74e33e5bc5f6fba8f9de76b8b059515e708f
tree93b60d1c7fbddacfab4d13ac3735cb3b43c00e2c
parenta6d38f476beaaf0a9677cfc168172121b5779570
intel/fs: Handle flag read/write aliasing in needs_src_copy

In order to implement the ballot intrinsic, we do a MOV from flag
register to some GRF.  If that GRF is used in a SEL, cmod propagation
helpfully changes it into a MOV from the flag register with a cmod.
This is perfectly valid but when lower_simd_width comes along, it simply
splits into two instructions which both have conditional modifiers.
This is a problem since we're reading the flag register.  This commit
makes us check whether or not flags_written() overlaps with the flag
values that we are reading via the instruction source and, if we have
any interference, will force us to emit a copy of the source.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: mesa-stable@lists.freedesktop.org
src/intel/compiler/brw_fs.cpp