i965/fs: Fix cmod propagation not to propagate non-identity cmod into CMP(N).
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 25 Apr 2016 22:39:29 +0000 (15:39 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Sat, 28 May 2016 06:29:06 +0000 (23:29 -0700)
commitc88b52745c754619d3e7af73abb71adfcc63cc7a
treedad94d4c2948f0580ae5157891b46f4627ea4862
parent8476233ae22c77ca26d8109f0f0d6c74457969f8
i965/fs: Fix cmod propagation not to propagate non-identity cmod into CMP(N).

The conditional mod of these instructions determines the semantics of
the comparison itself (rather than being evaluated based on the result
of the instruction as is usually the case for most other instructions
that allow conditional mods), so it's in general not legal to
propagate a conditional mod into a CMP instruction.  This prevents
cmod propagation from (mis)optimizing:

 cmp.z.f0 tmp, ...
 mov.z.f0 null, tmp

into:

 cmp.z.f0 tmp, ...

which gives the negation of the flag result of the original sequence.
I could reproduce this easily with SIMD32 but I don't see any reason
why the problem would be SIMD32-specific, it was most likely working
by luck.

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_fs_cmod_propagation.cpp