i965/fs: Don't CSE negated multiplies with saturation.
authorMatt Turner <mattst88@gmail.com>
Mon, 22 Feb 2016 18:25:38 +0000 (10:25 -0800)
committerMatt Turner <mattst88@gmail.com>
Thu, 25 Feb 2016 18:51:04 +0000 (10:51 -0800)
commit1567da1e2820d4c1a6c14f4598ad3addba6bc788
treeb348940bf767e42a62ba87248a54fbd434e3f9ec
parent3da789f1e9e3eb027bcfdb9d9170e7b37160b5b9
i965/fs: Don't CSE negated multiplies with saturation.

It's not correct to CSE these multiplies

   mul.sat dst1, -a, b
   mul.sat dst2,  a, b

by emitting a negated MOV from dst1 to dst2:

   mul.sat dst1, -a, b
   mov     dst2, -dst1

Take 2.0*2.0 for example. The first multiply would produce 0.0 and the
second would produce 1.0.

Fixes bad generated code in 18 to 22 shaders:

instructions in affected programs: 432 -> 464 (7.41%)
helped: 4
HURT: 18

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_fs_cse.cpp