i965/fs: Always invert predicate of SEL with swapped arguments
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 23 Mar 2015 19:03:56 +0000 (12:03 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 14 Apr 2015 15:35:10 +0000 (08:35 -0700)
commit05a1d84491eabf56564488ba0b0b0b8e91fd4309
tree3be6e36b2070849405f31dc83381376b26c1334c
parente0994e0f97a2078735f0b5e86cbad9f74c565c05
i965/fs: Always invert predicate of SEL with swapped arguments

Commit b616164 added an optimization of b2f generation of a comparison.
It also included an extra optimization of one of the comparison values
is a constant of zero.  The trick was that some value was known to be
zero, so that value could be used in the SEL instruction instead of
potentially loading 0.0 into a register.

This change switched the order of the arguments to the SEL, and, for
some unknown reason, I thought that the predicate should therefore
only be inverted for the == case.  Clearly, it should always be
inverted.

Fixes piglit fs-notEqual-of-expression.shader_test and
fs-equal-of-expression.shader_test.

v2: Don't do the "register already has zero" optimization for the '== 0'
case.  In that case, the register does not have zero when we want to
produce a zero result.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89722
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> [v1]
Tested-by: Lu Hua <huax.lu@intel.com>
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp